feat: 支持 docker 菜单栏展示监控任务
This commit is contained in:
75
src/main/menuBarModel.test.ts
Normal file
75
src/main/menuBarModel.test.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import type { CourtSummary, MonitorAlert, MonitorTask } from '../shared/contracts'
|
||||
import { createMonitorMenuBarModel } from './menuBarModel'
|
||||
|
||||
const court: CourtSummary = {
|
||||
id: 'test-court',
|
||||
name: '测试球场',
|
||||
shortName: '测试',
|
||||
accent: '#123456',
|
||||
status: 'online'
|
||||
}
|
||||
|
||||
function task(overrides: Partial<MonitorTask> = {}): MonitorTask {
|
||||
return {
|
||||
id: 'task-1',
|
||||
courtId: court.id,
|
||||
startTime: '08:00',
|
||||
endTime: '10:00',
|
||||
enabled: true,
|
||||
createdAt: '2026-07-16T00:00:00.000Z',
|
||||
availableCount: 0,
|
||||
stats: {
|
||||
totalChecks: 0,
|
||||
successfulChecks: 0,
|
||||
partialFailureChecks: 0,
|
||||
failedChecks: 0,
|
||||
alertsSent: 0,
|
||||
availableObservations: 0
|
||||
},
|
||||
autoBooking: { enabled: false, status: 'disabled', attemptCount: 0 },
|
||||
...overrides
|
||||
}
|
||||
}
|
||||
|
||||
function alert(taskId = 'task-1'): MonitorAlert {
|
||||
return {
|
||||
taskId,
|
||||
courtId: court.id,
|
||||
targetDate: '2026-07-17',
|
||||
startTime: '08:00',
|
||||
endTime: '10:00',
|
||||
slotLabels: ['1 号场 08:00–10:00'],
|
||||
occurredAt: '2026-07-16T01:00:00.000Z'
|
||||
}
|
||||
}
|
||||
|
||||
describe('createMonitorMenuBarModel', () => {
|
||||
it('汇总运行任务、未读提醒和空场状态', () => {
|
||||
const model = createMonitorMenuBarModel(
|
||||
[task({ availableCount: 2 }), task({ id: 'task-2', enabled: false })],
|
||||
[court],
|
||||
[alert()]
|
||||
)
|
||||
|
||||
expect(model.summary).toBe('2 个任务 · 1 个运行中')
|
||||
expect(model.unreadSummary).toBe('1 条空场提醒待查看')
|
||||
expect(model.tasks[0]).toMatchObject({
|
||||
label: '测试球场 · 未来 7 天 · 08:00–10:00',
|
||||
status: '发现 2 个完整空场',
|
||||
hasUnreadAlert: true
|
||||
})
|
||||
expect(model.tasks[1]?.status).toBe('已暂停')
|
||||
})
|
||||
|
||||
it('优先展示监控异常', () => {
|
||||
const model = createMonitorMenuBarModel(
|
||||
[task({ availableCount: 3, lastError: '网络失败' })],
|
||||
[court],
|
||||
[]
|
||||
)
|
||||
|
||||
expect(model.tasks[0]?.status).toBe('检查异常 · 网络失败')
|
||||
expect(model.unreadSummary).toBe('暂无未读空场提醒')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user