@@ -36,6 +36,7 @@ const mkCommand = cmd => (args, options = {}) => {
36
36
const sls = mkCommand ( 'sls' ) ;
37
37
const git = mkCommand ( 'git' ) ;
38
38
const npm = mkCommand ( 'npm' ) ;
39
+ const perl = mkCommand ( 'perl' ) ;
39
40
40
41
const setup = ( ) => {
41
42
removeSync ( getUserCachePath ( ) ) ;
@@ -81,6 +82,12 @@ const getPythonBin = (version = 3) => {
81
82
82
83
const listZipFiles = filename =>
83
84
Object . keys ( deasync ( new JSZip ( ) . loadAsync ( readFileSync ( filename ) ) ) . files ) ;
85
+ const listRequirementsZipFiles = filename => {
86
+ const zip = deasync ( new JSZip ( ) . loadAsync ( readFileSync ( filename ) ) ) ;
87
+ const reqsBuffer = deasync ( zip . file ( '.requirements.zip' ) . async ( 'nodebuffer' ) ) ;
88
+ const reqsZip = deasync ( new JSZip ( ) . loadAsync ( reqsBuffer ) ) ;
89
+ return Object . keys ( reqsZip . files )
90
+ } ;
84
91
85
92
test ( 'default pythonBin can package flask with default options' , t => {
86
93
process . chdir ( 'tests/base' ) ;
@@ -134,3 +141,30 @@ test('py3.6 can package flask with slim option', t => {
134
141
) ;
135
142
t . end ( ) ;
136
143
} ) ;
144
+
145
+
146
+ /*
147
+ * News tests not in test.bats
148
+ */
149
+
150
+ test ( "py3.6 doesn't package bottle with zip option" , t => {
151
+ process . chdir ( 'tests/base' ) ;
152
+ const path = npm ( [ 'pack' , '../..' ] ) ;
153
+ npm ( [ 'i' , path ] ) ;
154
+ perl ( [ '-p' , "-i'.bak'" , '-e' , 's/(pythonRequirements:$)/\\1\\n noDeploy: [bottle]/' , 'serverless.yml' ] )
155
+ sls ( [ `--pythonBin=${ getPythonBin ( 3 ) } ` , '--zip=true' , 'package' ] ) ;
156
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
157
+ const zippedReqs = listRequirementsZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
158
+ t . true (
159
+ zipfiles . includes ( '.requirements.zip' ) ,
160
+ 'zipped requirements are packaged'
161
+ ) ;
162
+ t . true ( zipfiles . includes ( `unzip_requirements.py` ) , 'unzip util is packaged' ) ;
163
+ t . false (
164
+ zipfiles . includes ( `flask${ sep } __init__.py` ) ,
165
+ "flask isn't packaged on its own"
166
+ ) ;
167
+ t . true ( zippedReqs . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged in the .requirements.zip file' ) ;
168
+ t . false ( zippedReqs . includes ( `bottle.py` ) , 'bottle is not packaged in the .requirements.zip file' ) ;
169
+ t . end ( ) ;
170
+ } ) ;
0 commit comments