Files
jsc-marketplace/plugins/jsc-mod-companion/hooks/companion/band.test.ts
T
adminandClaude Sonnet 5.5 4f86b6b7dc feat: companion 關係改為好感、信賴、親密、依賴四維度與四階段
- 兩本帳(原典基準、存檔累積),日限、有效增量、期望違反公式
- 階段 陌生/熟人/朋友/好友,只升不降;14 天無互動每日 −0.5
- 舊 affinity 存檔讀檔時自動升級
- 版本 0.0.2

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 07:54:08 +00:00

48 lines
1.9 KiB
TypeScript

import { describe, expect, test } from 'claude-code/testing'
import { fitCompanion } from './band'
import type { View } from './core'
import { lineWidth } from './seg'
const VIEW: View = {
core: { id: 'miko', name: '月見ミコ', facts: {} as never, neuroticism: 50, baseline: { p: 0, a: 0, d: 0 } },
mood: { p: 0.5, a: 0, d: -0.5 },
label: '放鬆',
kaomoji: '(´ᴗ`)',
relation: { affection: 35, trust: 20, intimacy: 10, dependence: 5 },
stage: '熟人',
todos: 2,
}
const text = (v: View, cols: number, compact = false, bubble?: string) => fitCompanion(v, cols, compact, bubble).map(s => s.text).join('')
describe('角色行', () => {
test('寬版顯示顏文字、名字、心情、PAD 條、階段、待辦、氣泡', () => {
expect(text(VIEW, 200, false, '早安')).toBe('(´ᴗ`) 月見ミコ 放鬆 · P▰▰▱ A▰▰▱ D▰▱▱ · 熟人 · ☐2 · 💬 早安')
})
test('緊湊模式只剩「顏文字 名字 心情」', () => {
expect(text(VIEW, 200, true)).toBe('(´ᴗ`) 月見ミコ 放鬆')
})
test('寬度不足時依序捨棄氣泡、待辦、PAD、階段,不換行', () => {
const full = text(VIEW, 200, false, '早安')
let prev = full.length
for (const cols of [60, 50, 40, 34, 28, 22]) {
const t = text(VIEW, cols, false, '早安')
expect(t.includes('\n')).toBe(false)
expect(t.length <= prev).toBe(true)
prev = t.length
}
expect(text(VIEW, 40, false, '早安')).not.toContain('早安')
expect(text(VIEW, 36, false, '早安')).not.toContain('☐')
expect(text(VIEW, 30, false, '早安')).not.toContain('PAD')
expect(text(VIEW, 22, false, '早安')).toBe('(´ᴗ`) 月見ミコ 放鬆')
expect(lineWidth(fitCompanion(VIEW, 24))).toBeLessThanOrEqual(24)
})
test('沒有待辦時不顯示待辦數', () => {
expect(text({ ...VIEW, todos: 0 }, 200)).not.toContain('☐')
})
})