@infotorg/winston-log-formats
Version:
Infotorg log formats for Winston logger
123 lines (100 loc) • 3.96 kB
JavaScript
const trackId = require('../src/track-id');
describe('Tests trackId Log format', () => {
test('it should be a function', () => {
expect(typeof trackId === 'function').toBe(true);
});
test('it should return Format wrapper object', () => {
expect(typeof trackId() === 'object').toBe(true);
});
test('it should NOT add "trackId" when the format is disabled in opts', () => {
const info = trackId().transform({ message: 'Some message' }, { trackId: '123456-test-track-id', enabled: false });
expect(info).toStrictEqual({
message: 'Some message',
});
});
describe('trackId as opts', () => {
test('it should add the "trackId" in the info object when it is a value', () => {
const info = trackId().transform({ message: 'Some message' }, { trackId: '123456-test-track-id' });
expect(info).toStrictEqual({
message: 'Some message',
trackId: '123456-test-track-id',
});
});
test('"trackId" function should have access to the "info" object', () => {
const trackIdFn = (prefix, suffix, info) => `${prefix}-${info.label}:123456-test-track-id-${suffix}`;
const info = trackId().transform(
{ label: 'node1', message: 'Some message' },
{ trackId: trackIdFn.bind(null, 'PREFIX', 'SUFFIX') }
);
expect(info).toStrictEqual({
label: 'node1',
message: 'Some message',
trackId: 'PREFIX-node1:123456-test-track-id-SUFFIX',
});
});
test('it should use a custom name for "trackId" in the info object', () => {
const info = trackId().transform(
{ message: 'Some message' },
{ requestId: '123456-test-track-id', key: 'requestId' }
);
expect(info).toStrictEqual({
message: 'Some message',
requestId: '123456-test-track-id',
});
});
});
describe('trackId in info object', () => {
test('it should use "trackId" from the info object when it is specified as a value', () => {
const info = trackId().transform(
{ message: 'Some message', trackId: 'track-id-from-info' },
{ trackId: () => '123456-test-track-id' }
);
expect(info).toStrictEqual({
message: 'Some message',
trackId: 'track-id-from-info',
});
});
test('it should use "trackId" from the info object when it is specified as a function', () => {
const info = trackId().transform(
{ message: 'Some message', trackId: () => 'track-id-from-info-fn' },
{ trackId: () => '123456-test-track-id' }
);
expect(info).toStrictEqual({
message: 'Some message',
trackId: 'track-id-from-info-fn',
});
});
test('"trackId" function should have access to the "info" object', () => {
const trackIdFn = (prefix, suffix, info) => `${prefix}-${info.label}:123456-test-track-id-${suffix}`;
const info = trackId().transform({
label: 'node2',
message: 'Some message',
trackId: trackIdFn.bind(null, 'PREFIX', 'SUFFIX'),
});
expect(info).toStrictEqual({
label: 'node2',
message: 'Some message',
trackId: 'PREFIX-node2:123456-test-track-id-SUFFIX',
});
});
test('it should use a custom name for "trackId" in the info object', () => {
const info = trackId().transform(
{ message: 'Some message', requestId: '123456-test-track-id' },
{ key: 'requestId' }
);
expect(info).toStrictEqual({
message: 'Some message',
requestId: '123456-test-track-id',
});
});
test.each([null, undefined, false, '', 0])(
'it should NOT add the "trackId" in the info object when it is empty or not a string and not a number: %p',
(input) => {
const info = trackId().transform({ message: 'Some message' }, { trackId: input });
expect(info).toStrictEqual({
message: 'Some message',
});
}
);
});
});