mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
161 lines
4.5 KiB
TypeScript
161 lines
4.5 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
import { getDiForUnitTesting } from "../getDiForUnitTesting";
|
|
import createIpcFileLoggerTransportInjectable from "./create-ipc-file-transport.injectable";
|
|
import type { IpcFileLogger } from "./ipc-file-logger.injectable";
|
|
import ipcFileLoggerInjectable from "./ipc-file-logger.injectable";
|
|
|
|
describe("ipc file logger in main", () => {
|
|
let logMock: jest.Mock;
|
|
let closeMock: jest.Mock;
|
|
let createFileTransportMock: jest.Mock;
|
|
let logger: IpcFileLogger;
|
|
|
|
beforeEach(() => {
|
|
logMock = jest.fn();
|
|
closeMock = jest.fn();
|
|
createFileTransportMock = jest.fn(() => ({
|
|
log: logMock,
|
|
close: closeMock,
|
|
}));
|
|
|
|
const di = getDiForUnitTesting();
|
|
|
|
di.override(createIpcFileLoggerTransportInjectable, () => createFileTransportMock);
|
|
logger = di.inject(ipcFileLoggerInjectable);
|
|
});
|
|
|
|
it("creates a transport for new log file", () => {
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledWith("some-log-file");
|
|
});
|
|
|
|
it("uses existing transport for log file", () => {
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledTimes(1);
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledWith("some-log-file");
|
|
});
|
|
|
|
it("creates separate transport for each log file", () => {
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
logger.log({
|
|
fileId: "some-other-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
logger.log({
|
|
fileId: "some-yet-another-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledTimes(3);
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledWith("some-log-file");
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledWith("some-other-log-file");
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledWith("some-yet-another-log-file");
|
|
});
|
|
|
|
it("logs using file transport", () => {
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "some-log-message" },
|
|
});
|
|
expect(logMock.mock.calls[0][0]).toEqual({
|
|
level: "irrelevant",
|
|
message: "some-log-message",
|
|
});
|
|
});
|
|
|
|
it("logs to correct files", () => {
|
|
const someLogMock = jest.fn();
|
|
const someOthertLogMock = jest.fn();
|
|
|
|
createFileTransportMock.mockImplementation((fileId: string) => {
|
|
if (fileId === "some-log-file") {
|
|
return { log: someLogMock };
|
|
}
|
|
|
|
if (fileId === "some-other-log-file") {
|
|
return { log: someOthertLogMock };
|
|
}
|
|
|
|
return null;
|
|
});
|
|
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "some-log-message" },
|
|
});
|
|
logger.log({
|
|
fileId: "some-other-log-file",
|
|
entry: { level: "irrelevant", message: "some-other-log-message" },
|
|
});
|
|
|
|
expect(someLogMock).toHaveBeenCalledTimes(1);
|
|
expect(someLogMock.mock.calls[0][0]).toEqual({
|
|
level: "irrelevant",
|
|
message: "some-log-message",
|
|
});
|
|
expect(someOthertLogMock).toHaveBeenCalledTimes(1);
|
|
expect(someOthertLogMock.mock.calls[0][0]).toEqual({
|
|
level: "irrelevant",
|
|
message: "some-other-log-message",
|
|
});
|
|
});
|
|
|
|
it("closes transport (to ensure no file handles are left open)", () => {
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
logger.close("some-log-file");
|
|
|
|
expect(closeMock).toHaveBeenCalled();
|
|
});
|
|
|
|
it("creates a new transport once needed after closing previous", () => {
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
logger.close("some-log-file");
|
|
|
|
logger.log({
|
|
fileId: "some-log-file",
|
|
entry: { level: "irrelevant", message: "irrelevant" },
|
|
});
|
|
|
|
expect(createFileTransportMock).toHaveBeenCalledTimes(2);
|
|
expect(logMock).toHaveBeenCalledTimes(2);
|
|
});
|
|
});
|