@@ -22,6 +22,7 @@ Before(
22
22
this . jwt = null ;
23
23
this . template = null ;
24
24
this . jobName = 'main' ;
25
+ this . additionalJobName = 'test' ;
25
26
26
27
this . startJob = jobName => {
27
28
return this . ensurePipelineExists ( {
@@ -164,6 +165,18 @@ Given(
164
165
shouldNotDeletePipeline : true
165
166
} )
166
167
)
168
+ . then ( ( ) =>
169
+ request ( {
170
+ url : `${ this . instance } /${ this . namespace } /pipelines/${ this . pipelineId } ` ,
171
+ method : 'GET' ,
172
+ context : {
173
+ token : this . jwt
174
+ }
175
+ } )
176
+ )
177
+ . then ( response => {
178
+ Assert . equal ( response . body . templateVersionId , this . templateId ) ;
179
+ } )
167
180
. then ( ( ) =>
168
181
request ( {
169
182
url : `${ this . instance } /${ this . namespace } /pipelines/${ this . pipelineId } /jobs` ,
@@ -174,20 +187,79 @@ Given(
174
187
} )
175
188
)
176
189
. then ( response => {
177
- Assert . equal ( response . body . length , 1 ) ;
178
- Assert . equal ( response . body [ 0 ] . templateId , this . templateId ) ;
190
+ this . jobs = Object . fromEntries ( response . body . map ( job => [ job . name , job ] ) ) ;
179
191
} ) ;
180
192
}
181
193
) ;
182
194
183
- Given ( / ^ u s e r h a s s o m e p i p e l i n e s e t t i n g s d e f i n e d $ / , function step ( ) {
184
- Assert . equal ( this . job . permutations [ 0 ] . commands . length , 3 ) ;
185
- Assert . equal ( this . job . permutations [ 0 ] . image , 'node:20' ) ;
195
+ Given ( / ^ u s e r d e f i n e d s h a r e d s e t t i n g s $ / , function step ( ) {
196
+ const job = this . jobs [ this . jobName ] ;
197
+
198
+ Assert . equal ( Object . keys ( this . jobs ) . length , 1 ) ;
199
+ Assert . equal ( job . permutations [ 0 ] . image , 'node:20' ) ;
200
+ Assert . equal ( job . permutations [ 0 ] . environment . FOO , 'bar' ) ;
201
+ Assert . equal ( job . permutations [ 0 ] . environment . BAR , 'baz' ) ;
202
+ Assert . equal ( job . permutations [ 0 ] . commands . length , 2 ) ;
203
+ } ) ;
204
+
205
+ Given ( / ^ t h e p i p e l i n e t e m p l a t e h a s o v e r w r i t t e n s h a r e d s e t t i n g s $ / , function step ( ) {
206
+ const job = this . jobs [ this . jobName ] ;
207
+
208
+ Assert . notEqual ( job . permutations [ 0 ] . image , this . templateConfig . jobs [ this . jobName ] . image ) ;
209
+ Assert . equal ( Object . hasOwn ( this . templateConfig . jobs [ this . jobName ] . environment , 'BAR' ) , false ) ;
186
210
} ) ;
187
211
188
- Given ( / ^ t h e p i p e l i n e t e m p l a t e h a s t h e s a m e s e t t i n g s w i t h d i f f e r e n t v a l u e s $ / , function step ( ) {
189
- Assert . notEqual ( this . job . permutations [ 0 ] . commands . length , this . templateConfig . jobs [ this . jobName ] . steps . length ) ;
190
- Assert . notEqual ( this . job . permutations [ 0 ] . image , this . templateConfig . shared . image ) ;
212
+ Given ( / ^ u s e r d e f i n e d e x i s t s j o b s s e t t i n g s $ / , function step ( ) {
213
+ const job = this . jobs [ this . jobName ] ;
214
+
215
+ Assert . equal ( Object . keys ( this . jobs ) . length , 1 ) ;
216
+ Assert . equal ( job . permutations [ 0 ] . image , 'node:22' ) ;
217
+ Assert . equal ( job . permutations [ 0 ] . annotations [ 'screwdriver.cd/displayName' ] , 'foo-bar' ) ;
218
+ Assert . equal ( job . permutations [ 0 ] . environment . FOO , 'bar' ) ;
219
+ Assert . equal ( job . permutations [ 0 ] . environment . BAR , 'baz' ) ;
220
+ Assert . equal ( job . permutations [ 0 ] . environment . BAZ , 'qux' ) ;
221
+ Assert . equal ( job . permutations [ 0 ] . commands . length , 2 ) ;
222
+ } ) ;
223
+
224
+ Given ( / ^ t h e p i p e l i n e t e m p l a t e h a s o v e r w r i t t e n j o b s s e t t i n g s $ / , function step ( ) {
225
+ const job = this . jobs [ this . jobName ] ;
226
+
227
+ Assert . notEqual ( job . permutations [ 0 ] . image , this . templateConfig . jobs [ this . jobName ] . image ) ;
228
+ Assert . isFalse ( Object . hasOwn ( this . templateConfig . jobs [ this . jobName ] . environment , 'BAR' ) ) ;
229
+ Assert . isFalse ( Object . hasOwn ( this . templateConfig . jobs [ this . jobName ] . environment , 'BAZ' ) ) ;
230
+ } ) ;
231
+
232
+ Given ( / ^ u s e r d e f i n e d a d d i t i o n a l j o b s s e t t i n g s $ / , function step ( ) {
233
+ const existsJob = this . jobs [ this . jobName ] ;
234
+ const userDefinedJob = this . jobs [ this . additionalJobName ] ;
235
+
236
+ Assert . equal ( Object . keys ( this . jobs ) . length , 2 ) ;
237
+ Assert . equal ( existsJob . permutations [ 0 ] . image , 'node:22' ) ;
238
+ Assert . equal ( existsJob . permutations [ 0 ] . annotations [ 'screwdriver.cd/displayName' ] , 'foo-bar' ) ;
239
+ Assert . equal ( existsJob . permutations [ 0 ] . environment . FOO , 'bar' ) ;
240
+ Assert . equal ( existsJob . permutations [ 0 ] . environment . BAR , 'baz' ) ;
241
+ Assert . equal ( existsJob . permutations [ 0 ] . environment . BAZ , 'qux' ) ;
242
+ Assert . equal ( existsJob . permutations [ 0 ] . commands . length , 2 ) ;
243
+ Assert . isFalse ( Object . hasOwn ( existsJob . permutations [ 0 ] . environment , 'QUX' ) ) ;
244
+
245
+ Assert . equal ( userDefinedJob . permutations [ 0 ] . image , 'node:23' ) ;
246
+ Assert . equal ( userDefinedJob . permutations [ 0 ] . annotations [ 'screwdriver.cd/displayName' ] , 'baz-qux' ) ;
247
+ Assert . equal ( userDefinedJob . permutations [ 0 ] . environment . BAR , 'baz' ) ;
248
+ Assert . equal ( userDefinedJob . permutations [ 0 ] . environment . QUX , 'quux' ) ;
249
+ Assert . equal ( userDefinedJob . permutations [ 0 ] . commands . length , 3 ) ;
250
+ Assert . isFalse ( Object . hasOwn ( userDefinedJob . permutations [ 0 ] . environment , 'FOO' ) ) ;
251
+ Assert . isFalse ( Object . hasOwn ( userDefinedJob . permutations [ 0 ] . environment , 'BAZ' ) ) ;
252
+ } ) ;
253
+
254
+ Given ( / ^ t h e p i p e l i n e t e m p l a t e h a s a d d i t i o n a l j o b s s e t t i n g s $ / , function step ( ) {
255
+ const existsJob = this . jobs [ this . jobName ] ;
256
+
257
+ Assert . notEqual ( existsJob . permutations [ 0 ] . image , this . templateConfig . jobs [ this . jobName ] . image ) ;
258
+ Assert . isFalse ( Object . hasOwn ( this . templateConfig . jobs [ this . jobName ] . environment , 'BAR' ) ) ;
259
+ Assert . isFalse ( Object . hasOwn ( this . templateConfig . jobs [ this . jobName ] . environment , 'BAZ' ) ) ;
260
+ Assert . isFalse ( Object . hasOwn ( this . templateConfig . jobs [ this . jobName ] . annotations , 'screwdriver.cd/displayName' ) ) ;
261
+
262
+ Assert . isFalse ( Object . hasOwn ( this . templateConfig . jobs , this . additionalJobName ) ) ;
191
263
} ) ;
192
264
193
265
When (
@@ -242,7 +314,7 @@ When(
242
314
) ;
243
315
244
316
When (
245
- / ^ u s e r s t a r t s t h e p i p e l i n e t h a t u s e s p i p e l i n e t e m p l a t e $ / ,
317
+ / ^ u s e r s t a r t s t h e j o b t h a t u s e s p i p e l i n e t e m p l a t e $ / ,
246
318
{
247
319
timeout : TIMEOUT
248
320
} ,
@@ -253,6 +325,144 @@ When(
253
325
}
254
326
) ;
255
327
328
+ When (
329
+ / ^ u s e r s t a r t s t h e a d d i t i o n a l j o b t h a t u s e s p i p e l i n e t e m p l a t e $ / ,
330
+ {
331
+ timeout : TIMEOUT
332
+ } ,
333
+ function step ( ) {
334
+ return this . startJob ( this . additionalJobName ) . then ( result => {
335
+ Assert . oneOf ( result , [ 'SUCCESS' , 'FAILURE' ] ) ;
336
+ } ) ;
337
+ }
338
+ ) ;
339
+
340
+ Then (
341
+ / ^ j o b s e t t i n g s a r e t h e t e m p l a t e c o m m a n d $ / ,
342
+ {
343
+ timeout : TIMEOUT
344
+ } ,
345
+ function step ( ) {
346
+ return request ( {
347
+ url : `${ this . instance } /${ this . namespace } /builds/${ this . buildId } /steps` ,
348
+ method : 'GET' ,
349
+ context : {
350
+ token : this . jwt
351
+ }
352
+ } ) . then ( response => {
353
+ Assert . equal ( response . statusCode , 200 ) ;
354
+ const steps = Object . fromEntries (
355
+ response . body
356
+ . filter ( s => ! s . name . startsWith ( 'sd-setup' ) && ! s . name . startsWith ( 'sd-teardown' ) )
357
+ . map ( job => [ job . name , job ] )
358
+ ) ;
359
+
360
+ const expectedSteps = [
361
+ {
362
+ name : 'pretest' ,
363
+ command : "echo 'pretest'"
364
+ } ,
365
+ {
366
+ name : 'test' ,
367
+ command : 'echo $FOO'
368
+ }
369
+ ] ;
370
+
371
+ Assert . equal ( Object . keys ( steps ) . length , expectedSteps . length ) ;
372
+ expectedSteps . forEach ( expectedStep => {
373
+ const result = steps [ expectedStep . name ] ;
374
+
375
+ Assert . equal ( result . name , expectedStep . name ) ;
376
+ Assert . equal ( result . command , expectedStep . command ) ;
377
+ } ) ;
378
+ } ) ;
379
+ }
380
+ ) ;
381
+
382
+ Then (
383
+ / ^ j o b s e t t i n g s a r e t h e u s e r c o m m a n d $ / ,
384
+ {
385
+ timeout : TIMEOUT
386
+ } ,
387
+ function step ( ) {
388
+ return request ( {
389
+ url : `${ this . instance } /${ this . namespace } /builds/${ this . buildId } /steps` ,
390
+ method : 'GET' ,
391
+ context : {
392
+ token : this . jwt
393
+ }
394
+ } ) . then ( response => {
395
+ Assert . equal ( response . statusCode , 200 ) ;
396
+ const steps = Object . fromEntries (
397
+ response . body
398
+ . filter ( s => ! s . name . startsWith ( 'sd-setup' ) && ! s . name . startsWith ( 'sd-teardown' ) )
399
+ . map ( job => [ job . name , job ] )
400
+ ) ;
401
+
402
+ const expectedSteps = [
403
+ {
404
+ name : 'pretest' ,
405
+ command : "echo 'pretest'"
406
+ } ,
407
+ {
408
+ name : 'test' ,
409
+ command : 'echo $FOO'
410
+ }
411
+ ] ;
412
+
413
+ Assert . equal ( Object . keys ( steps ) . length , expectedSteps . length ) ;
414
+ expectedSteps . forEach ( expectedStep => {
415
+ const result = steps [ expectedStep . name ] ;
416
+
417
+ Assert . equal ( result . name , expectedStep . name ) ;
418
+ Assert . equal ( result . command , expectedStep . command ) ;
419
+ } ) ;
420
+ } ) ;
421
+ }
422
+ ) ;
423
+
424
+ Then (
425
+ / ^ a d d i t i o n a l j o b s e t t i n g s a r e t h e u s e r c o m m a n d $ / ,
426
+ {
427
+ timeout : TIMEOUT
428
+ } ,
429
+ function step ( ) {
430
+ return request ( {
431
+ url : `${ this . instance } /${ this . namespace } /builds/${ this . buildId } /steps` ,
432
+ method : 'GET' ,
433
+ context : {
434
+ token : this . jwt
435
+ }
436
+ } ) . then ( response => {
437
+ Assert . equal ( response . statusCode , 200 ) ;
438
+
439
+ const expectedSteps = [
440
+ {
441
+ name : 'pretest' ,
442
+ command : "echo 'pretest'"
443
+ } ,
444
+ {
445
+ name : 'test' ,
446
+ command : 'echo $QUX'
447
+ } ,
448
+ {
449
+ name : 'posttest' ,
450
+ command : "echo 'posttest'"
451
+ }
452
+ ] ;
453
+
454
+ expectedSteps . forEach ( expectedStep => {
455
+ const result = response . body . filter ( s => {
456
+ return s . name === expectedStep . name ;
457
+ } ) [ 0 ] ;
458
+
459
+ Assert . equal ( result . name , expectedStep . name ) ;
460
+ Assert . include ( result . command , expectedStep . command ) ;
461
+ } ) ;
462
+ } ) ;
463
+ }
464
+ ) ;
465
+
256
466
Then ( / ^ t h e y a r e n o t i f i e d p i p e l i n e t e m p l a t e h a s ( n o | s o m e ) e r r o r s $ / , function step ( quantity ) {
257
467
switch ( quantity ) {
258
468
case 'no' :
0 commit comments