import { describe, expect, it } from 'vitest'; import { resolveBaseRefForLog } from './service.js'; describe('resolveBaseRefForLog', () => { it('returns the local ref unchanged when it exists, even if origin also exists', async () => { // Both local 'main' and 'refs/remotes/origin/main' are present. // The local ref takes precedence — callers that ask for 'main' get 'main'. const checkRef = async (ref) => ref === 'main' || ref === 'refs/remotes/origin/main'; expect(await resolveBaseRefForLog('main', checkRef)).toBe('main'); }); it('falls back to origin/ when local ref cannot be resolved but origin can', async () => { // Local 'main' is absent (e.g. user never checked it out), but origin/main exists. const checkRef = async (ref) => ref === 'refs/remotes/origin/main'; expect(await resolveBaseRefForLog('main', checkRef)).toBe('origin/main'); }); it('returns the original ref when neither local nor origin ref can be resolved', async () => { // Neither ref exists; return as-is so git surfaces a meaningful error. const checkRef = async () => false; expect(await resolveBaseRefForLog('nonexistent-branch', checkRef)).toBe('nonexistent-branch'); }); it('returns undefined when from is undefined', async () => { const checkRef = async () => true; expect(await resolveBaseRefForLog(undefined, checkRef)).toBeUndefined(); }); it('returns undefined when from is an empty string', async () => { const checkRef = async () => true; expect(await resolveBaseRefForLog('', checkRef)).toBeUndefined(); }); it('returns undefined when from is a whitespace-only string', async () => { const checkRef = async () => true; expect(await resolveBaseRefForLog(' ', checkRef)).toBeUndefined(); }); });