74 lines
2.3 KiB
TypeScript
74 lines
2.3 KiB
TypeScript
import { Logger } from '@nestjs/common';
|
|
import { DeliveryService } from '../src/events/delivery.service';
|
|
import type { DeliveryStore } from '../src/events/delivery.store';
|
|
describe('delivery lease and logging policy', () => {
|
|
afterEach(() => jest.restoreAllMocks());
|
|
it('warns when delivery succeeds after lease ownership is lost', async () => {
|
|
const warning = jest
|
|
.spyOn(Logger.prototype, 'warn')
|
|
.mockImplementation(() => undefined);
|
|
const store = {
|
|
claim: jest.fn().mockResolvedValue({
|
|
eventId: 'event',
|
|
leaseToken: 'lease',
|
|
attempts: 1,
|
|
event: {
|
|
id: 'event',
|
|
organizationId: 'org',
|
|
orderId: 'order',
|
|
kind: 'order.created',
|
|
},
|
|
}),
|
|
acknowledge: jest.fn().mockResolvedValue({ count: 0 }),
|
|
fail: jest.fn(),
|
|
};
|
|
const service = new DeliveryService(
|
|
{ assertConfigured() {}, async deliver() {} },
|
|
store as unknown as DeliveryStore,
|
|
);
|
|
expect(await service.dispatchOne()).toBe(true);
|
|
expect(warning).toHaveBeenCalledWith(
|
|
JSON.stringify({ event: 'DELIVERY_LEASE_LOST', eventId: 'event' }),
|
|
);
|
|
expect(store.fail).not.toHaveBeenCalled();
|
|
});
|
|
it('never logs adapter exception text or notification content', async () => {
|
|
const logging = jest
|
|
.spyOn(Logger.prototype, 'error')
|
|
.mockImplementation(() => undefined);
|
|
const store = {
|
|
claim: jest.fn().mockResolvedValue({
|
|
eventId: 'event',
|
|
leaseToken: 'lease',
|
|
attempts: 2,
|
|
event: {
|
|
id: 'event',
|
|
organizationId: 'org',
|
|
orderId: 'order',
|
|
kind: 'order.created',
|
|
},
|
|
}),
|
|
acknowledge: jest.fn(),
|
|
fail: jest.fn().mockResolvedValue({ count: 1 }),
|
|
};
|
|
const service = new DeliveryService(
|
|
{
|
|
assertConfigured() {},
|
|
async deliver() {
|
|
throw new Error('private-address-and-secret');
|
|
},
|
|
},
|
|
store as unknown as DeliveryStore,
|
|
);
|
|
await service.dispatchOne();
|
|
expect(logging).toHaveBeenCalledWith(
|
|
JSON.stringify({
|
|
event: 'DELIVERY_FAILED',
|
|
eventId: 'event',
|
|
attempt: 2,
|
|
}),
|
|
);
|
|
expect(JSON.stringify(logging.mock.calls)).not.toContain('private-address');
|
|
});
|
|
});
|