/** * Tests for fix: 修复穷鬼模式的写入问题 * * Before the fix, poorMode was an in-memory boolean that reset on restart. * After the fix, it reads from / writes to settings.json via * getInitialSettings() and updateSettingsForSource(). */ import { describe, expect, test, beforeEach, mock } from 'bun:test' // ── Mocks must be declared before the module under test is imported ────────── let mockSettings: Record = {} let lastUpdate: { source: string; patch: Record } | null = null mock.module('src/utils/settings/settings.js', () => ({ getInitialSettings: () => mockSettings, updateSettingsForSource: (source: string, patch: Record) => { lastUpdate = { source, patch } mockSettings = { ...mockSettings, ...patch } }, })) // Import AFTER mocks are registered const { isPoorModeActive, setPoorMode } = await import('../poorMode.js') // ── Helpers ────────────────────────────────────────────────────────────────── /** Reset module-level singleton between tests by re-importing a fresh copy. */ async function freshModule() { // Bun caches modules; we manipulate the exported functions directly since // the singleton `poorModeActive` is reset to null only on first import. // Instead we test the observable behaviour through set/get pairs. } // ── Tests ──────────────────────────────────────────────────────────────────── describe('isPoorModeActive — reads from settings on first call', () => { beforeEach(() => { lastUpdate = null }) test('returns false when settings has no poorMode key', () => { mockSettings = {} // Force re-read by setting internal state via setPoorMode then checking setPoorMode(false) expect(isPoorModeActive()).toBe(false) }) test('returns true when settings.poorMode === true', () => { mockSettings = { poorMode: true } setPoorMode(true) expect(isPoorModeActive()).toBe(true) }) }) describe('setPoorMode — persists to settings', () => { beforeEach(() => { lastUpdate = null }) test('setPoorMode(true) calls updateSettingsForSource with poorMode: true', () => { setPoorMode(true) expect(lastUpdate).not.toBeNull() expect(lastUpdate!.source).toBe('userSettings') expect(lastUpdate!.patch.poorMode).toBe(true) }) test('setPoorMode(false) calls updateSettingsForSource with poorMode: undefined (removes key)', () => { setPoorMode(false) expect(lastUpdate).not.toBeNull() expect(lastUpdate!.source).toBe('userSettings') // false || undefined === undefined — key should be removed to keep settings clean expect(lastUpdate!.patch.poorMode).toBeUndefined() }) test('isPoorModeActive() reflects the value set by setPoorMode()', () => { setPoorMode(true) expect(isPoorModeActive()).toBe(true) setPoorMode(false) expect(isPoorModeActive()).toBe(false) }) test('toggling multiple times stays consistent', () => { setPoorMode(true) setPoorMode(true) expect(isPoorModeActive()).toBe(true) setPoorMode(false) setPoorMode(false) expect(isPoorModeActive()).toBe(false) }) })