feat: enrich ledger events with logo metadata
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import { InstrumentMetadataService } from './instrument-metadata.service';
|
||||
|
||||
describe('InstrumentMetadataService', () => {
|
||||
const tbank = {
|
||||
getInstrumentByFigi: jest.fn(),
|
||||
getInstrumentByUid: jest.fn(),
|
||||
};
|
||||
const logger = { event: jest.fn() };
|
||||
let service: InstrumentMetadataService;
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
tbank.getInstrumentByFigi.mockReset();
|
||||
tbank.getInstrumentByUid.mockReset();
|
||||
service = new InstrumentMetadataService(tbank as never, logger as never);
|
||||
});
|
||||
|
||||
it('prefers the instrument UID when metadata is available', async () => {
|
||||
tbank.getInstrumentByUid.mockResolvedValue({
|
||||
name: 'Инструмент',
|
||||
brand: { logoName: 'instrument.png' },
|
||||
});
|
||||
|
||||
await expect(
|
||||
service.resolve('token', 'uid-1', 'figi-1'),
|
||||
).resolves.toMatchObject({
|
||||
brand: { logoName: 'instrument.png' },
|
||||
});
|
||||
expect(tbank.getInstrumentByFigi).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('falls back to FIGI when the UID has no matching instrument', async () => {
|
||||
tbank.getInstrumentByUid.mockResolvedValue(null);
|
||||
tbank.getInstrumentByFigi.mockResolvedValue({
|
||||
ticker: 'SBER',
|
||||
brand: { logoName: 'sber.png' },
|
||||
});
|
||||
|
||||
await expect(
|
||||
service.resolve('token', 'uid-1', 'figi-1'),
|
||||
).resolves.toMatchObject({
|
||||
ticker: 'SBER',
|
||||
});
|
||||
expect(tbank.getInstrumentByFigi).toHaveBeenCalledWith('token', 'figi-1');
|
||||
});
|
||||
|
||||
it('returns a nullable fallback when instrument metadata is unavailable', async () => {
|
||||
tbank.getInstrumentByUid.mockRejectedValue(new Error('unavailable'));
|
||||
|
||||
await expect(service.resolve('token', 'uid-1', null)).resolves.toBeNull();
|
||||
});
|
||||
|
||||
it('caches negative lookups and avoids repeated upstream requests', async () => {
|
||||
tbank.getInstrumentByUid.mockResolvedValue(null);
|
||||
|
||||
await expect(service.resolve('token', 'uid-1', null)).resolves.toBeNull();
|
||||
await expect(service.resolve('token', 'uid-1', null)).resolves.toBeNull();
|
||||
|
||||
expect(tbank.getInstrumentByUid).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user