api-catalog.client.spec.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { describe, expect, it } from 'vitest'
  2. import { EVENT_API, queryServiceApi, SERVICE_API } from '../src/client/api-catalog.ts'
  3. describe('Client Cordis inspect catalog', () => {
  4. it('publishes the split Workspace Controller and UI navigation services', () => {
  5. expect(SERVICE_API.find(service => service.key === 'layout')?.methods.map(method => method.signature))
  6. .toEqual([
  7. 'selectPanel(panelId: MainPanelId | null): void',
  8. 'beginNavigation(): AbortSignal',
  9. 'toggleSidebar(): void',
  10. 'openRightbar(track: boolean, fullscreen: boolean): void',
  11. 'closeRightbar(): void',
  12. ])
  13. expect(SERVICE_API.find(service => service.key === 'workspaces')?.methods.map(method => method.signature))
  14. .toEqual([
  15. 'create(input: { path: string }): Promise<WorkspaceView>',
  16. 'rename(workspaceId: WorkspaceId, title: string): Promise<WorkspaceView>',
  17. 'delete(workspaceId: WorkspaceId): Promise<void>',
  18. 'archiveSession(sessionId: SessionId): Promise<void>',
  19. 'unarchiveSession(sessionId: SessionId): Promise<void>',
  20. 'insertSessionBefore( workspaceId: WorkspaceId, sessionId: SessionId, beforeSessionId?: SessionId, ): Promise<WorkspaceView>',
  21. ])
  22. expect(SERVICE_API.find(service => service.key === 'uiWorkspace')?.methods.map(method => method.signature))
  23. .toEqual([
  24. 'openSession(target: SessionTarget): void',
  25. 'openWorkspace(workspaceId: WorkspaceId, beforeOpen?: (sessionId: SessionId) => void): Promise<void>',
  26. 'forkSession(sessionId: SessionId): Promise<void>',
  27. 'connectWorkspace(workspaceId: WorkspaceId): Promise<SessionId>',
  28. 'startSession(workspaceId?: WorkspaceId): void',
  29. 'archiveSession(sessionId: SessionId): Promise<void>',
  30. 'unarchiveSession(sessionId: SessionId): Promise<void>',
  31. 'pickDirectory(): Promise<string | null>',
  32. 'listDirectory(path?: string, signal?: AbortSignal): Promise<DirectoryListing>',
  33. 'createDirectory(path: string, name: string): Promise<string>',
  34. ])
  35. })
  36. it('contains one entry per visible Client event', () => {
  37. const names = EVENT_API.map(event => event.name)
  38. expect(new Set(names).size).toBe(names.length)
  39. })
  40. it('includes the current referenced type closure for the Sessions service', () => {
  41. const result = queryServiceApi('sessions') as {
  42. referencedTypes: readonly { name: string; declaration: string }[]
  43. }
  44. expect(result.referencedTypes.length).toBeGreaterThan(0)
  45. const promptContentPart = result.referencedTypes.find(type => type.name === 'PromptContentPart')
  46. expect(promptContentPart?.declaration).toContain("readonly type: 'image'")
  47. expect(result.referencedTypes.map(type => type.name)).not.toEqual(expect.arrayContaining([
  48. 'ConversationSnapshot',
  49. 'PendingInteraction',
  50. 'PendingPayloads',
  51. 'PendingWait',
  52. ]))
  53. })
  54. })