@grafana/faro-core
Version:
Core package of Faro.
245 lines • 10.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var initialize_1 = require("../../initialize");
var testUtils_1 = require("../../testUtils");
var utils_1 = require("../../utils");
var apiTestHelpers_1 = require("../apiTestHelpers");
var const_1 = require("../const");
var ItemBuffer_1 = require("../ItemBuffer");
var initialize_2 = require("./initialize");
describe('api.logs', function () {
function createAPI(_a) {
var _b = _a === void 0 ? { dedupe: true } : _a, dedupe = _b.dedupe, logArgsSerializer = _b.logArgsSerializer;
var transport = new testUtils_1.MockTransport();
var config = (0, testUtils_1.mockConfig)({
dedupe: dedupe,
transports: [transport],
logArgsSerializer: logArgsSerializer,
});
var api = (0, initialize_1.initializeFaro)(config).api;
return [api, transport];
}
describe('pushLog', function () {
var api;
var transport;
beforeEach(function () {
var _a;
_a = createAPI(), api = _a[0], transport = _a[1];
});
describe('Filtering', function () {
it('filters the same event', function () {
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
});
it("doesn't filter events with partially same message", function () {
api.pushLog(['test', 'another test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test']);
expect(transport.items).toHaveLength(2);
});
it("doesn't filter events with same message and different level", function () {
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test'], {
level: utils_1.LogLevel.INFO,
});
expect(transport.items).toHaveLength(2);
});
it("doesn't filter events with same message and same level but different context", function () {
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test'], {
context: {
a: '1',
},
});
expect(transport.items).toHaveLength(2);
});
it("filters an event and doesn't filter the next different one", function () {
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test'], {
level: utils_1.LogLevel.ERROR,
});
expect(transport.items).toHaveLength(2);
});
it("doesn't filter when dedupe is false", function () {
var _a;
_a = createAPI({ dedupe: false }), api = _a[0], transport = _a[1];
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test']);
expect(transport.items).toHaveLength(2);
});
it("doesn't filter when skipDedupe is true", function () {
api.pushLog(['test']);
expect(transport.items).toHaveLength(1);
api.pushLog(['test'], { skipDedupe: true });
expect(transport.items).toHaveLength(2);
});
it('uses traceId and spanId from custom context', function () {
var _a;
var spanContext = {
traceId: 'my-trace-id',
spanId: 'my-span-id',
};
api.pushLog(['test'], { spanContext: spanContext });
expect(transport.items).toHaveLength(1);
expect(((_a = transport.items[0]) === null || _a === void 0 ? void 0 : _a.payload).trace).toStrictEqual({
trace_id: 'my-trace-id',
span_id: 'my-span-id',
});
});
});
describe('Serializing', function () {
it('serializes log arguments via String', function () {
var _a;
api.pushLog([1, 'test', { a: 1 }]);
expect(((_a = transport.items[0]) === null || _a === void 0 ? void 0 : _a.payload).message).toBe('1 test [object Object]');
});
it('uses custom logArgsSerializer', function () {
var _a;
var _b;
var logArgsSerializer = function (args) { return JSON.stringify(args); };
_a = createAPI({ dedupe: true, logArgsSerializer: logArgsSerializer }), api = _a[0], transport = _a[1];
api.pushLog([1, 'test', { a: 1 }]);
expect(((_b = transport.items[0]) === null || _b === void 0 ? void 0 : _b.payload).message).toBe('[1,"test",{"a":1}]');
});
});
it('Sets the timestamp to the provided custom timestamp', function () {
var _a;
api.pushLog(['test'], { timestampOverwriteMs: 123 });
expect(transport.items).toHaveLength(1);
expect(((_a = transport.items[0]) === null || _a === void 0 ? void 0 : _a.payload).timestamp).toBe('1970-01-01T00:00:00.123Z');
});
it('stringifies all values in the context object', function () {
var _a;
api.pushLog(['test'], {
context: {
// @ts-expect-error
a: 1,
b: 'foo',
// @ts-expect-error
c: true,
// @ts-expect-error
d: { e: 'bar' },
// @ts-expect-error
g: null,
// @ts-expect-error
h: undefined,
// @ts-expect-error
i: [1, 2, 3],
},
});
// @ts-expect-error
expect((_a = transport.items[0]) === null || _a === void 0 ? void 0 : _a.payload.context).toStrictEqual({
a: '1',
b: 'foo',
c: 'true',
d: '{"e":"bar"}',
g: 'null',
h: 'undefined',
i: '[1,2,3]',
});
});
it('does not stringify empty context', function () {
api.pushLog(['test']);
api.pushLog(['test2'], {
context: {},
});
expect(transport.items).toHaveLength(2);
expect(transport.items[0].payload.context).toBeUndefined();
expect(transport.items[0].payload.context).toBeUndefined();
});
});
describe('User action', function () {
it('buffers the error if a user action is in progress', function () {
var internalLogger = testUtils_1.mockInternalLogger;
var config = (0, testUtils_1.mockConfig)();
var actionBuffer = new ItemBuffer_1.ItemBuffer();
var message;
var getMessage = function () { return message; };
message = { type: 'user-action-start', name: 'testAction', startTime: Date.now(), parentId: 'parent-id' };
var api = (0, initialize_2.initializeLogsAPI)({
unpatchedConsole: console,
internalLogger: internalLogger,
config: config,
metas: apiTestHelpers_1.mockMetas,
transports: apiTestHelpers_1.mockTransports,
tracesApi: apiTestHelpers_1.mockTracesApi,
actionBuffer: actionBuffer,
getMessage: getMessage,
});
api.pushLog(['test']);
expect(actionBuffer.size()).toBe(1);
message = {
type: 'user-action-end',
name: 'testAction',
id: 'parent-id',
startTime: (0, utils_1.dateNow)(),
endTime: (0, utils_1.dateNow)(),
duration: 0,
eventType: 'click',
};
api.pushLog(['test-2']);
expect(actionBuffer.size()).toBe(1);
message = {
type: 'user-action-cancel',
name: 'testAction',
parentId: 'parent-id',
};
api.pushLog(['test-3']);
expect(actionBuffer.size()).toBe(1);
});
});
describe('User action', function () {
it('buffers the item if a user action is in progress', function () {
var internalLogger = testUtils_1.mockInternalLogger;
var config = (0, testUtils_1.mockConfig)();
var actionBuffer = new ItemBuffer_1.ItemBuffer();
var message;
var getMessage = function () { return message; };
message = {
type: const_1.USER_ACTION_START,
name: 'testAction',
startTime: Date.now(),
parentId: 'parent-id',
};
var api = (0, initialize_2.initializeLogsAPI)({
unpatchedConsole: console,
internalLogger: internalLogger,
config: config,
metas: apiTestHelpers_1.mockMetas,
transports: apiTestHelpers_1.mockTransports,
tracesApi: apiTestHelpers_1.mockTracesApi,
actionBuffer: actionBuffer,
getMessage: getMessage,
});
api.pushLog(['test']);
expect(actionBuffer.size()).toBe(1);
message = {
type: const_1.USER_ACTION_END,
name: 'testAction',
id: 'parent-id',
startTime: (0, utils_1.dateNow)(),
endTime: (0, utils_1.dateNow)(),
duration: 0,
eventType: 'click',
};
api.pushLog(['test-2']);
expect(actionBuffer.size()).toBe(1);
message = {
type: const_1.USER_ACTION_CANCEL,
name: 'testAction',
parentId: 'parent-id',
};
api.pushLog(['test-3']);
expect(actionBuffer.size()).toBe(1);
});
});
});
//# sourceMappingURL=initialize.test.js.map