Files
deepseek-harness/packages/api/document-render-controller/tests/apply.client.spec.ts
T

29 lines
1.2 KiB
TypeScript

/** The document Remote is available only while its Client plugin owns the mount. */
import { Context } from '@deepseek-ai/cordis'
import { expect, it, vi } from 'vitest'
const descriptor = vi.hoisted(() => ({ package: '@deepseek-ai/dsh-api-document-render-controller', descriptors: [] }))
vi.mock('@deepseek-ai/dsh-api-document-render-controller/remote', () => ({ default: descriptor }))
import * as client from '../src/client/index.ts'
it('waits for the Remote carrier, mounts its descriptor, and joins namespace disposal', async () => {
const ctx = new Context()
const released = Promise.withResolvers<undefined>()
const dispose = vi.fn(() => released.promise)
const mount = vi.fn(async () => dispose)
const fiber = ctx.plugin(client)
try {
expect(mount).not.toHaveBeenCalled()
ctx.provide('remote', { $mount: mount } as never)
await fiber.await()
expect(mount).toHaveBeenCalledExactlyOnceWith(descriptor)
let closed = false
const closing = fiber.dispose().then(() => { closed = true })
await expect.poll(() => dispose.mock.calls.length).toBe(1)
expect(closed).toBe(false)
released.resolve(undefined)
await closing
expect(closed).toBe(true)
} finally { released.resolve(undefined); await fiber.dispose() }
})