claude-code-best/src/utils/__tests__/configConstants.test.ts
2026-05-01 21:39:30 +08:00

71 lines
1.9 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import {
NOTIFICATION_CHANNELS,
EDITOR_MODES,
TEAMMATE_MODES,
} from '../configConstants'
describe('NOTIFICATION_CHANNELS', () => {
test('contains expected channels', () => {
expect(NOTIFICATION_CHANNELS).toContain('auto')
expect(NOTIFICATION_CHANNELS).toContain('iterm2')
expect(NOTIFICATION_CHANNELS).toContain('terminal_bell')
expect(NOTIFICATION_CHANNELS).toContain('kitty')
expect(NOTIFICATION_CHANNELS).toContain('ghostty')
})
test('is readonly array', () => {
expect(Array.isArray(NOTIFICATION_CHANNELS)).toBe(true)
// TypeScript enforces readonly at compile time; runtime is still a plain array
expect(NOTIFICATION_CHANNELS.length).toBeGreaterThan(0)
})
test('includes all documented channels', () => {
expect(NOTIFICATION_CHANNELS).toEqual([
'auto',
'iterm2',
'iterm2_with_bell',
'terminal_bell',
'kitty',
'ghostty',
'notifications_disabled',
])
})
test('has no duplicate entries', () => {
const unique = new Set(NOTIFICATION_CHANNELS)
expect(unique.size).toBe(NOTIFICATION_CHANNELS.length)
})
})
describe('EDITOR_MODES', () => {
test("contains 'normal' and 'vim'", () => {
expect(EDITOR_MODES).toContain('normal')
expect(EDITOR_MODES).toContain('vim')
})
test('has exactly 2 entries', () => {
expect(EDITOR_MODES).toHaveLength(2)
})
test('is ordered: normal, vim', () => {
expect(EDITOR_MODES).toEqual(['normal', 'vim'])
})
})
describe('TEAMMATE_MODES', () => {
test("contains 'auto', 'tmux', 'in-process'", () => {
expect(TEAMMATE_MODES).toContain('auto')
expect(TEAMMATE_MODES).toContain('tmux')
expect(TEAMMATE_MODES).toContain('in-process')
})
test('has exactly 3 entries', () => {
expect(TEAMMATE_MODES).toHaveLength(3)
})
test('is ordered: auto, tmux, in-process', () => {
expect(TEAMMATE_MODES).toEqual(['auto', 'tmux', 'in-process'])
})
})