@@ -29,6 +29,7 @@ describe("wrangler", () => {
2929 COMMANDS
3030 wrangler queues list List Queues
3131 wrangler queues create <name> Create a Queue
32+ wrangler queues update <name> Update a Queue
3233 wrangler queues delete <name> Delete a Queue
3334 wrangler queues info <name> Get Queue information
3435 wrangler queues consumer Configure Queue consumers
@@ -413,6 +414,217 @@ describe("wrangler", () => {
413414 expect ( requests . count ) . toEqual ( 0 ) ;
414415 } ) ;
415416 } ) ;
417+
418+ describe ( "update" , ( ) => {
419+ function mockUpdateRequest (
420+ queueName : string ,
421+ queueSettings :
422+ | { delivery_delay ?: number ; message_retention_period ?: number }
423+ | undefined = undefined
424+ ) {
425+ const requests = { count : 0 } ;
426+
427+ msw . use (
428+ http . patch (
429+ "*/accounts/:accountId/queues/:queueId" ,
430+ async ( { request } ) => {
431+ requests . count += 1 ;
432+
433+ const body = ( await request . json ( ) ) as {
434+ queue_name : string ;
435+ settings : {
436+ delivery_delay : number ;
437+ message_retention_period : number ;
438+ } ;
439+ } ;
440+ expect ( body . queue_name ) . toEqual ( queueName ) ;
441+ expect ( body . settings ) . toEqual ( queueSettings ) ;
442+ return HttpResponse . json ( {
443+ success : true ,
444+ errors : [ ] ,
445+ messages : [ ] ,
446+ result : {
447+ queue_name : queueName ,
448+ created_on : "01-01-2001" ,
449+ modified_on : "01-01-2001" ,
450+ } ,
451+ } ) ;
452+ } ,
453+ { once : true }
454+ )
455+ ) ;
456+ return requests ;
457+ }
458+ function mockGetQueueRequest (
459+ queueName : string ,
460+ queueSettings : {
461+ delivery_delay : number ;
462+ message_retention_period : number ;
463+ }
464+ ) {
465+ const requests = { count : 0 } ;
466+ msw . use (
467+ http . get (
468+ "*/accounts/:accountId/queues?*" ,
469+ async ( ) => {
470+ requests . count += 1 ;
471+ return HttpResponse . json ( {
472+ success : true ,
473+ errors : [ ] ,
474+ messages : [ ] ,
475+ result : [
476+ {
477+ queue_name : queueName ,
478+ created_on : "" ,
479+ producers : [ ] ,
480+ consumers : [ ] ,
481+ producers_total_count : 1 ,
482+ consumers_total_count : 0 ,
483+ modified_on : "" ,
484+ queue_id : "queueId" ,
485+ settings : {
486+ delivery_delay : queueSettings . delivery_delay ,
487+ message_retention_period :
488+ queueSettings . message_retention_period ,
489+ } ,
490+ } ,
491+ ] ,
492+ } ) ;
493+ } ,
494+ { once : true }
495+ )
496+ ) ;
497+ return requests ;
498+ }
499+
500+ it ( "should show the correct help text" , async ( ) => {
501+ await runWrangler ( "queues update --help" ) ;
502+ expect ( std . err ) . toMatchInlineSnapshot ( `""` ) ;
503+ expect ( std . out ) . toMatchInlineSnapshot ( `
504+ "wrangler queues update <name>
505+
506+ Update a Queue
507+
508+ POSITIONALS
509+ name The name of the queue [string] [required]
510+
511+ GLOBAL FLAGS
512+ -c, --config Path to Wrangler configuration file [string]
513+ -e, --env Environment to use for operations, and for selecting .env and .dev.vars files [string]
514+ -h, --help Show help [boolean]
515+ -v, --version Show version number [boolean]
516+
517+ OPTIONS
518+ --delivery-delay-secs How long a published message should be delayed for, in seconds. Must be between 0 and 42300 [number]
519+ --message-retention-period-secs How long to retain a message in the queue, in seconds. Must be between 60 and 1209600 [number]"
520+ ` ) ;
521+ } ) ;
522+
523+ it ( "should update a queue with new message retention period and preserve old delivery delay" , async ( ) => {
524+ const getrequests = mockGetQueueRequest ( "testQueue" , {
525+ delivery_delay : 10 ,
526+ message_retention_period : 100 ,
527+ } ) ;
528+
529+ //update queue with new message retention period
530+ const requests = mockUpdateRequest ( "testQueue" , {
531+ delivery_delay : 10 ,
532+ message_retention_period : 400 ,
533+ } ) ;
534+ await runWrangler (
535+ "queues update testQueue --message-retention-period-secs=400"
536+ ) ;
537+
538+ expect ( requests . count ) . toEqual ( 1 ) ;
539+ expect ( getrequests . count ) . toEqual ( 1 ) ;
540+
541+ expect ( std . out ) . toMatchInlineSnapshot ( `
542+ "Updating queue testQueue.
543+ Updated queue testQueue."
544+ ` ) ;
545+ } ) ;
546+
547+ it ( "should show an error when two message retention periods are set" , async ( ) => {
548+ const requests = mockUpdateRequest ( "testQueue" , {
549+ message_retention_period : 60 ,
550+ } ) ;
551+
552+ mockGetQueueRequest ( "testQueue" , {
553+ delivery_delay : 0 ,
554+ message_retention_period : 100 ,
555+ } ) ;
556+
557+ await expect (
558+ runWrangler (
559+ "queues update testQueue --message-retention-period-secs=70 --message-retention-period-secs=80"
560+ )
561+ ) . rejects . toThrowErrorMatchingInlineSnapshot (
562+ `[Error: Cannot specify --message-retention-period-secs multiple times]`
563+ ) ;
564+
565+ expect ( requests . count ) . toEqual ( 0 ) ;
566+ } ) ;
567+
568+ it ( "should show an error when two delivery delays are set" , async ( ) => {
569+ const requests = mockUpdateRequest ( "testQueue" , {
570+ delivery_delay : 10 ,
571+ } ) ;
572+
573+ mockGetQueueRequest ( "testQueue" , {
574+ delivery_delay : 0 ,
575+ message_retention_period : 100 ,
576+ } ) ;
577+
578+ await expect (
579+ runWrangler (
580+ "queues update testQueue --delivery-delay-secs=5 --delivery-delay-secs=10"
581+ )
582+ ) . rejects . toThrowErrorMatchingInlineSnapshot (
583+ `[Error: Cannot specify --delivery-delay-secs multiple times]`
584+ ) ;
585+
586+ expect ( requests . count ) . toEqual ( 0 ) ;
587+ } ) ;
588+
589+ it ( "should show an error when invalid delivery delay is set" , async ( ) => {
590+ const requests = mockUpdateRequest ( "testQueue" , {
591+ delivery_delay : 10 ,
592+ } ) ;
593+
594+ mockGetQueueRequest ( "testQueue" , {
595+ delivery_delay : 0 ,
596+ message_retention_period : 100 ,
597+ } ) ;
598+
599+ await expect (
600+ runWrangler ( "queues update testQueue --delivery-delay-secs=99999" )
601+ ) . rejects . toThrowErrorMatchingInlineSnapshot (
602+ `[Error: Invalid --delivery-delay-secs value: 99999. Must be between 0 and 43200]`
603+ ) ;
604+
605+ expect ( requests . count ) . toEqual ( 0 ) ;
606+ } ) ;
607+
608+ it ( "should show an error when invalid message retention period is set" , async ( ) => {
609+ const requests = mockUpdateRequest ( "testQueue" , {
610+ message_retention_period : 100 ,
611+ } ) ;
612+
613+ mockGetQueueRequest ( "testQueue" , {
614+ delivery_delay : 0 ,
615+ message_retention_period : 100 ,
616+ } ) ;
617+
618+ await expect (
619+ runWrangler (
620+ "queues update testQueue --message-retention-period-secs=0"
621+ )
622+ ) . rejects . toThrowErrorMatchingInlineSnapshot (
623+ `[Error: Invalid --message-retention-period-secs value: 0. Must be between 60 and 1209600]`
624+ ) ;
625+
626+ expect ( requests . count ) . toEqual ( 0 ) ;
627+ } ) ;
416628 } ) ;
417629
418630 describe ( "delete" , ( ) => {
0 commit comments