This commit is contained in:
richarjiang
2026-07-15 17:12:04 +08:00
commit f8c8c688a1
26 changed files with 6789 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
import { mkdtemp, readFile, writeFile } from 'node:fs/promises'
import { join } from 'node:path'
import { tmpdir } from 'node:os'
import { describe, expect, it } from 'vitest'
import { CourtSettingsStore } from './CourtSettingsStore'
describe('CourtSettingsStore', () => {
it('未配置时返回对应球场的默认值', async () => {
const directory = await mkdtemp(join(tmpdir(), 'tennis-book-settings-'))
const store = new CourtSettingsStore(join(directory, 'court-settings.json'))
await expect(store.get('court-a', {
courtId: 'court-a'
})).resolves.toEqual({ courtId: 'court-a' })
})
it('按球场隔离并持久化访客凭证', async () => {
const directory = await mkdtemp(join(tmpdir(), 'tennis-book-settings-'))
const filePath = join(directory, 'court-settings.json')
const store = new CourtSettingsStore(filePath)
await store.update({
courtId: 'court-a',
visitorId: 'court-a-secret'
})
await store.update({ courtId: 'court-b' })
const reloaded = new CourtSettingsStore(filePath)
await expect(reloaded.get('court-a', {
courtId: 'court-a'
})).resolves.toEqual({
courtId: 'court-a',
visitorId: 'court-a-secret'
})
await expect(reloaded.get('court-b', {
courtId: 'court-b'
})).resolves.toEqual({ courtId: 'court-b' })
const persisted = JSON.parse(await readFile(filePath, 'utf8')) as unknown
expect(persisted).toEqual({
version: 1,
courts: {
'court-a': { visitorId: 'court-a-secret' },
'court-b': {}
}
})
})
it('忽略旧版暴露的场地 ID只迁移访客凭证', async () => {
const directory = await mkdtemp(join(tmpdir(), 'tennis-book-settings-legacy-'))
const filePath = join(directory, 'court-settings.json')
await writeFile(filePath, JSON.stringify({
version: 1,
courts: {
'court-a': { userId: '6038652', visitorId: 'legacy-secret' }
}
}))
const store = new CourtSettingsStore(filePath)
await expect(store.get('court-a', {
courtId: 'court-a'
})).resolves.toEqual({
courtId: 'court-a',
visitorId: 'legacy-secret'
})
})
})