Files
aiturk-hermes-ide/apps/desktop/src/store/cron.test.ts
T

40 lines
1.2 KiB
TypeScript

import { beforeEach, describe, expect, it } from 'vitest'
import { $cronJobs, beginCronJobsRequest, commitCronJobsRequest, setCronJobs, updateCronJobs } from './cron'
const oldJob = { id: 'old' } as never
const newJob = { id: 'new' } as never
describe('cron jobs request fencing', () => {
beforeEach(() => {
setCronJobs([])
})
it('rejects an older refresh after a newer refresh commits', () => {
const older = beginCronJobsRequest('all')
const newer = beginCronJobsRequest('all')
expect(commitCronJobsRequest(newer, [newJob])).toBe(true)
expect(commitCronJobsRequest(older, [oldJob])).toBe(false)
expect($cronJobs.get()).toEqual([newJob])
})
it('rejects a refresh from the previous profile scope', () => {
const work = beginCronJobsRequest('work')
beginCronJobsRequest('personal')
expect(commitCronJobsRequest(work, [oldJob])).toBe(false)
expect($cronJobs.get()).toEqual([])
})
it('rejects an in-flight poll after a local mutation', () => {
const poll = beginCronJobsRequest('all')
updateCronJobs(() => [newJob])
expect(commitCronJobsRequest(poll, [oldJob])).toBe(false)
expect($cronJobs.get()).toEqual([newJob])
})
})