@@ -109,6 +109,46 @@ describe('Project', () => {
109
109
} ) ;
110
110
} ) ;
111
111
112
+ test ( 'getDependencyGraph() without excluded dependency types' , async ( ) => {
113
+ let project = await Project . init ( f . find ( 'dev-dependent-workspaces-only' ) ) ;
114
+ let packages = await project . getPackages ( ) ;
115
+ let { valid, graph } = await project . getDependencyGraph ( packages ) ;
116
+ let expectedDependencies = {
117
+ 'dev-dependent-workspaces-only' : [ ] ,
118
+ bar : [ ] ,
119
+ foo : [ 'bar' ]
120
+ } ;
121
+
122
+ expect ( valid ) . toEqual ( true ) ;
123
+ expect ( graph ) . toBeInstanceOf ( Map ) ;
124
+ expect ( graph . size ) . toBe ( Object . keys ( expectedDependencies ) . length ) ;
125
+
126
+ Object . entries ( expectedDependencies ) . forEach ( ( [ pkg , dependencies ] ) => {
127
+ assertDependencies ( graph , pkg , dependencies ) ;
128
+ } ) ;
129
+ } ) ;
130
+
131
+ test ( 'getDependencyGraph() with excluded dependency types' , async ( ) => {
132
+ let project = await Project . init ( f . find ( 'dev-dependent-workspaces-only' ) ) ;
133
+ let packages = await project . getPackages ( ) ;
134
+ let { valid, graph } = await project . getDependencyGraph ( packages , [
135
+ 'devDependencies'
136
+ ] ) ;
137
+ let expectedDependencies = {
138
+ 'dev-dependent-workspaces-only' : [ ] ,
139
+ bar : [ ] ,
140
+ foo : [ ]
141
+ } ;
142
+
143
+ expect ( valid ) . toEqual ( true ) ;
144
+ expect ( graph ) . toBeInstanceOf ( Map ) ;
145
+ expect ( graph . size ) . toBe ( Object . keys ( expectedDependencies ) . length ) ;
146
+
147
+ Object . entries ( expectedDependencies ) . forEach ( ( [ pkg , dependencies ] ) => {
148
+ assertDependencies ( graph , pkg , dependencies ) ;
149
+ } ) ;
150
+ } ) ;
151
+
112
152
test ( 'getDependentsGraph() with nested workspaces' , async ( ) => {
113
153
let project = await Project . init ( f . find ( 'nested-workspaces' ) ) ;
114
154
let packages = await project . getPackages ( ) ;
@@ -150,6 +190,44 @@ describe('Project', () => {
150
190
} ) ;
151
191
} ) ;
152
192
193
+ test ( 'getDependentsGraph() without excluded dependency types' , async ( ) => {
194
+ let project = await Project . init ( f . find ( 'dev-dependent-workspaces-only' ) ) ;
195
+ let packages = await project . getPackages ( ) ;
196
+ let { valid, graph } = await project . getDependentsGraph ( packages ) ;
197
+ let expectedDependents = {
198
+ bar : [ 'foo' ] ,
199
+ foo : [ ]
200
+ } ;
201
+
202
+ expect ( valid ) . toEqual ( true ) ;
203
+ expect ( graph ) . toBeInstanceOf ( Map ) ;
204
+ expect ( graph . size ) . toBe ( Object . keys ( expectedDependents ) . length ) ;
205
+
206
+ Object . entries ( expectedDependents ) . forEach ( ( [ pkg , dependents ] ) => {
207
+ assertDependents ( graph , pkg , dependents ) ;
208
+ } ) ;
209
+ } ) ;
210
+
211
+ test ( 'getDependentsGraph() with excluded dependency types' , async ( ) => {
212
+ let project = await Project . init ( f . find ( 'dev-dependent-workspaces-only' ) ) ;
213
+ let packages = await project . getPackages ( ) ;
214
+ let { valid, graph } = await project . getDependentsGraph ( packages , [
215
+ 'devDependencies'
216
+ ] ) ;
217
+ let expectedDependents = {
218
+ bar : [ ] ,
219
+ foo : [ ]
220
+ } ;
221
+
222
+ expect ( valid ) . toEqual ( true ) ;
223
+ expect ( graph ) . toBeInstanceOf ( Map ) ;
224
+ expect ( graph . size ) . toBe ( Object . keys ( expectedDependents ) . length ) ;
225
+
226
+ Object . entries ( expectedDependents ) . forEach ( ( [ pkg , dependents ] ) => {
227
+ assertDependents ( graph , pkg , dependents ) ;
228
+ } ) ;
229
+ } ) ;
230
+
153
231
test ( 'filterPackages() with no flags' , async ( ) => {
154
232
let project = await Project . init ( f . find ( 'nested-workspaces' ) ) ;
155
233
let packages = await project . getPackages ( ) ;
@@ -431,4 +509,42 @@ describe('Project', () => {
431
509
}
432
510
done ( ) ;
433
511
} ) ;
512
+
513
+ test ( 'runPackageTasks() excludeFromGraph: devDependencies' , async ( ) => {
514
+ let project = await Project . init ( f . find ( 'dev-dependent-workspaces-only' ) ) ;
515
+ let packages = await project . getPackages ( ) ;
516
+ let ops = [ ] ;
517
+
518
+ await project . runPackageTasks (
519
+ packages ,
520
+ { excludeFromGraph : [ 'devDependencies' ] } ,
521
+ async pkg => {
522
+ ops . push ( 'start:' + pkg . getName ( ) ) ;
523
+ await Promise . resolve ( ) ;
524
+ ops . push ( 'end:' + pkg . getName ( ) ) ;
525
+ }
526
+ ) ;
527
+
528
+ expect ( ops ) . toEqual ( [ 'start:bar' , 'start:foo' , 'end:bar' , 'end:foo' ] ) ;
529
+ } ) ;
530
+
531
+ test ( 'runPackageTasks() excludeFromGraph: devDependencies cycle' , async ( ) => {
532
+ let project = await Project . init ( f . find ( 'dependent-workspaces-with-cycle' ) ) ;
533
+ let packages = await project . getPackages ( ) ;
534
+ let ops = [ ] ;
535
+
536
+ await project . runPackageTasks (
537
+ packages ,
538
+ { excludeFromGraph : [ 'devDependencies' ] } ,
539
+ async pkg => {
540
+ ops . push ( 'start:' + pkg . getName ( ) ) ;
541
+ await Promise . resolve ( ) ;
542
+ ops . push ( 'end:' + pkg . getName ( ) ) ;
543
+ }
544
+ ) ;
545
+
546
+ expect ( ops ) . toEqual ( [ 'start:bar' , 'end:bar' , 'start:foo' , 'end:foo' ] ) ;
547
+ // There is not a cycle anymore now that we have excluded devDependencies
548
+ expect ( logger . warn ) . not . toHaveBeenCalled ( ) ;
549
+ } ) ;
434
550
} ) ;
0 commit comments