env-var-parser.spec.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { afterEach, beforeEach, describe, expect, it } from 'vitest';
  2. import { parseEnvLevels } from './env-var-parser';
  3. describe('parseEnvLevels', () => {
  4. const originalEnv = process.env;
  5. beforeEach(() => {
  6. // Reset env before each test
  7. process.env = { ...originalEnv };
  8. delete process.env.DEBUG;
  9. delete process.env.TRACE;
  10. delete process.env.INFO;
  11. delete process.env.WARN;
  12. delete process.env.ERROR;
  13. delete process.env.FATAL;
  14. });
  15. afterEach(() => {
  16. process.env = originalEnv;
  17. });
  18. it('returns empty object when no env vars are set', () => {
  19. const result = parseEnvLevels();
  20. expect(result).toEqual({});
  21. });
  22. it('parses a single namespace from DEBUG', () => {
  23. process.env.DEBUG = 'growi:service:page';
  24. const result = parseEnvLevels();
  25. expect(result).toEqual({ 'growi:service:page': 'debug' });
  26. });
  27. it('parses multiple comma-separated namespaces from DEBUG', () => {
  28. process.env.DEBUG = 'growi:routes:*,growi:service:page';
  29. const result = parseEnvLevels();
  30. expect(result).toEqual({
  31. 'growi:routes:*': 'debug',
  32. 'growi:service:page': 'debug',
  33. });
  34. });
  35. it('parses all six level env vars', () => {
  36. process.env.DEBUG = 'ns:debug';
  37. process.env.TRACE = 'ns:trace';
  38. process.env.INFO = 'ns:info';
  39. process.env.WARN = 'ns:warn';
  40. process.env.ERROR = 'ns:error';
  41. process.env.FATAL = 'ns:fatal';
  42. const result = parseEnvLevels();
  43. expect(result).toEqual({
  44. 'ns:debug': 'debug',
  45. 'ns:trace': 'trace',
  46. 'ns:info': 'info',
  47. 'ns:warn': 'warn',
  48. 'ns:error': 'error',
  49. 'ns:fatal': 'fatal',
  50. });
  51. });
  52. it('trims whitespace around namespace patterns', () => {
  53. process.env.DEBUG = ' growi:service , growi:routes ';
  54. const result = parseEnvLevels();
  55. expect(result).toEqual({
  56. 'growi:service': 'debug',
  57. 'growi:routes': 'debug',
  58. });
  59. });
  60. it('ignores empty entries from trailing/double commas', () => {
  61. process.env.DEBUG = 'growi:service,,growi:routes,';
  62. const result = parseEnvLevels();
  63. expect(result).toEqual({
  64. 'growi:service': 'debug',
  65. 'growi:routes': 'debug',
  66. });
  67. });
  68. it('uses the last value when the same namespace appears in multiple env vars', () => {
  69. process.env.DEBUG = 'growi:service';
  70. process.env.TRACE = 'growi:service';
  71. const result = parseEnvLevels();
  72. // TRACE is processed after DEBUG, so it wins
  73. expect(result['growi:service']).toBe('trace');
  74. });
  75. it('supports glob wildcard patterns', () => {
  76. process.env.DEBUG = 'growi:*';
  77. const result = parseEnvLevels();
  78. expect(result).toEqual({ 'growi:*': 'debug' });
  79. });
  80. });