stokpile/tests/logger.spec.ts
2024-03-12 23:01:03 -05:00

237 lines
6.3 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { Logger } from "../src/Logger";
import Console from "../src/outputs/Console";
import Tampermonkey from "../src/outputs/Tampermonkey";
import Callback from "../src/outputs/Callback";
import { LogContext, LogLevel, LogMeta } from "../src/types/logger";
test("Constructor", () => {
const _logger = new Logger();
});
// test("Add outputs", () => {
// const logger = new Logger();
// const consoleOutput = new Console();
// const tampermonkeyOutput = new Tampermonkey();
// const callbackOutput = new Callback({
// enabled: true,
// callback: (message, meta, context) => {
// console.log(message, meta, context);
// return;
// },
// });
// logger
// .addOutput(consoleOutput)
// .addOutput(tampermonkeyOutput)
// .addOutput(callbackOutput);
// });
// test("Add storage", () => {
// const logger = new Logger();
// const tampermonkeyOutput = new Tampermonkey();
// logger.setStorage(tampermonkeyOutput);
// });
test("Log Messages", () => {
let logMessages: string[] = [];
let logMetas: LogMeta[] = [];
let logContexts: LogContext[] = [];
const callbackOutput = new Callback({
enabled: true,
callback(message, meta, context) {
logMessages.push(message);
logMetas.push(meta);
logContexts.push(context);
},
});
const logger = new Logger().addOutput(callbackOutput);
logger.log("logging a", 10, {});
logger.trace("logging b");
logger.debug("logging c");
logger.info("logging d");
logger.warn("logging e");
logger.fatal("logging f");
expect(logMetas[0].level).toBe(LogLevel.TRACE);
expect(logMessages[0]).toBe("logging a");
expect(logMetas[1].level).toBe(LogLevel.TRACE);
expect(logMessages[1]).toBe("logging b");
expect(logMetas[2].level).toBe(LogLevel.DEBUG);
expect(logMessages[2]).toBe("logging c");
expect(logMetas[3].level).toBe(LogLevel.INFO);
expect(logMessages[3]).toBe("logging d");
expect(logMetas[4].level).toBe(LogLevel.WARN);
expect(logMessages[4]).toBe("logging e");
expect(logMetas[5].level).toBe(LogLevel.FATAL);
expect(logMessages[5]).toBe("logging f");
});
test("Log with multiple outputs", () => {
const logMessage = "Very important message";
function callbackfn(message: string, meta: LogMeta, _context: LogContext) {
expect(message).toBe(logMessage);
expect(meta.level).toBe(LogLevel.WARN);
}
const callbackOutput1 = new Callback({
enabled: true,
callback: callbackfn,
});
const callbackOutput2 = new Callback({
enabled: true,
callback: callbackfn,
});
const callbackOutput3 = new Callback({
enabled: true,
callback: callbackfn,
});
const logger = new Logger()
.addOutput(callbackOutput1)
.addOutput(callbackOutput2)
.addOutput(callbackOutput3);
logger.warn(logMessage);
});
test("Log messages with context", () => {
let logMessage: string = "";
let logMeta: LogMeta = { level: LogLevel.WARN, time: new Date() };
let logContext: LogContext = {};
const logger = new Logger();
const callbackOutput = new Callback({
enabled: true,
callback(message, meta, context) {
logMessage = message;
logMeta = meta;
logContext = context;
},
});
logger.addOutput(callbackOutput);
logger.debug("test context 1", { data: "hello world" });
expect(logMessage).toBe("test context 1");
expect(logMeta.level).toBe(LogLevel.DEBUG);
expect(logContext.data).toBe("hello world");
const req = new Request("https://www.github.com");
logger.info("test context 2", {
request: req,
});
expect(logMessage).toBe("test context 2");
expect(logMeta.level).toBe(LogLevel.INFO);
expect(logContext.request).toBeTruthy();
});
test("Logs contain timestamps", () => {
const logger = new Logger();
const callbackOutput = new Callback({
enabled: true,
callback(_message, meta, _context) {
const logTime = meta.time;
expect(logTime.toISOString()).toMatch(
/^[0-9]+-[0-9]+-[0-9]+T[0-9]+:[0-9]+:[0-9]+.[0-9]+Z/gm
);
expect(new Date().valueOf() - logTime.valueOf()).toBeLessThan(1000);
},
});
logger.addOutput(callbackOutput);
logger.debug("test");
});
// test("Overflow logs buffer", () => {
// const logger = new Logger({
// bufferCapacity: 100,
// outputs: { console: { enabled: false } },
// });
// for (let i = 0; i < 100; i++) {
// logger.log(`Iteration: ${i}`);
// }
// logger.log("done");
// });
// test("Export logs without tampermonkey", async () => {
// const logger = new Logger({ outputs: { console: { enabled: false } } });
// for (let i = 0; i < 10; i++) {
// logger.log(`Iteration: ${i}`);
// }
// const export_one = await logger.export(1);
// expect(export_one.length).toBe(1);
// expect(export_one[0]).toContain("Iteration: 9");
// const export_five = await logger.export(5);
// expect(export_five.length).toBe(5);
// expect(export_five[3]).toContain("Iteration: 8");
// const export_all = await logger.export(100);
// expect(export_all.length).toBe(10);
// expect(export_all[9]).toContain("Iteration: 9");
// });
// const _logger1 = new Logger({});
// const _logger2 = new Logger({
// outputs: {
// tampermonkey: {
// enabled: false,
// maxBuckets: 0,
// bucketIndexKey: "",
// },
// },
// });
// const _logger3 = new Logger({
// outputs: {
// console: {
// enabled: false,
// },
// },
// });
// const _logger4 = new Logger({ outputs: { console: { enabled: true } } });
// const _logger5 = new Logger({
// outputs: { console: { enabled: false }, tampermonkey: { enabled: false } },
// });
// const _logger6 = new Logger({ outputs: { callback: () => {} } });
// const _logger7 = new Logger({
// outputs: {
// console: { enabled: true },
// tampermonkey: { enabled: false },
// callback: () => {},
// },
// });
// const _logger8 = new Logger({
// outputs: {
// console: {
// style: {
// trace: { backgroundColor: "#ababab", textColor: "#bababa" },
// debug: { backgroundColor: "#436ba3", textColor: "#197921" },
// info: { backgroundColor: "#9991aa", textColor: "#906851" },
// warn: { backgroundColor: "#deadbe", textColor: "#ad7ce3" },
// },
// },
// },
// });
// });