File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -40,7 +40,8 @@ export function receiveDlqMessages() {
4040 const command = new ReceiveMessageCommand ( {
4141 QueueUrl : deadLetterQueueUrl ,
4242 MaxNumberOfMessages : 10 ,
43- VisibilityTimeout : 5
43+ VisibilityTimeout : 1 ,
44+ WaitTimeSeconds : 0
4445 } )
4546 return sqsClient . send ( command )
4647}
@@ -56,6 +57,20 @@ export function redriveDlqMessages() {
5657 return sqsClient . send ( command )
5758}
5859
60+ /**
61+ * Delete DLQ message
62+ * @param {string } receiptHandle
63+ * @returns {Promise<DeleteMessageCommandOutput> }
64+ */
65+ export function deleteDlqMessage ( receiptHandle ) {
66+ const command = new DeleteMessageCommand ( {
67+ QueueUrl : deadLetterQueueUrl ,
68+ ReceiptHandle : receiptHandle
69+ } )
70+
71+ return sqsClient . send ( command )
72+ }
73+
5974/**
6075 * Delete event message
6176 * @param {Message } message
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ import { mockClient } from 'aws-sdk-client-mock'
88
99import 'aws-sdk-client-mock-jest'
1010import {
11+ deleteDlqMessage ,
1112 deleteEventMessage ,
1213 receiveDlqMessages ,
1314 receiveEventMessages ,
@@ -67,7 +68,8 @@ describe('event', () => {
6768 await receiveDlqMessages ( )
6869 expect ( snsMock ) . toHaveReceivedCommandWith ( ReceiveMessageCommand , {
6970 QueueUrl : expect . any ( String ) ,
70- VisibilityTimeout : 5
71+ VisibilityTimeout : 1 ,
72+ WaitTimeSeconds : 0
7173 } )
7274 } )
7375 } )
@@ -89,6 +91,24 @@ describe('event', () => {
8991 } )
9092 } )
9193 } )
94+
95+ describe ( 'deleteDlqMessage' , ( ) => {
96+ it ( 'should delete event message' , async ( ) => {
97+ /**
98+ * @type {DeleteMessageCommandOutput }
99+ */
100+ const deleteResult = {
101+ $metadata : { }
102+ }
103+
104+ snsMock . on ( DeleteMessageCommand ) . resolves ( deleteResult )
105+ await deleteDlqMessage ( messageStub . ReceiptHandle )
106+ expect ( snsMock ) . toHaveReceivedCommandWith ( DeleteMessageCommand , {
107+ QueueUrl : expect . any ( String ) ,
108+ ReceiptHandle : receiptHandle
109+ } )
110+ } )
111+ } )
92112} )
93113
94114/**
Original file line number Diff line number Diff line change 11import { Scopes } from '@defra/forms-model'
2+ import Joi from 'joi'
23
34import {
5+ deleteDlqMessage ,
46 receiveDlqMessages ,
57 redriveDlqMessages
68} from '~/src/messaging/event.js'
79
810const OK_RESPONSE = 200
911
12+ const receiptHandleSchema = Joi . object ( {
13+ receiptHandle : Joi . string ( ) . required ( )
14+ } )
15+
1016/**
1117 * @type {ServerRoute[] }
1218 */
@@ -16,7 +22,7 @@ export default [
1622 path : '/admin/deadletter/view' ,
1723 async handler ( _request , h ) {
1824 const messages = await receiveDlqMessages ( )
19- return h . response ( { messages : messages . Messages } ) . code ( OK_RESPONSE )
25+ return h . response ( { messages : messages . Messages ?? [ ] } ) . code ( OK_RESPONSE )
2026 } ,
2127 options : {
2228 auth : {
@@ -40,6 +46,27 @@ export default [
4046 scope : [ `+${ Scopes . DeadLetterQueues } ` ]
4147 }
4248 }
49+ } ,
50+
51+ /**
52+ * @type {ServerRoute }
53+ */
54+ {
55+ method : 'DELETE' ,
56+ path : '/admin/deadletter/{receiptHandle}' ,
57+ async handler ( request , h ) {
58+ const { params } = request
59+ await deleteDlqMessage ( params . receiptHandle )
60+ return h . response ( { message : 'success' } ) . code ( OK_RESPONSE )
61+ } ,
62+ options : {
63+ auth : {
64+ scope : [ `+${ Scopes . DeadLetterQueues } ` ]
65+ } ,
66+ validate : {
67+ params : receiptHandleSchema
68+ }
69+ }
4370 }
4471]
4572
Original file line number Diff line number Diff line change 11import { createServer } from '~/src/api/server.js'
22import {
3+ deleteDlqMessage ,
34 receiveDlqMessages ,
45 redriveDlqMessages
56} from '~/src/messaging/event.js'
@@ -55,6 +56,21 @@ describe('Admin routes', () => {
5556 expect ( redriveDlqMessages ) . toHaveBeenCalled ( )
5657 } )
5758 } )
59+
60+ describe ( 'DELETE' , ( ) => {
61+ test ( '/admin/dead-letter/receiptHandle route returns 200' , async ( ) => {
62+ const response = await server . inject ( {
63+ method : 'DELETE' ,
64+ url : '/admin/deadletter/receipt-handle' ,
65+ auth
66+ } )
67+
68+ expect ( response . statusCode ) . toEqual ( okStatusCode )
69+ expect ( response . headers [ 'content-type' ] ) . toContain ( jsonContentType )
70+ expect ( response . result ) . toEqual ( { message : 'success' } )
71+ expect ( deleteDlqMessage ) . toHaveBeenCalled ( )
72+ } )
73+ } )
5874} )
5975
6076/**
You can’t perform that action at this time.
0 commit comments