@@ -3,7 +3,7 @@ const deasync = require('deasync-promise');
3
3
const glob = require ( 'glob-all' ) ;
4
4
const JSZip = require ( 'jszip' ) ;
5
5
const tape = require ( 'tape' ) ;
6
- const { removeSync, readFileSync } = require ( 'fs-extra' ) ;
6
+ const { removeSync, readFileSync, copySync } = require ( 'fs-extra' ) ;
7
7
const { sep } = require ( 'path' ) ;
8
8
9
9
const { getUserCachePath } = require ( './lib/shared' ) ;
@@ -63,8 +63,8 @@ const teardown = () => {
63
63
removeSync ( 'tests/base with a space' ) ;
64
64
} ;
65
65
66
- const test = ( desc , func ) =>
67
- tape . test ( desc , t => {
66
+ const test = ( desc , func , opts = { } ) =>
67
+ tape . test ( desc , opts , t => {
68
68
setup ( ) ;
69
69
try {
70
70
func ( t ) ;
@@ -86,7 +86,17 @@ const listRequirementsZipFiles = filename => {
86
86
const zip = deasync ( new JSZip ( ) . loadAsync ( readFileSync ( filename ) ) ) ;
87
87
const reqsBuffer = deasync ( zip . file ( '.requirements.zip' ) . async ( 'nodebuffer' ) ) ;
88
88
const reqsZip = deasync ( new JSZip ( ) . loadAsync ( reqsBuffer ) ) ;
89
- return Object . keys ( reqsZip . files )
89
+ return Object . keys ( reqsZip . files ) ;
90
+ } ;
91
+
92
+ const canUseDocker = ( ) => {
93
+ let result ;
94
+ try {
95
+ result = crossSpawn . sync ( 'docker' , [ 'ps' ] ) ;
96
+ } catch ( e ) {
97
+ return false ;
98
+ }
99
+ return result . status === 0 ;
90
100
} ;
91
101
92
102
test ( 'default pythonBin can package flask with default options' , t => {
@@ -142,7 +152,6 @@ test('py3.6 can package flask with slim option', t => {
142
152
t . end ( ) ;
143
153
} ) ;
144
154
145
-
146
155
/*
147
156
* News tests not in test.bats
148
157
*/
@@ -151,10 +160,18 @@ test("py3.6 doesn't package bottle with zip option", t => {
151
160
process . chdir ( 'tests/base' ) ;
152
161
const path = npm ( [ 'pack' , '../..' ] ) ;
153
162
npm ( [ 'i' , path ] ) ;
154
- perl ( [ '-p' , "-i'.bak'" , '-e' , 's/(pythonRequirements:$)/\\1\\n noDeploy: [bottle]/' , 'serverless.yml' ] )
163
+ perl ( [
164
+ '-p' ,
165
+ "-i'.bak'" ,
166
+ '-e' ,
167
+ 's/(pythonRequirements:$)/\\1\\n noDeploy: [bottle]/' ,
168
+ 'serverless.yml'
169
+ ] ) ;
155
170
sls ( [ `--pythonBin=${ getPythonBin ( 3 ) } ` , '--zip=true' , 'package' ] ) ;
156
171
const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
157
- const zippedReqs = listRequirementsZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
172
+ const zippedReqs = listRequirementsZipFiles (
173
+ '.serverless/sls-py-req-test.zip'
174
+ ) ;
158
175
t . true (
159
176
zipfiles . includes ( '.requirements.zip' ) ,
160
177
'zipped requirements are packaged'
@@ -164,7 +181,141 @@ test("py3.6 doesn't package bottle with zip option", t => {
164
181
zipfiles . includes ( `flask${ sep } __init__.py` ) ,
165
182
"flask isn't packaged on its own"
166
183
) ;
167
- t . true ( zippedReqs . includes ( `flask/__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' ) ;
184
+ t . true (
185
+ zippedReqs . includes ( `flask/__init__.py` ) ,
186
+ 'flask is packaged in the .requirements.zip file'
187
+ ) ;
188
+ t . false (
189
+ zippedReqs . includes ( `bottle.py` ) ,
190
+ 'bottle is not packaged in the .requirements.zip file'
191
+ ) ;
192
+ t . end ( ) ;
193
+ } ) ;
194
+
195
+ test ( 'py3.6 can package flask with slim, slimPatterns & slimPatternsAppendDefaults=false options' , t => {
196
+ process . chdir ( 'tests/base' ) ;
197
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
198
+ const path = npm ( [ 'pack' , '../..' ] ) ;
199
+ npm ( [ 'i' , path ] ) ;
200
+ sls ( [ '--slim=true' , '--slimPatternsAppendDefaults=false' , 'package' ] ) ;
201
+
202
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
203
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
204
+ t . true (
205
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
206
+ 'pyc files are packaged'
207
+ ) ;
208
+ t . deepEqual (
209
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
210
+ [ ] ,
211
+ '.egg-info folders are not packaged'
212
+ ) ;
213
+ t . end ( ) ;
214
+ } ) ;
215
+
216
+ test (
217
+ 'py3.6 can package flask with slim & dockerizePip & slimPatterns & slimPatternsAppendDefaults=false options' ,
218
+ t => {
219
+ process . chdir ( 'tests/base' ) ;
220
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
221
+ const path = npm ( [ 'pack' , '../..' ] ) ;
222
+ npm ( [ 'i' , path ] ) ;
223
+ sls ( [
224
+ '--dockerizePip=true' ,
225
+ '--slim=true' ,
226
+ '--slimPatternsAppendDefaults=false' ,
227
+ 'package'
228
+ ] ) ;
229
+
230
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
231
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
232
+ t . true (
233
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
234
+ 'pyc files are packaged'
235
+ ) ;
236
+ t . deepEqual (
237
+ zipfiles . filter ( filename => filename . includes ( '.egg-infooo' ) ) ,
238
+ [ ] ,
239
+ '.egg-info folders are not packaged'
240
+ ) ;
241
+ t . end ( ) ;
242
+ } ,
243
+ { skip : ! canUseDocker ( ) }
244
+ ) ;
245
+
246
+ test ( 'py2.7 can package flask with slim & slimPatterns & slimPatternsAppendDefaults=false options' , t => {
247
+ process . chdir ( 'tests/base' ) ;
248
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
249
+ const path = npm ( [ 'pack' , '../..' ] ) ;
250
+ npm ( [ 'i' , path ] ) ;
251
+ sls ( [
252
+ '--runtime=python2.7' ,
253
+ '--slim=true' ,
254
+ '--slimPatternsAppendDefaults=false' ,
255
+ 'package'
256
+ ] ) ;
257
+
258
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
259
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
260
+ t . true (
261
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
262
+ 'pyc files are packaged'
263
+ ) ;
264
+ t . deepEqual (
265
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
266
+ [ ] ,
267
+ '.egg-info folders are not packaged'
268
+ ) ;
269
+ t . end ( ) ;
270
+ } ) ;
271
+
272
+ test (
273
+ 'py2.7 can package flask with slim & dockerizePip & slimPatterns & slimPatternsAppendDefaults=false options' ,
274
+ t => {
275
+ process . chdir ( 'tests/base' ) ;
276
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
277
+ const path = npm ( [ 'pack' , '../..' ] ) ;
278
+ npm ( [ 'i' , path ] ) ;
279
+ sls ( [
280
+ '--dockerizePip=true' ,
281
+ '--runtime=python2.7' ,
282
+ '--slim=true' ,
283
+ '--slimPatternsAppendDefaults=false' ,
284
+ 'package'
285
+ ] ) ;
286
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
287
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
288
+ t . true (
289
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
290
+ 'pyc files are packaged'
291
+ ) ;
292
+ t . deepEqual (
293
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
294
+ [ ] ,
295
+ '.egg-info folders are not packaged'
296
+ ) ;
297
+ t . end ( ) ;
298
+ } ,
299
+ { skip : ! canUseDocker ( ) }
300
+ ) ;
301
+
302
+ test ( 'pipenv py3.6 can package flask with slim & slimPatterns & slimPatternsAppendDefaults=false option' , t => {
303
+ process . chdir ( 'tests/pipenv' ) ;
304
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
305
+ const path = npm ( [ 'pack' , '../..' ] ) ;
306
+ npm ( [ 'i' , path ] ) ;
307
+
308
+ sls ( [ '--slim=true' , '--slimPatternsAppendDefaults=false' , 'package' ] ) ;
309
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
310
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
311
+ t . true (
312
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
313
+ 'pyc files are packaged'
314
+ ) ;
315
+ t . deepEqual (
316
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
317
+ [ ] ,
318
+ '.egg-info folders are not packaged'
319
+ ) ;
169
320
t . end ( ) ;
170
321
} ) ;
0 commit comments