feat: integrate analytics and fragment receipt improvements

This commit is contained in:
hectorzhao
2026-08-03 15:34:41 +08:00
parent 3357ace7e1
commit 530a65de80
89 changed files with 1964 additions and 324 deletions
@@ -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,
}));
});
});