40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
import { describe, test, expect } from 'bun:test';
|
|
import { canSkipTreeRehash } from '../src/lib/server/git-deletions';
|
|
|
|
const A = 'aaaaaaa1111111111111111111111111111111111';
|
|
const A7 = 'aaaaaaa'; // same 7-char prefix, DB-stored short form
|
|
const B = 'bbbbbbb2222222222222222222222222222222222';
|
|
|
|
describe('canSkipTreeRehash', () => {
|
|
test('skips when no change, prior manifest, and baselines match (full vs full)', () => {
|
|
expect(canSkipTreeRehash(false, 5, A, A)).toBe(true);
|
|
});
|
|
|
|
test('skips when baselines match by 7-char prefix (manifest full vs DB short)', () => {
|
|
expect(canSkipTreeRehash(false, 5, A, A7)).toBe(true);
|
|
});
|
|
|
|
test('does NOT skip when the diff baseline drifted from the manifest commit', () => {
|
|
// bare Sync advanced lastCommit to B while manifest stayed at A -> must re-hash
|
|
expect(canSkipTreeRehash(false, 5, A, B)).toBe(false);
|
|
});
|
|
|
|
test('does NOT skip when files changed', () => {
|
|
expect(canSkipTreeRehash(true, 5, A, A)).toBe(false);
|
|
});
|
|
|
|
test('does NOT skip on the first sync (empty manifest must be built)', () => {
|
|
expect(canSkipTreeRehash(false, 0, A, A)).toBe(false);
|
|
});
|
|
|
|
test('does NOT skip when change state is unknown (new clone / diff failed)', () => {
|
|
expect(canSkipTreeRehash(undefined, 5, A, A)).toBe(false);
|
|
});
|
|
|
|
test('does NOT skip when either commit is null/empty', () => {
|
|
expect(canSkipTreeRehash(false, 5, null, A)).toBe(false);
|
|
expect(canSkipTreeRehash(false, 5, A, null)).toBe(false);
|
|
expect(canSkipTreeRehash(false, 5, A, '')).toBe(false);
|
|
});
|
|
});
|