@autorest/common
Version:
Autorest common utilities
118 lines (102 loc) • 3.17 kB
text/typescript
import { AutorestAsyncLogger, AutorestSyncLogger } from "./logger";
import { LoggingSession } from "./logging-session";
import { LoggerAsyncProcessor, LoggerProcessor, LoggerSink } from "./types";
describe("Logger", () => {
let sink: LoggerSink;
beforeEach(() => {
sink = {
log: jest.fn(),
startProgress: jest.fn(),
};
});
describe("AutorestSyncLogger", () => {
it("sends message to sink", () => {
const logger = new AutorestSyncLogger({
sinks: [sink],
});
logger.verbose("My message");
expect(sink.log).toHaveBeenCalledTimes(1);
expect(sink.log).toHaveBeenCalledWith({
level: "verbose",
message: "My message",
});
});
it("sends message to each sink", () => {
const otherSink = {
log: jest.fn(),
startProgress: jest.fn(),
};
const logger = new AutorestSyncLogger({
sinks: [sink, otherSink],
});
logger.debug("My message");
expect(sink.log).toHaveBeenCalledTimes(1);
expect(sink.log).toHaveBeenCalledWith({
level: "debug",
message: "My message",
});
expect(otherSink.log).toHaveBeenCalledTimes(1);
expect(otherSink.log).toHaveBeenCalledWith({
level: "debug",
message: "My message",
});
});
it("sends process messages", () => {
const processor: LoggerProcessor = {
process: (log) => {
return { ...log, message: `${log.message} [Processed]` };
},
};
const logger = new AutorestSyncLogger({
sinks: [sink],
processors: [processor],
});
logger.info("My message");
expect(sink.log).toHaveBeenCalledTimes(1);
expect(sink.log).toHaveBeenCalledWith({
level: "information",
message: "My message [Processed]",
});
});
});
describe("AutorestASyncLogger", () => {
let session: LoggingSession;
beforeEach(() => {
session = new LoggingSession();
});
it("sends message to sink async", async () => {
const logger = new AutorestAsyncLogger({
sinks: [sink],
asyncSession: session,
});
logger.verbose("My message");
expect(sink.log).toHaveBeenCalledTimes(0);
await session.waitForMessages();
expect(sink.log).toHaveBeenCalledTimes(1);
expect(sink.log).toHaveBeenCalledWith({
level: "verbose",
message: "My message",
});
});
it("sends async process messages", async () => {
const processor: LoggerAsyncProcessor = {
process: async (log) => {
return Promise.resolve({ ...log, message: `${log.message} [Processed]` });
},
};
const logger = new AutorestAsyncLogger({
sinks: [sink],
asyncSession: session,
processors: [processor],
});
logger.info("My message");
expect(sink.log).toHaveBeenCalledTimes(0);
await session.waitForMessages();
expect(sink.log).toHaveBeenCalledTimes(1);
expect(sink.log).toHaveBeenCalledWith({
level: "information",
message: "My message [Processed]",
});
});
});
});