23 lines
1.3 KiB
TypeScript
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')
|
|
})
|