mirror of
https://github.com/stablyai/orca.git
synced 2026-09-24 00:02:24 +00:00
test: exercise private selection and execution-host routing
This commit is contained in:
@@ -12,21 +12,27 @@ try {
|
||||
mkdirSync(source)
|
||||
mkdirSync(target)
|
||||
execFileSync('git', ['init', '-q', source])
|
||||
writeFileSync(join(source, '.gitignore'), '.env\ndeps/\n')
|
||||
writeFileSync(join(source, '.gitignore'), '.env\ndeps/\npersonal cache/\n')
|
||||
writeFileSync(join(source, '.worktreeinclude'), '.env\n')
|
||||
writeFileSync(join(source, '.env'), 'private')
|
||||
writeFileSync(join(source, 'orca.yaml'), 'worktree:\n sharedDirectories:\n - deps\n')
|
||||
mkdirSync(join(source, 'deps'))
|
||||
writeFileSync(join(source, 'deps', 'value'), 'shared')
|
||||
execFileSync('git', ['init', '-q', target])
|
||||
const request = (operation) =>
|
||||
const request = (operation, copyPaths) =>
|
||||
JSON.parse(
|
||||
execFileSync(process.execPath, [bundle], {
|
||||
env: {
|
||||
...process.env,
|
||||
ORCA_BACKGROUND_LAUNCH: '1',
|
||||
ORCA_WORKTREE_REQUEST: Buffer.from(
|
||||
JSON.stringify({ source, target, linkedPaths: [], ...(operation ? { operation } : {}) })
|
||||
JSON.stringify({
|
||||
source,
|
||||
target,
|
||||
linkedPaths: [],
|
||||
copyPaths,
|
||||
...(operation ? { operation } : {})
|
||||
})
|
||||
).toString('base64')
|
||||
},
|
||||
encoding: 'utf8',
|
||||
@@ -36,6 +42,25 @@ try {
|
||||
)
|
||||
assert.deepEqual(request(), { supported: true })
|
||||
assert.equal(readFileSync(join(target, '.env'), 'utf8'), 'private')
|
||||
mkdirSync(join(source, 'personal cache'))
|
||||
writeFileSync(join(source, 'personal cache', 'é.txt'), 'original personal value')
|
||||
assert.deepEqual(request(undefined, ['.env', 'personal cache', 'personal cache/é.txt']), {
|
||||
supported: true
|
||||
})
|
||||
writeFileSync(join(target, 'personal cache', 'é.txt'), 'private edit')
|
||||
assert.equal(
|
||||
readFileSync(join(source, 'personal cache', 'é.txt'), 'utf8'),
|
||||
'original personal value'
|
||||
)
|
||||
assert.equal(lstatSync(join(target, 'personal cache')).isSymbolicLink(), false)
|
||||
assert.deepEqual(request(undefined, ['personal cache']), { supported: true })
|
||||
assert.equal(readFileSync(join(target, 'personal cache', 'é.txt'), 'utf8'), 'private edit')
|
||||
assert.match(request(undefined, ['missing']).warning, /nothing to copy/)
|
||||
for (const path of ['../escape', '.gitignore', 'deps']) {
|
||||
assert.throws(() => request(undefined, [path]))
|
||||
assert.equal(readFileSync(join(source, 'deps', 'value'), 'utf8'), 'shared')
|
||||
assert.equal(readFileSync(join(target, 'personal cache', 'é.txt'), 'utf8'), 'private edit')
|
||||
}
|
||||
assert.deepEqual(request('inspect-links'), { supported: true, paths: ['deps'] })
|
||||
assert.equal(lstatSync(join(target, 'deps')).isSymbolicLink(), true)
|
||||
assert.deepEqual(request('remove-links'), { supported: true, paths: ['deps'] })
|
||||
@@ -46,7 +71,17 @@ try {
|
||||
JSON.stringify({
|
||||
platform: process.platform,
|
||||
passed: true,
|
||||
operations: ['materialize', 'inspect-links', 'remove-links']
|
||||
operations: [
|
||||
'materialize-v1',
|
||||
'materialize-v2',
|
||||
'deduplicate',
|
||||
'private-edit',
|
||||
'retry-no-overwrite',
|
||||
'missing-warning',
|
||||
'reject-traversal-tracked-conflict',
|
||||
'inspect-links',
|
||||
'remove-links'
|
||||
]
|
||||
})
|
||||
)
|
||||
} finally {
|
||||
|
||||
@@ -30,6 +30,7 @@ const mocks = vi.hoisted(() => ({
|
||||
fetch: vi.fn(),
|
||||
resolveShared: vi.fn<() => Promise<string[]>>(),
|
||||
resolveInclude: vi.fn<() => Promise<string[]>>(),
|
||||
materializeWsl: vi.fn().mockResolvedValue(undefined),
|
||||
copyPaths: vi.fn<() => Promise<string[]>>(),
|
||||
created: {
|
||||
path: '/worktrees/app',
|
||||
@@ -78,6 +79,9 @@ vi.mock('../ipc/worktree-symlinks', () => ({
|
||||
createWorktreeLinkedPaths: vi.fn(),
|
||||
createWorktreeSharedPaths: vi.fn()
|
||||
}))
|
||||
vi.mock('../ipc/wsl-worktree-path-materialization', () => ({
|
||||
materializeWslWorktreePaths: mocks.materializeWsl
|
||||
}))
|
||||
|
||||
import { createRuntimeLocalManagedWorktree } from './runtime-local-worktree-create'
|
||||
import type { PreparationRearmHolder } from '../worktree-create-preparation'
|
||||
@@ -209,8 +213,21 @@ describe('runtime create Git priority', () => {
|
||||
expect(mocks.consume).toHaveBeenCalledWith(expect.objectContaining({ options }))
|
||||
expect(mocks.pushTarget).toHaveBeenCalledWith('/worktrees/app', 'app', target, options)
|
||||
expect(mocks.listing).toHaveBeenCalledWith('/repo', '/worktrees/app', 'app', options)
|
||||
expect(mocks.resolveShared).toHaveBeenCalledWith('/repo', options)
|
||||
expect(mocks.resolveInclude).toHaveBeenCalledWith('/repo', options)
|
||||
if (wslDistro) {
|
||||
expect(mocks.materializeWsl).toHaveBeenCalledWith(
|
||||
wslDistro,
|
||||
'/repo',
|
||||
'/worktrees/app',
|
||||
[],
|
||||
undefined,
|
||||
[]
|
||||
)
|
||||
expect(mocks.resolveShared).not.toHaveBeenCalled()
|
||||
expect(mocks.resolveInclude).not.toHaveBeenCalled()
|
||||
} else {
|
||||
expect(mocks.resolveShared).toHaveBeenCalledWith('/repo')
|
||||
expect(mocks.materializeWsl).not.toHaveBeenCalled()
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user