import { describe, it, expect } from 'bun:test'; import Threshold from '../src/level/Threshold'; import { LoggingLevel } from '../src/level/LoggingLevel'; import Defaults from '../src/Defaults'; describe('Threshold', () => { describe('constructor', () => { it('should use provided logging level', () => { const threshold = new Threshold(LoggingLevel.Debug); expect(threshold.value).toBe(LoggingLevel.Debug); }); it('should use default logging level when none provided', () => { const threshold = new Threshold(); expect(threshold.value).toBe(Defaults.loggingLevel); }); }); describe('value getter/setter', () => { it('should get and set threshold value', () => { const threshold = new Threshold(LoggingLevel.Info); expect(threshold.value).toBe(LoggingLevel.Info); threshold.value = LoggingLevel.Debug; expect(threshold.value).toBe(LoggingLevel.Debug); threshold.value = LoggingLevel.Error; expect(threshold.value).toBe(LoggingLevel.Error); }); }); describe('threshold comparison logic', () => { it('should work correctly for different levels', () => { const threshold = new Threshold(LoggingLevel.Info); // Info level (30) should allow Info (30), Warn (50), Error (60) but not Debug (10) expect(threshold.value > LoggingLevel.Info).toBe(false); // 30 > 30 = false, so Info logs expect(threshold.value > LoggingLevel.Warn).toBe(false); // 30 > 50 = false, so Warn logs expect(threshold.value > LoggingLevel.Error).toBe(false); // 30 > 60 = false, so Error logs expect(threshold.value > LoggingLevel.Debug).toBe(true); // 30 > 10 = true, so Debug doesn't log }); it('should work with Debug threshold', () => { const threshold = new Threshold(LoggingLevel.Debug); // Debug level (10) should allow all levels expect(threshold.value > LoggingLevel.Debug).toBe(false); // 10 > 10 = false expect(threshold.value > LoggingLevel.Info).toBe(false); // 10 > 30 = false expect(threshold.value > LoggingLevel.Warn).toBe(false); // 10 > 50 = false expect(threshold.value > LoggingLevel.Error).toBe(false); // 10 > 60 = false }); it('should work with Error threshold', () => { const threshold = new Threshold(LoggingLevel.Error); // Error level (60) should only allow Error and above expect(threshold.value > LoggingLevel.Error).toBe(false); // 60 > 60 = false, so Error logs expect(threshold.value > LoggingLevel.Warn).toBe(true); // 60 > 50 = true, so Warn doesn't log expect(threshold.value > LoggingLevel.Info).toBe(true); // 60 > 30 = true, so Info doesn't log expect(threshold.value > LoggingLevel.Debug).toBe(true); // 60 > 10 = true, so Debug doesn't log }); }); });