@@ -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' ) ;
@@ -135,6 +142,7 @@ test('py3.6 can package flask with slim option', t => {
135
142
t . end ( ) ;
136
143
} ) ;
137
144
145
+
138
146
test ( 'can package individually without moving modules to root of zip-File' , t => {
139
147
process . chdir ( 'tests/base' ) ;
140
148
const path = npm ( [ 'pack' , '../..' ] ) ;
@@ -150,3 +158,29 @@ test('can package individually without moving modules to root of zip-File', t =>
150
158
t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
151
159
t . end ( ) ;
152
160
} ) ;
161
+
162
+ /*
163
+ * News tests not in test.bats
164
+ */
165
+
166
+ test ( "py3.6 doesn't package bottle with zip option" , t => {
167
+ process . chdir ( 'tests/base' ) ;
168
+ const path = npm ( [ 'pack' , '../..' ] ) ;
169
+ npm ( [ 'i' , path ] ) ;
170
+ perl ( [ '-p' , "-i'.bak'" , '-e' , 's/(pythonRequirements:$)/\\1\\n noDeploy: [bottle]/' , 'serverless.yml' ] )
171
+ sls ( [ `--pythonBin=${ getPythonBin ( 3 ) } ` , '--zip=true' , 'package' ] ) ;
172
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
173
+ const zippedReqs = listRequirementsZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
174
+ t . true (
175
+ zipfiles . includes ( '.requirements.zip' ) ,
176
+ 'zipped requirements are packaged'
177
+ ) ;
178
+ t . true ( zipfiles . includes ( `unzip_requirements.py` ) , 'unzip util is packaged' ) ;
179
+ t . false (
180
+ zipfiles . includes ( `flask${ sep } __init__.py` ) ,
181
+ "flask isn't packaged on its own"
182
+ ) ;
183
+ t . true ( zippedReqs . includes ( `flask/__init__.py` ) , 'flask is packaged in the .requirements.zip file' ) ;
184
+ t . false ( zippedReqs . includes ( `bottle.py` ) , 'bottle is not packaged in the .requirements.zip file' ) ;
185
+ t . end ( ) ;
186
+ } ) ;
0 commit comments