Files
wehub-resource-sync d18ada4ee7
Docker Publish / docker (web, apps/web/Dockerfile, web) (push) Failing after 0s
Docker Publish / docker (api, apps/api/Dockerfile, api) (push) Failing after 1s
Publish Extension / detect-version (push) Has been skipped
Publish Extension / submit (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:24:41 +08:00

64 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { TaskStore } from '../src/store'
import { makeTask } from './_fixtures'
describe('TaskStore', () => {
it('insert/get/list', () => {
const store = new TaskStore()
const a = makeTask({ id: 'a', groupKey: 'g1' })
const b = makeTask({ id: 'b', groupKey: 'g1' })
const c = makeTask({ id: 'c', groupKey: 'g2', status: 'completed' })
store.insert(a)
store.insert(b)
store.insert(c)
expect(store.get('a')!.id).toBe('a')
expect(store.list({ groupKey: 'g1' }).tasks.map((t) => t.id)).toEqual(['a', 'b'])
expect(store.list({ status: 'completed' }).tasks.map((t) => t.id)).toEqual(['c'])
})
it('update maintains status/group indexes', () => {
const store = new TaskStore()
const t = makeTask({ id: 'x', status: 'queued', groupKey: 'g1' })
store.insert(t)
store.update({ ...t, status: 'completed', groupKey: 'g2' })
expect(store.list({ status: 'queued' }).tasks).toHaveLength(0)
expect(store.list({ groupKey: 'g1' }).tasks).toHaveLength(0)
expect(store.list({ status: 'completed' }).tasks).toHaveLength(1)
expect(store.list({ groupKey: 'g2' }).tasks).toHaveLength(1)
})
it('paginates with cursor', () => {
const store = new TaskStore()
for (let i = 0; i < 5; i++) {
store.insert(makeTask({ id: `t${i}`, createdAt: 1000 + i }))
}
const page1 = store.list({ limit: 2 })
expect(page1.tasks.map((t) => t.id)).toEqual(['t0', 't1'])
expect(page1.nextCursor).toBe('t1')
const page2 = store.list({ limit: 2, cursor: page1.nextCursor })
expect(page2.tasks.map((t) => t.id)).toEqual(['t2', 't3'])
const page3 = store.list({ limit: 2, cursor: page2.nextCursor })
expect(page3.tasks.map((t) => t.id)).toEqual(['t4'])
expect(page3.nextCursor).toBeNull()
})
it('rejects duplicate insert', () => {
const store = new TaskStore()
store.insert(makeTask({ id: 'x' }))
expect(() => store.insert(makeTask({ id: 'x' }))).toThrow()
})
it('stats counts by status', () => {
const store = new TaskStore()
store.insert(makeTask({ id: 'a', status: 'queued' }))
store.insert(makeTask({ id: 'b', status: 'completed' }))
store.insert(makeTask({ id: 'c', status: 'completed' }))
const s = store.stats(8)
expect(s.byStatus.queued).toBe(1)
expect(s.byStatus.completed).toBe(2)
expect(s.total).toBe(3)
expect(s.capacity).toBe(8)
})
})