mirror of
https://github.com/stablyai/orca.git
synced 2026-10-27 08:02:51 +00:00
Removes ~74 assertions of the form `expect(SOME_CONSTANT).toBe(<literal>)` where the literal is an internal tuning value — a timeout, retry count, debounce interval, cache TTL, circuit-breaker window, Tailwind class string. Those cannot fail for any reason a user would notice: they fail only when someone deliberately changes the number, and then the test is simply updated. They are copies of the declaration. The same pattern is NOT junk when the exact value is observable outside this process, so those were deliberately kept: - terminal byte contracts: `\r`, `\x03` ETX, Kitty escapes, `\x1b[?1;2c`; - wire and capability values: `agent.launch.v2`, protocol 3 / min-compatible 2, daemon per-feature boundary versions (a daemon survives app updates, so those pin what an old field daemon may be trusted with), relay header tokens; - security invariants: the `127.0.0.1` bind default, an empty iframe `sandbox`; - values external processes read: exit code 78 (EX_CONFIG) and exit code 3 (systemd `RestartPreventExitStatus`), `ORCA_AGENT_SESSION_SPAWN_TOKEN`, `npx skills …` commands users paste, on-disk journal schema versions, the `orca_<hash>` filename prefix the fish sweeper matches; - third-party names: expo-router's `unstable_settings` / `ErrorBoundary`, iOS Safari's 16px zoom threshold. Where a case asserted a relation rather than a literal — `A < B`, a sum of parts, a cap compared against a sibling budget — the relation stays and only the literal went. Test-only changes: no production file is touched and no test file is deleted.
116 lines
4.0 KiB
TypeScript
116 lines
4.0 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
const { getSshGitProviderMock, gitExecFileAsyncMock } = vi.hoisted(() => ({
|
|
getSshGitProviderMock: vi.fn(),
|
|
gitExecFileAsyncMock: vi.fn()
|
|
}))
|
|
|
|
vi.mock('../providers/ssh-git-dispatch', () => ({
|
|
getSshGitProvider: getSshGitProviderMock,
|
|
SSH_GIT_PROVIDER_UNAVAILABLE_MESSAGE: 'SSH Git provider unavailable'
|
|
}))
|
|
|
|
vi.mock('./runner', () => ({ gitExecFileAsync: gitExecFileAsyncMock }))
|
|
|
|
import {
|
|
assertRemoteUrlReadable,
|
|
isTransientGitProbeError,
|
|
readRemoteUrl,
|
|
REMOTE_URL_PROBE_TIMEOUT_MS
|
|
} from './remote-url-probe'
|
|
|
|
describe('remote URL probe', () => {
|
|
beforeEach(() => {
|
|
getSshGitProviderMock.mockReset()
|
|
gitExecFileAsyncMock.mockReset()
|
|
})
|
|
|
|
it('bounds local and WSL remote reads with the shared timeout', async () => {
|
|
gitExecFileAsyncMock.mockResolvedValue({ stdout: 'git@github.com:acme/orca.git\n' })
|
|
|
|
await expect(
|
|
readRemoteUrl({ repoPath: '/repo', wslDistro: 'Ubuntu' }, 'upstream')
|
|
).resolves.toContain('github.com')
|
|
|
|
expect(gitExecFileAsyncMock).toHaveBeenCalledWith(['remote', 'get-url', 'upstream'], {
|
|
cwd: '/repo',
|
|
timeout: REMOTE_URL_PROBE_TIMEOUT_MS,
|
|
wslDistro: 'Ubuntu'
|
|
})
|
|
|
|
await expect(readRemoteUrl({ repoPath: '/repo' }, 'origin')).resolves.toContain('github.com')
|
|
|
|
expect(gitExecFileAsyncMock).toHaveBeenLastCalledWith(['remote', 'get-url', 'origin'], {
|
|
cwd: '/repo',
|
|
timeout: REMOTE_URL_PROBE_TIMEOUT_MS
|
|
})
|
|
})
|
|
|
|
it('bounds the SSH remote read with the same deadline as the local one', async () => {
|
|
const exec = vi.fn(
|
|
async (_args: string[], _cwd: string, _options?: { signal?: AbortSignal }) => ({
|
|
stdout: 'git@github.com:acme/orca.git\n'
|
|
})
|
|
)
|
|
getSshGitProviderMock.mockReturnValue({ exec })
|
|
|
|
await expect(
|
|
readRemoteUrl({ repoPath: '/repo', connectionId: 'ssh-1' }, 'origin')
|
|
).resolves.toContain('github.com')
|
|
|
|
const [args, cwd, options] = exec.mock.calls[0]
|
|
expect(args).toEqual(['remote', 'get-url', 'origin'])
|
|
expect(cwd).toBe('/repo')
|
|
// The relay bounds each phase separately and resets on every frame, so only a
|
|
// signal spans the whole round trip.
|
|
expect(options?.signal).toBeInstanceOf(AbortSignal)
|
|
expect(options?.signal?.aborted).toBe(false)
|
|
})
|
|
|
|
it('reports a probe cut off by its deadline as unavailable, not as an answer', async () => {
|
|
const aborted = new Error('Request was cancelled')
|
|
aborted.name = 'AbortError'
|
|
getSshGitProviderMock.mockReturnValue({
|
|
exec: vi.fn(async () => {
|
|
throw aborted
|
|
})
|
|
})
|
|
|
|
expect(isTransientGitProbeError(aborted)).toBe(true)
|
|
await expect(
|
|
assertRemoteUrlReadable({ repoPath: '/repo', connectionId: 'ssh-1' })
|
|
).rejects.toBe(aborted)
|
|
})
|
|
|
|
it('rethrows a timed-out local probe so callers can report unavailable', async () => {
|
|
const timeout = new Error('git timed out.')
|
|
gitExecFileAsyncMock.mockRejectedValue(timeout)
|
|
|
|
expect(isTransientGitProbeError(timeout)).toBe(true)
|
|
await expect(assertRemoteUrlReadable({ repoPath: '/repo' })).rejects.toBe(timeout)
|
|
})
|
|
|
|
it('accepts a stable missing remote as a readable, empty repository state', async () => {
|
|
gitExecFileAsyncMock.mockRejectedValue(new Error("fatal: No such remote 'origin'"))
|
|
|
|
await expect(assertRemoteUrlReadable({ repoPath: '/repo' })).resolves.toBeUndefined()
|
|
})
|
|
|
|
it('keeps a failed SSH command unverifiable even without a transport error string', async () => {
|
|
const failure = new Error('relay request failed')
|
|
getSshGitProviderMock.mockReturnValue({ exec: vi.fn().mockRejectedValue(failure) })
|
|
|
|
await expect(
|
|
assertRemoteUrlReadable({ repoPath: '/repo', connectionId: 'ssh-1' })
|
|
).rejects.toBe(failure)
|
|
})
|
|
|
|
it('does not turn a missing SSH provider into a false readable result', async () => {
|
|
getSshGitProviderMock.mockReturnValue(null)
|
|
|
|
await expect(
|
|
assertRemoteUrlReadable({ repoPath: '/repo', connectionId: 'ssh-1' })
|
|
).rejects.toThrow('SSH Git provider unavailable')
|
|
})
|
|
})
|