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
64 lines
2.4 KiB
TypeScript
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)
|
|
})
|
|
})
|