Files
openchamber/packages/ui/src/sync/session-message-loader-lifecycle.test.ts
T

23 lines
1.3 KiB
TypeScript

import { expect, test } from 'bun:test'
import { createStore } from 'zustand/vanilla'
import { SessionMessageLoader } from './session-message-loader'
test('loads messages after a Strict Mode cleanup and effect setup', async () => {
const store = createStore(() => ({ message: {}, part: {} }))
const childStores = { ensureChild: () => store, getChild: () => store }
let messageRequests = 0
let resolveFirstRequest: ((value: { data: []; response: { headers: { get: () => null } } }) => void) | undefined
const sdk = { session: { messages: async () => {
messageRequests += 1
if (messageRequests === 1) return new Promise((resolve) => { resolveFirstRequest = resolve })
return { data: [], response: { headers: { get: () => null } } }
} } }
const loader = new SessionMessageLoader(childStores as never, { sdk: sdk as never, runtimeKey: 'runtime' })
const firstLoad = loader.ensure({ directory: '/project', sessionID: 'session-1' })
loader.dispose(); loader.activate(); await loader.ensure({ directory: '/project', sessionID: 'session-1' })
resolveFirstRequest?.({ data: [], response: { headers: { get: () => null } } }); await firstLoad
expect(messageRequests).toBe(2)
expect(loader.getSnapshot({ directory: '/project', sessionID: 'session-1' }).status).toBe('ready')
})