| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /** Stateful behavior of the app-owned RemoteMock scenario. */
- import { expect, it } from 'vitest'
- import { createAssembledRemote } from './assembled-remote.ts'
- it('advances turns and updates the Session summary after accepted prompts', async () => {
- const { mock } = createAssembledRemote()
- await mock.dispatch('session/create', [{ request: { cwd: '/work' } }])
- await mock.dispatch('session/prompt', [{
- request: { sessionId: 'fx-1', requestId: 'request-1', mode: 'queue', content: [] },
- }])
- await mock.dispatch('session/prompt', [{
- request: { sessionId: 'fx-1', requestId: 'request-2', mode: 'queue', content: [] },
- }])
- const listed = await mock.dispatch('session/list', []) as {
- readonly ok: true
- readonly value: {
- readonly items: readonly { readonly sessionId: string; readonly blank: boolean; readonly running: boolean }[]
- }
- }
- expect(listed.ok).toBe(true)
- expect(listed.value.items.find(item => item.sessionId === 'fx-1')).toMatchObject({
- blank: false,
- running: true,
- })
- const iterator = mock.open('session/follow', [{
- request: { address: { kind: 'session', sessionId: 'fx-1' } },
- }], new AbortController().signal)[Symbol.asyncIterator]()
- await expect(iterator.next()).resolves.toMatchObject({
- done: false,
- value: {
- records: [
- { event: { type: 'turn/start', data: { turn: 0 } } },
- { event: { type: 'user/message' } },
- { event: { type: 'turn/start', data: { turn: 1 } } },
- { event: { type: 'user/message' } },
- ],
- },
- })
- await iterator.return?.()
- mock.assertNoUnmatched()
- })
|