agent-ecosystem/test/renderer/components/team/review/reviewContentPreview.test.ts
2026-05-17 14:18:54 +03:00

108 lines
3.3 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import {
getReviewRejectBlockReason,
getResolvedReviewModifiedContent,
isReviewRejectable,
isReviewFileMissingOnDisk,
isReviewTextContentUnavailable,
shouldRenderCurrentDiskContextPreview,
} from '../../../../../src/renderer/components/team/review/reviewContentPreview';
import type { FileChangeWithContent } from '@shared/types';
import type { FileChangeSummary } from '@shared/types/review';
function makeFile(overrides: Partial<FileChangeSummary> = {}): FileChangeSummary {
return {
filePath: '/repo/calc112/calc.js',
relativePath: 'calc112/calc.js',
snippets: [],
linesAdded: 0,
linesRemoved: 0,
isNewFile: true,
...overrides,
};
}
function makeContent(overrides: Partial<FileChangeWithContent> = {}): FileChangeWithContent {
return {
...makeFile(),
originalFullContent: null,
modifiedFullContent: null,
contentSource: 'unavailable',
...overrides,
};
}
describe('reviewContentPreview', () => {
it('uses write snippets as a restorable preview when the file is missing on disk', () => {
const file = makeFile({
snippets: [
{
toolUseId: 'tool-1',
filePath: '/repo/calc112/calc.js',
toolName: 'Write',
type: 'write-new',
oldString: '',
newString: 'const value = 1;\n',
replaceAll: false,
timestamp: '2026-03-01T10:00:00.000Z',
isError: false,
},
],
});
const content = makeContent();
expect(isReviewFileMissingOnDisk(content)).toBe(true);
expect(getResolvedReviewModifiedContent(file, content)).toBe('const value = 1;\n');
expect(isReviewTextContentUnavailable(file, content)).toBe(false);
});
it('keeps metadata-only unavailable content unavailable', () => {
const file = makeFile();
const content = makeContent();
expect(getResolvedReviewModifiedContent(file, content)).toBeNull();
expect(isReviewTextContentUnavailable(file, content)).toBe(true);
});
it('blocks reject for metadata-only current disk content but allows a context preview', () => {
const file = makeFile({
isNewFile: false,
snippets: [
{
toolUseId: 'tool-1',
filePath: '/repo/calc112/calc.js',
toolName: 'Edit',
type: 'edit',
oldString: '',
newString: '',
replaceAll: false,
timestamp: '2026-03-01T10:00:00.000Z',
isError: false,
},
],
});
const content = makeContent({
contentSource: 'disk-current',
originalFullContent: null,
modifiedFullContent: 'const value = 1;\n',
});
expect(getReviewRejectBlockReason(file, content)).toBe('baseline-unavailable');
expect(isReviewRejectable(file, content)).toBe(false);
expect(shouldRenderCurrentDiskContextPreview(file, content)).toBe(true);
});
it('allows reject when both original and modified full text are available', () => {
const file = makeFile({ isNewFile: false });
const content = makeContent({
contentSource: 'snippet-reconstruction',
originalFullContent: 'const value = 1;\n',
modifiedFullContent: 'const value = 2;\n',
});
expect(getReviewRejectBlockReason(file, content)).toBeNull();
expect(isReviewRejectable(file, content)).toBe(true);
});
});