Files
hermes-web-ui/tests/server/mcu-devices-store.test.ts
2026-07-08 16:40:11 +08:00

89 lines
2.7 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
describe('MCU devices store', () => {
let db: any = null
beforeEach(async () => {
vi.resetModules()
const { DatabaseSync } = await import('node:sqlite')
db = new DatabaseSync(':memory:')
vi.doMock('../../packages/server/src/db/index', () => ({
getDb: () => db,
getStoragePath: () => ':memory:',
}))
const { initAllHermesTables } = await import('../../packages/server/src/db/hermes/schemas')
initAllHermesTables()
})
afterEach(() => {
db?.close()
db = null
vi.doUnmock('../../packages/server/src/db/index')
vi.resetModules()
})
it('stores official and unofficial MCU devices', async () => {
const { createMcuDevice, listMcuDevices } = await import('../../packages/server/src/db/hermes/mcu-devices-store')
const official = createMcuDevice({
name: 'Official Box',
deviceCode: 'official-code',
isOfficial: true,
})
const unofficial = createMcuDevice({
name: 'Unofficial Box',
deviceCode: 'unofficial-code',
isOfficial: false,
})
expect(official.is_official).toBe(true)
expect(unofficial.is_official).toBe(false)
expect(listMcuDevices().map(device => device.device_code).sort()).toEqual(['official-code', 'unofficial-code'])
})
it('rejects duplicate device codes', async () => {
const { createMcuDevice } = await import('../../packages/server/src/db/hermes/mcu-devices-store')
createMcuDevice({
name: 'Box',
deviceCode: 'duplicate-code',
isOfficial: true,
})
expect(() => createMcuDevice({
name: 'Box 2',
deviceCode: 'duplicate-code',
isOfficial: false,
})).toThrow('mcu_device_exists')
})
it('updates device name only', async () => {
const { createMcuDevice, updateMcuDeviceName } = await import('../../packages/server/src/db/hermes/mcu-devices-store')
const created = createMcuDevice({
name: 'Old Name',
deviceCode: 'editable-code',
isOfficial: true,
})
const updated = updateMcuDeviceName(created.id, 'New Name')
expect(updated.name).toBe('New Name')
expect(updated.device_code).toBe('editable-code')
expect(updated.is_official).toBe(true)
})
it('deletes MCU devices', async () => {
const { createMcuDevice, deleteMcuDevice, listMcuDevices } = await import('../../packages/server/src/db/hermes/mcu-devices-store')
const created = createMcuDevice({
name: 'Delete Me',
deviceCode: 'delete-code',
isOfficial: false,
})
expect(deleteMcuDevice(created.id)).toBe(true)
expect(deleteMcuDevice(created.id)).toBe(false)
expect(listMcuDevices()).toEqual([])
})
})