Files
deepseek-harness/packages/test-support/session-snapshot/tests/workspace.spec.ts
T

64 lines
2.4 KiB
TypeScript

import { mkdtemp, mkdir, rm, symlink, writeFile } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, describe, expect, it } from 'vitest'
import {
captureExpectedWorkspaceSnapshot,
captureWorkspaceSnapshot,
EMPTY_WORKSPACE_MARKER,
} from '../src/workspace.ts'
describe('workspace snapshots', () => {
const roots: string[] = []
async function root(): Promise<string> {
const value = await mkdtemp(join(tmpdir(), 'dsh-workspace-snapshot-'))
roots.push(value)
return value
}
afterEach(async () => {
await Promise.all(roots.splice(0).map(path => rm(path, { recursive: true, force: true })))
})
it('captures readable text, binary bytes, links, and empty directories in path order', async () => {
const directory = await root()
await writeFile(join(directory, 'a.txt'), 'hello\n')
await writeFile(join(directory, 'b.bin'), Buffer.from([0xff, 0x01]))
await mkdir(join(directory, 'empty'))
await symlink('a.txt', join(directory, 'link'))
expect(await captureWorkspaceSnapshot(directory)).toEqual([
{ path: 'a.txt', kind: 'text', content: 'hello\n' },
{ path: 'b.bin', kind: 'binary', base64: '/wE=' },
{ path: 'empty', kind: 'empty-directory' },
{ path: 'link', kind: 'symlink', target: 'a.txt' },
])
})
it('keeps generic marker files but omits declared runtime roots and the expected-empty marker', async () => {
const directory = await root()
await mkdir(join(directory, '.dsh'))
await writeFile(join(directory, '.dsh', 'runtime.json'), '{}')
await writeFile(join(directory, EMPTY_WORKSPACE_MARKER), '')
await writeFile(join(directory, 'visible.txt'), 'visible')
expect(await captureWorkspaceSnapshot(directory, { ignoredRootEntries: ['.dsh'] })).toEqual([
{ path: '.empty', kind: 'text', content: '' },
{ path: 'visible.txt', kind: 'text', content: 'visible' },
])
expect(await captureExpectedWorkspaceSnapshot(directory)).toEqual([
{ path: '.dsh/runtime.json', kind: 'text', content: '{}' },
{ path: 'visible.txt', kind: 'text', content: 'visible' },
])
})
it('treats NUL-bearing UTF-8 as binary workspace state', async () => {
const directory = await root()
await writeFile(join(directory, 'nul.bin'), Buffer.from([0x61, 0x00, 0x62]))
expect(await captureWorkspaceSnapshot(directory)).toEqual([
{ path: 'nul.bin', kind: 'binary', base64: 'YQBi' },
])
})
})