@@ -3,7 +3,8 @@ 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, pathExistsSync } = require ( 'fs-extra' ) ;
6
+
7
+ const { removeSync, readFileSync, pathExistsSync, copySync } = require ( 'fs-extra' ) ;
7
8
const { sep } = require ( 'path' ) ;
8
9
9
10
const { getUserCachePath } = require ( './lib/shared' ) ;
@@ -63,8 +64,8 @@ const teardown = () => {
63
64
removeSync ( 'tests/base with a space' ) ;
64
65
} ;
65
66
66
- const test = ( desc , func ) =>
67
- tape . test ( desc , t => {
67
+ const test = ( desc , func , opts = { } ) =>
68
+ tape . test ( desc , opts , t => {
68
69
setup ( ) ;
69
70
try {
70
71
func ( t ) ;
@@ -89,6 +90,16 @@ const listRequirementsZipFiles = filename => {
89
90
return Object . keys ( reqsZip . files ) ;
90
91
} ;
91
92
93
+ const canUseDocker = ( ) => {
94
+ let result ;
95
+ try {
96
+ result = crossSpawn . sync ( 'docker' , [ 'ps' ] ) ;
97
+ } catch ( e ) {
98
+ return false ;
99
+ }
100
+ return result . status === 0 ;
101
+ } ;
102
+
92
103
test ( 'default pythonBin can package flask with default options' , t => {
93
104
process . chdir ( 'tests/base' ) ;
94
105
const path = npm ( [ 'pack' , '../..' ] ) ;
@@ -530,6 +541,7 @@ test('py3.6 uses download cache with cacheLocation option', t => {
530
541
t . end ( ) ;
531
542
} ) ;
532
543
544
+
533
545
/*
534
546
* News tests not in test.bats
535
547
*/
@@ -569,3 +581,131 @@ test("py3.6 doesn't package bottle with zip option", t => {
569
581
) ;
570
582
t . end ( ) ;
571
583
} ) ;
584
+
585
+ test ( 'py3.6 can package flask with slim, slimPatterns & slimPatternsAppendDefaults=false options' , t => {
586
+ process . chdir ( 'tests/base' ) ;
587
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
588
+ const path = npm ( [ 'pack' , '../..' ] ) ;
589
+ npm ( [ 'i' , path ] ) ;
590
+ sls ( [ '--slim=true' , '--slimPatternsAppendDefaults=false' , 'package' ] ) ;
591
+
592
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
593
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
594
+ t . true (
595
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
596
+ 'pyc files are packaged'
597
+ ) ;
598
+ t . deepEqual (
599
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
600
+ [ ] ,
601
+ '.egg-info folders are not packaged'
602
+ ) ;
603
+ t . end ( ) ;
604
+ } ) ;
605
+
606
+ test (
607
+ 'py3.6 can package flask with slim & dockerizePip & slimPatterns & slimPatternsAppendDefaults=false options' ,
608
+ t => {
609
+ process . chdir ( 'tests/base' ) ;
610
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
611
+ const path = npm ( [ 'pack' , '../..' ] ) ;
612
+ npm ( [ 'i' , path ] ) ;
613
+ sls ( [
614
+ '--dockerizePip=true' ,
615
+ '--slim=true' ,
616
+ '--slimPatternsAppendDefaults=false' ,
617
+ 'package'
618
+ ] ) ;
619
+
620
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
621
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
622
+ t . true (
623
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
624
+ 'pyc files are packaged'
625
+ ) ;
626
+ t . deepEqual (
627
+ zipfiles . filter ( filename => filename . includes ( '.egg-infooo' ) ) ,
628
+ [ ] ,
629
+ '.egg-info folders are not packaged'
630
+ ) ;
631
+ t . end ( ) ;
632
+ } ,
633
+ { skip : ! canUseDocker ( ) }
634
+ ) ;
635
+
636
+ test ( 'py2.7 can package flask with slim & slimPatterns & slimPatternsAppendDefaults=false options' , t => {
637
+ process . chdir ( 'tests/base' ) ;
638
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
639
+ const path = npm ( [ 'pack' , '../..' ] ) ;
640
+ npm ( [ 'i' , path ] ) ;
641
+ sls ( [
642
+ '--runtime=python2.7' ,
643
+ '--slim=true' ,
644
+ '--slimPatternsAppendDefaults=false' ,
645
+ 'package'
646
+ ] ) ;
647
+
648
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
649
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
650
+ t . true (
651
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
652
+ 'pyc files are packaged'
653
+ ) ;
654
+ t . deepEqual (
655
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
656
+ [ ] ,
657
+ '.egg-info folders are not packaged'
658
+ ) ;
659
+ t . end ( ) ;
660
+ } ) ;
661
+
662
+ test (
663
+ 'py2.7 can package flask with slim & dockerizePip & slimPatterns & slimPatternsAppendDefaults=false options' ,
664
+ t => {
665
+ process . chdir ( 'tests/base' ) ;
666
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
667
+ const path = npm ( [ 'pack' , '../..' ] ) ;
668
+ npm ( [ 'i' , path ] ) ;
669
+ sls ( [
670
+ '--dockerizePip=true' ,
671
+ '--runtime=python2.7' ,
672
+ '--slim=true' ,
673
+ '--slimPatternsAppendDefaults=false' ,
674
+ 'package'
675
+ ] ) ;
676
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
677
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
678
+ t . true (
679
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
680
+ 'pyc files are packaged'
681
+ ) ;
682
+ t . deepEqual (
683
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
684
+ [ ] ,
685
+ '.egg-info folders are not packaged'
686
+ ) ;
687
+ t . end ( ) ;
688
+ } ,
689
+ { skip : ! canUseDocker ( ) }
690
+ ) ;
691
+
692
+ test ( 'pipenv py3.6 can package flask with slim & slimPatterns & slimPatternsAppendDefaults=false option' , t => {
693
+ process . chdir ( 'tests/pipenv' ) ;
694
+ copySync ( '_slimPatterns.yml' , 'slimPatterns.yml' ) ;
695
+ const path = npm ( [ 'pack' , '../..' ] ) ;
696
+ npm ( [ 'i' , path ] ) ;
697
+
698
+ sls ( [ '--slim=true' , '--slimPatternsAppendDefaults=false' , 'package' ] ) ;
699
+ const zipfiles = listZipFiles ( '.serverless/sls-py-req-test.zip' ) ;
700
+ t . true ( zipfiles . includes ( `flask${ sep } __init__.py` ) , 'flask is packaged' ) ;
701
+ t . true (
702
+ zipfiles . filter ( filename => filename . endsWith ( '.pyc' ) ) . length >= 1 ,
703
+ 'pyc files are packaged'
704
+ ) ;
705
+ t . deepEqual (
706
+ zipfiles . filter ( filename => filename . includes ( '.egg-info' ) ) ,
707
+ [ ] ,
708
+ '.egg-info folders are not packaged'
709
+ ) ;
710
+ t . end ( ) ;
711
+ } ) ;
0 commit comments