mirror of
https://github.com/stablyai/orca.git
synced 2026-11-13 17:37:40 +00:00
* 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
81 lines
2.6 KiB
TypeScript
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'])
|
|
})
|
|
})
|