74 lines
2.7 KiB
TypeScript
74 lines
2.7 KiB
TypeScript
import { queueFinalReceiptDeliveries } from './downstream-receipt-targets';
|
|
|
|
describe('queueFinalReceiptDeliveries', () => {
|
|
it('queues one HTTP event and one CMPP receipt for each registered client fragment', async () => {
|
|
const prisma = {
|
|
cmppInboundLongMessage: {
|
|
findFirst: jest.fn().mockResolvedValue({
|
|
messageId: 'MSG-GROUP',
|
|
segmentTotal: 3,
|
|
segments: [
|
|
{ segmentIndex: 1, sequenceId: '101', registeredDelivery: true },
|
|
{ segmentIndex: 2, sequenceId: '102', registeredDelivery: false },
|
|
{ segmentIndex: 3, sequenceId: '103', registeredDelivery: true },
|
|
],
|
|
}),
|
|
},
|
|
};
|
|
const queue = jest.fn().mockResolvedValue({ id: 'queued' });
|
|
|
|
await queueFinalReceiptDeliveries(prisma as never, queue, {
|
|
message: {
|
|
id: 'record-1',
|
|
tenantId: 'tenant-1',
|
|
applicationId: 'app-1',
|
|
messageId: 'MSG-1',
|
|
phoneNumber: '13800000001',
|
|
cmppSubmitGroupMessageId: 'MSG-GROUP',
|
|
},
|
|
payload: { receiptStatus: 'delivered', rawStatus: 'DELIVRD' },
|
|
segmentPayloads: {
|
|
1: { receiptStatus: 'delivered', rawStatus: 'DELIVRD' },
|
|
3: { receiptStatus: 'undelivered', rawStatus: 'REJECTD' },
|
|
},
|
|
});
|
|
|
|
expect(queue).toHaveBeenCalledTimes(3);
|
|
expect(queue).toHaveBeenNthCalledWith(1, expect.objectContaining({
|
|
queueHttpWebhook: true,
|
|
queueCmppDelivery: false,
|
|
}));
|
|
expect(queue).toHaveBeenNthCalledWith(2, expect.objectContaining({
|
|
receiptDedupeKey: 'receipt:record-1:segment:1',
|
|
queueHttpWebhook: false,
|
|
payload: expect.objectContaining({ submitSequenceId: 101, clientSegmentIndex: 1 }),
|
|
}));
|
|
expect(queue).toHaveBeenNthCalledWith(3, expect.objectContaining({
|
|
receiptDedupeKey: 'receipt:record-1:segment:3',
|
|
payload: expect.objectContaining({ submitSequenceId: 103, clientSegmentIndex: 3, receiptStatus: 'undelivered', rawStatus: 'REJECTD' }),
|
|
}));
|
|
});
|
|
|
|
it('queues only the message-level HTTP event when the submission did not originate from CMPP', async () => {
|
|
const prisma = { cmppInboundLongMessage: { findFirst: jest.fn() } };
|
|
const queue = jest.fn().mockResolvedValue({ id: 'queued' });
|
|
|
|
await queueFinalReceiptDeliveries(prisma as never, queue, {
|
|
message: {
|
|
id: 'record-http',
|
|
tenantId: 'tenant-1',
|
|
applicationId: 'app-1',
|
|
messageId: 'MSG-HTTP',
|
|
phoneNumber: '13800000001',
|
|
},
|
|
payload: { receiptStatus: 'undelivered', rawStatus: 'EXPIRED' },
|
|
});
|
|
|
|
expect(queue).toHaveBeenCalledTimes(1);
|
|
expect(queue).toHaveBeenCalledWith(expect.objectContaining({
|
|
queueHttpWebhook: true,
|
|
queueCmppDelivery: false,
|
|
}));
|
|
});
|
|
});
|