cleanup.e2e.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. /** Regression coverage for ACP example teardown. */
  2. import { access, mkdtemp, rm } from 'node:fs/promises'
  3. import { tmpdir } from 'node:os'
  4. import { join } from 'node:path'
  5. import { afterEach, describe, expect, it, vi } from 'vitest'
  6. import { cleanupAcpExampleTest } from './cleanup.ts'
  7. let fallbackWorkdir: string | undefined
  8. afterEach(async () => {
  9. if (fallbackWorkdir !== undefined) await rm(fallbackWorkdir, { recursive: true, force: true })
  10. fallbackWorkdir = undefined
  11. })
  12. describe('cleanupAcpExampleTest', () => {
  13. it('removes the workspace after process shutdown fails', async () => {
  14. fallbackWorkdir = await mkdtemp(join(tmpdir(), 'acp-cleanup-'))
  15. const closeFailure = new Error('close failed')
  16. const spawned = { close: vi.fn().mockRejectedValue(closeFailure) }
  17. await expect(cleanupAcpExampleTest(spawned, fallbackWorkdir))
  18. .rejects.toMatchObject({ errors: [closeFailure] })
  19. await expect(access(fallbackWorkdir)).rejects.toThrow()
  20. fallbackWorkdir = undefined
  21. })
  22. it('reports process and workspace failures together', async () => {
  23. const closeFailure = new Error('close failed')
  24. const spawned = { close: vi.fn().mockRejectedValue(closeFailure) }
  25. const failure = await cleanupAcpExampleTest(spawned, '\0').catch((error: unknown) => error)
  26. expect(failure).toBeInstanceOf(AggregateError)
  27. expect((failure as AggregateError).errors).toHaveLength(2)
  28. expect((failure as AggregateError).errors[0]).toBe(closeFailure)
  29. })
  30. })