| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { describe, expect, it } from 'vitest';
- import { resolveLevel } from './level-resolver';
- import type { LoggerConfig } from './types';
- describe('resolveLevel', () => {
- const baseConfig: LoggerConfig = {
- default: 'info',
- 'growi:service:page': 'debug',
- 'growi:routes:*': 'debug',
- 'growi:crowi': 'debug',
- };
- describe('config pattern matching', () => {
- it('returns default level when no pattern matches', () => {
- const result = resolveLevel('growi:unknown', baseConfig, {});
- expect(result).toBe('info');
- });
- it('returns level for exact namespace match', () => {
- const result = resolveLevel('growi:crowi', baseConfig, {});
- expect(result).toBe('debug');
- });
- it('matches glob wildcard pattern', () => {
- const result = resolveLevel('growi:routes:login', baseConfig, {});
- expect(result).toBe('debug');
- });
- it('does not match partial namespace without wildcard', () => {
- const config: LoggerConfig = {
- default: 'warn',
- 'growi:service': 'debug',
- };
- // 'growi:service:page' should NOT match 'growi:service' (no wildcard)
- const result = resolveLevel('growi:service:page', config, {});
- expect(result).toBe('warn');
- });
- it('uses config default when provided', () => {
- const config: LoggerConfig = { default: 'error' };
- const result = resolveLevel('growi:anything', config, {});
- expect(result).toBe('error');
- });
- });
- describe('env override precedence', () => {
- it('env override takes precedence over config pattern', () => {
- const envOverrides = { 'growi:service:page': 'trace' };
- const result = resolveLevel(
- 'growi:service:page',
- baseConfig,
- envOverrides,
- );
- expect(result).toBe('trace');
- });
- it('env override glob takes precedence over config exact match', () => {
- const envOverrides = { 'growi:*': 'fatal' };
- const result = resolveLevel('growi:crowi', baseConfig, envOverrides);
- expect(result).toBe('fatal');
- });
- it('falls back to config when no env override matches', () => {
- const envOverrides = { 'other:ns': 'trace' };
- const result = resolveLevel('growi:crowi', baseConfig, envOverrides);
- expect(result).toBe('debug');
- });
- it('falls back to config default when neither env nor config pattern matches', () => {
- const envOverrides = { 'other:ns': 'trace' };
- const result = resolveLevel('growi:unknown:ns', baseConfig, envOverrides);
- expect(result).toBe('info');
- });
- });
- describe('glob pattern matching', () => {
- it('matches deep wildcard patterns', () => {
- const config: LoggerConfig = {
- default: 'info',
- 'growi:service:*': 'debug',
- };
- const result = resolveLevel('growi:service:auth', config, {});
- expect(result).toBe('debug');
- });
- it('env override wildcard applies to multiple namespaces', () => {
- const envOverrides = { 'growi:service:*': 'trace' };
- const result1 = resolveLevel(
- 'growi:service:page',
- baseConfig,
- envOverrides,
- );
- const result2 = resolveLevel(
- 'growi:service:user',
- baseConfig,
- envOverrides,
- );
- expect(result1).toBe('trace');
- expect(result2).toBe('trace');
- });
- });
- });
|