orca/src/shared/worktree-base-ref.test.ts

65 lines
2.1 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest'
import { resolveWorktreeAddBaseRef } from './worktree-base-ref'
describe('resolveWorktreeAddBaseRef', () => {
it('leaves fully qualified refs unchanged', async () => {
const refExists = vi.fn()
await expect(resolveWorktreeAddBaseRef('refs/heads/main', refExists)).resolves.toBe(
'refs/heads/main'
)
expect(refExists).not.toHaveBeenCalled()
})
it('leaves provider review refs unchanged', async () => {
const refExists = vi.fn()
await expect(resolveWorktreeAddBaseRef('refs/pull/123/head', refExists)).resolves.toBe(
'refs/pull/123/head'
)
await expect(
resolveWorktreeAddBaseRef('refs/merge-requests/456/head', refExists)
).resolves.toBe('refs/merge-requests/456/head')
expect(refExists).not.toHaveBeenCalled()
})
it('qualifies a bare local branch name', async () => {
const refExists = vi.fn(async (ref: string) => ref === 'refs/heads/main')
await expect(resolveWorktreeAddBaseRef('main', refExists)).resolves.toBe('refs/heads/main')
expect(refExists).toHaveBeenCalledWith('refs/heads/main')
})
it('prefers a remote-tracking ref for remote-display names', async () => {
const refExists = vi.fn(async (ref: string) => ref === 'refs/remotes/origin/main')
await expect(resolveWorktreeAddBaseRef('origin/main', refExists)).resolves.toBe(
'refs/remotes/origin/main'
)
expect(refExists).toHaveBeenCalledWith('refs/remotes/origin/main')
})
it('qualifies a slash-containing local branch when no matching remote ref exists', async () => {
const refExists = vi.fn(async (ref: string) => ref === 'refs/heads/release/main')
await expect(resolveWorktreeAddBaseRef('release/main', refExists)).resolves.toBe(
'refs/heads/release/main'
)
expect(refExists.mock.calls.map((call) => call[0])).toEqual([
'refs/remotes/release/main',
'refs/heads/release/main'
])
})
it('keeps unresolvable revisions untouched', async () => {
const refExists = vi.fn(async () => false)
await expect(resolveWorktreeAddBaseRef('abc1234', refExists)).resolves.toBe('abc1234')
})
})