mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 06:15:51 +00:00
test: 添加测试支持
This commit is contained in:
93
src/commands/poor/__tests__/poorMode.test.ts
Normal file
93
src/commands/poor/__tests__/poorMode.test.ts
Normal file
@@ -0,0 +1,93 @@
|
||||
/**
|
||||
* 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<string, unknown> = {}
|
||||
let lastUpdate: { source: string; patch: Record<string, unknown> } | null = null
|
||||
|
||||
mock.module('src/utils/settings/settings.js', () => ({
|
||||
getInitialSettings: () => mockSettings,
|
||||
updateSettingsForSource: (source: string, patch: Record<string, unknown>) => {
|
||||
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)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user