feat: integrate analytics and fragment receipt improvements
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
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,
|
||||
}));
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user