Przeglądaj źródła

introduce tests for logger

Richard Köhl 2 lat temu
rodzic
commit
d4007d5934
2 zmienionych plików z 75 dodań i 4 usunięć
  1. 9 4
      src/infrastructure/logger.ts
  2. 66 0
      test/infrastructure/logger.test.ts

+ 9 - 4
src/infrastructure/logger.ts

@@ -7,11 +7,16 @@ function isLogLevel(level: string): level is log.LevelName {
   );
 }
 
-function getLogLevel(level: string | undefined): log.LevelName {
+export function getLogLevel(level: string | undefined): log.LevelName {
   return level && isLogLevel(level) ? level : 'WARNING';
 }
 
-const logLevel = Deno.env.get('DEBUG_LEVEL') ?? 'WARNING';
+export function getLogLevelFromEnv(): log.LevelName {
+  const logLevel = Deno.env.get('DEBUG_LEVEL');
+  return getLogLevel(logLevel);
+}
+
+const logLevel = getLogLevelFromEnv();
 
 log.setup({
   handlers: {
@@ -39,12 +44,12 @@ export class Logger {
   private messages: string[] = [];
   private logger;
 
-  constructor(private loggerName = 'default') {
+  constructor(private loggerName = 'default', private logLevel: log.LevelName) {
     this.logger = log.getLogger(loggerName);
   }
 
   public static getInstance(loggerName?: string): Logger {
-    return new Logger(loggerName);
+    return new Logger(loggerName, getLogLevelFromEnv());
   }
 
   private isTest(): boolean {

+ 66 - 0
test/infrastructure/logger.test.ts

@@ -0,0 +1,66 @@
+import { assertEquals } from 'test-deps';
+import { getLogLevel, Logger } from 'infra/logger.ts';
+
+const testLogger = Logger.getInstance('test');
+
+Deno.test('log.debug', async () => {
+  const debugLog = 'this is a debug message';
+  testLogger.debug(debugLog);
+  const lastLog = testLogger.getLastMessage();
+  assertEquals(lastLog, `[DEBUG] ${debugLog}`, 'debug log message');
+});
+
+Deno.test('log.info', async () => {
+  const infoLog = 'this is a info message';
+  testLogger.info(infoLog);
+  const lastLog = testLogger.getLastMessage();
+  assertEquals(lastLog, `[INFO] ${infoLog}`, 'info log message');
+});
+
+Deno.test('log.warn', async () => {
+  const warnLog = 'this is a warn message';
+  testLogger.warn(warnLog);
+  const lastLog = testLogger.getLastMessage();
+  assertEquals(lastLog, `[WARNING] ${warnLog}`, 'warn log message');
+});
+
+Deno.test('log.error', async () => {
+  const errorLog = 'this is a error message';
+  testLogger.error(errorLog);
+  const lastLog = testLogger.getLastMessage();
+  assertEquals(lastLog, `[ERROR] ${errorLog}`, 'error log message');
+});
+
+Deno.test('getLogLevel with valid level', () => {
+  const level = 'INFO';
+  assertEquals(getLogLevel(level), level);
+});
+
+Deno.test('getLogLevel with invalid level', () => {
+  const level = 'INVALID_LEVEL';
+  assertEquals(getLogLevel(level), 'WARNING');
+});
+
+Deno.test('getLogLevel with undefined level', () => {
+  assertEquals(getLogLevel(undefined), 'WARNING');
+});
+
+Deno.test('logLevel with DEBUG_LEVEL environment variable set', () => {
+  const originalDebugLevel = Deno.env.get('DEBUG_LEVEL');
+  Deno.env.set('DEBUG_LEVEL', 'INFO');
+  assertEquals(getLogLevel(Deno.env.get('DEBUG_LEVEL')), 'INFO');
+  if (originalDebugLevel) {
+    Deno.env.set('DEBUG_LEVEL', originalDebugLevel);
+  } else {
+    Deno.env.delete('DEBUG_LEVEL');
+  }
+});
+
+Deno.test('logLevel with DEBUG_LEVEL environment variable not set', () => {
+  const originalDebugLevel = Deno.env.get('DEBUG_LEVEL');
+  Deno.env.delete('DEBUG_LEVEL');
+  assertEquals(getLogLevel(Deno.env.get('DEBUG_LEVEL')), 'WARNING');
+  if (originalDebugLevel) {
+    Deno.env.set('DEBUG_LEVEL', originalDebugLevel);
+  }
+});