import { logger, partial } from '~test/util.ts'; import * as _repositoryCache from '../cache/repository/index.ts'; import type { BranchCache, RepoCacheData } from '../cache/repository/types.ts'; import { getCachedModifiedResult, setCachedModifiedResult, } from './modified-cache.ts'; vi.mock('../cache/repository/index.ts'); const repositoryCache = vi.mocked(_repositoryCache); describe('util/git/modified-cache', () => { let repoCache: RepoCacheData = {}; beforeEach(() => { repoCache = {}; repositoryCache.getCache.mockReturnValue(repoCache); }); describe('getCachedModifiedResult', () => { it('returns null if cache is not populated', () => { expect(getCachedModifiedResult('foo', 'aaa')).toBeNull(); }); it('returns null if branch not found', () => { repoCache.branches = [ partial({ branchName: 'not_foo', sha: 'aaa' }), ]; expect(getCachedModifiedResult('foo', 'aaa')).toBeNull(); }); it('returns null if branch SHA has changed', () => { repoCache.branches = [ partial({ branchName: 'foo', sha: 'aaa' }), ]; expect(getCachedModifiedResult('foo', 'not_aaa')).toBeNull(); }); it('returns null if cached value is undefined', () => { repoCache.branches = [ partial({ branchName: 'foo', sha: 'aaa' }), ]; expect(getCachedModifiedResult('foo', 'aaa')).toBeNull(); }); it('returns null if branch sha is null', () => { repoCache.branches = [ partial({ branchName: 'foo', sha: 'aaa' }), ]; expect(getCachedModifiedResult('foo', null)).toBeNull(); }); it('returns cached value', () => { repoCache.branches = [ partial({ branchName: 'foo', sha: '111', isModified: true, }), ]; expect(getCachedModifiedResult('foo', '111')).toBeTrue(); }); }); describe('setCachedModifiedResult', () => { it('returns without updating when cache not populated', () => { setCachedModifiedResult('foo', false); expect(repoCache).toEqual({}); expect(logger.logger.debug).toHaveBeenCalledWith( 'setCachedModifiedResult(): Branch cache not present', ); }); it('returns without updating when branch not found', () => { setCachedModifiedResult('foo', false); expect(repoCache).toEqual({}); expect(logger.logger.debug).toHaveBeenCalledWith( 'setCachedModifiedResult(): Branch cache not present', ); }); it('handles multiple branches', () => { repoCache = { branches: [ partial({ branchName: 'foo-1', sha: '111', isModified: true, }), partial({ branchName: 'foo-2', sha: 'aaa', isModified: false, }), partial({ branchName: 'foo-3', sha: '222', isModified: true, }), ], }; repositoryCache.getCache.mockReturnValue(repoCache); setCachedModifiedResult('foo-1', false); setCachedModifiedResult('foo-2', true); setCachedModifiedResult('foo-3', false); expect(repoCache).toEqual({ branches: [ { branchName: 'foo-1', sha: '111', isModified: false, }, { branchName: 'foo-2', sha: 'aaa', isModified: true, }, { branchName: 'foo-3', sha: '222', isModified: false, }, ], }); }); }); });