Files
orca/src/main/runtime/runtime-local-worktree-materialization.test.ts
T
Neil eedca5ee1c fix(persistence): worktree meta and lineage writes take the row's host, not the id (R4-2b) (#30811)
* fix(persistence): worktree meta and lineage writes take the row's host, not the id (R4-2b)

* fix(persistence): review fixes for host-targeted worktree writes

* test: SAFETY notes on partial runtime store mocks

* test: drop imports duplicated by the rebase onto #30797
2026-10-19 11:39:54 -07:00

81 lines
2.6 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest'
const mocks = vi.hoisted(() => ({
createWorktreeCopiedPaths: vi.fn(),
createWorktreeLinkedPaths: vi.fn(),
createWorktreeSharedPaths: vi.fn(),
resolveWorktreeIncludePaths: vi.fn(async () => []),
resolveWorktreeSharedDirectories: vi.fn(async () => [])
}))
vi.mock('../ipc/worktree-symlinks', () => ({
createWorktreeCopiedPaths: mocks.createWorktreeCopiedPaths,
createWorktreeLinkedPaths: mocks.createWorktreeLinkedPaths,
createWorktreeSharedPaths: mocks.createWorktreeSharedPaths
}))
vi.mock('../git/worktree-include-file', () => ({
resolveWorktreeIncludePaths: mocks.resolveWorktreeIncludePaths
}))
vi.mock('../git/worktree-shared-directories', () => ({
resolveWorktreeSharedDirectories: mocks.resolveWorktreeSharedDirectories
}))
import { materializeRuntimeLocalWorktree } from './runtime-local-worktree-materialization'
import { createWorktreeCreateTimingRecorder } from '../worktree-create-timing'
import type { HostWorktreeTarget } from '../../shared/worktree/host-qualified-identity'
describe('materializeRuntimeLocalWorktree', () => {
it('records lineage immediately after metadata and before filesystem setup', async () => {
const order: string[] = []
mocks.createWorktreeLinkedPaths.mockImplementationOnce(async () => {
order.push('filesystem')
throw new Error('link failed')
})
const store = {
getProjectHostSetups: () => [],
setWorktreeMeta: vi.fn((_target: HostWorktreeTarget, updates) => ({
...updates,
hostId: 'local'
}))
}
await expect(
materializeRuntimeLocalWorktree({
request: {},
repo: {
id: 'repo-1',
path: '/repo',
displayName: 'Repo',
badgeColor: '#000000',
addedAt: 1,
symlinkPaths: ['node_modules']
},
store,
settings: { workspaceDir: '/worktrees', nestWorkspaces: true },
created: {
path: '/worktrees/app',
head: 'abc123',
branch: 'feature/app',
isBare: false,
isMainWorktree: false
},
remoteTrackingBase: null,
sparseDirectories: [],
checkoutExistingBranch: false,
baseBranch: 'main',
branchName: 'feature/app',
effectiveRequestedName: 'app',
effectiveSanitizedName: 'app',
localWorktreeGitOptions: {},
onMetadataPersisted: () => {
order.push('metadata')
return null
},
timing: createWorktreeCreateTimingRecorder()
} as never)
).rejects.toThrow('link failed')
expect(order).toEqual(['metadata', 'filesystem'])
})
})