40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
|
|
import { describe, expect, it } from 'vitest'
|
||
|
|
import { addHistory, type HistoryEntry } from '../logic/storage'
|
||
|
|
|
||
|
|
describe('addHistory', () => {
|
||
|
|
it('inserts new entries at the front', () => {
|
||
|
|
const h: HistoryEntry[] = [{ playerCount: 8, roles: { 狼人: 2 } }]
|
||
|
|
const out = addHistory(h, { playerCount: 9, roles: { 狼人: 3 } })
|
||
|
|
expect(out[0]).toEqual({ playerCount: 9, roles: { 狼人: 3 } })
|
||
|
|
expect(out).toHaveLength(2)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('deduplicates same (playerCount, roles)', () => {
|
||
|
|
const h: HistoryEntry[] = [
|
||
|
|
{ playerCount: 8, roles: { 狼人: 2, 村民: 6 } },
|
||
|
|
{ playerCount: 9, roles: { 狼人: 3, 村民: 6 } },
|
||
|
|
]
|
||
|
|
const out = addHistory(h, { playerCount: 8, roles: { 狼人: 2, 村民: 6 } })
|
||
|
|
expect(out).toHaveLength(2)
|
||
|
|
expect(out[0]).toEqual({ playerCount: 8, roles: { 狼人: 2, 村民: 6 } })
|
||
|
|
// 9 人配置应该还在
|
||
|
|
expect(out[1]).toEqual({ playerCount: 9, roles: { 狼人: 3, 村民: 6 } })
|
||
|
|
})
|
||
|
|
|
||
|
|
it('distinguishes entries with same playerCount but different role counts', () => {
|
||
|
|
const h: HistoryEntry[] = [{ playerCount: 8, roles: { 狼人: 2 } }]
|
||
|
|
const out = addHistory(h, { playerCount: 8, roles: { 狼人: 3 } })
|
||
|
|
expect(out).toHaveLength(2)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('caps history at 50 entries', () => {
|
||
|
|
let h: HistoryEntry[] = []
|
||
|
|
for (let i = 0; i < 100; i++) {
|
||
|
|
h = addHistory(h, { playerCount: 8, roles: { 狼人: i } })
|
||
|
|
}
|
||
|
|
expect(h).toHaveLength(50)
|
||
|
|
// 最新的(i=99)在最前
|
||
|
|
expect(h[0]).toEqual({ playerCount: 8, roles: { 狼人: 99 } })
|
||
|
|
})
|
||
|
|
})
|