manicanldes-backend/test/delivery-service.spec.ts

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');
});
});