import { describe, expect, it } from "vite-plus/test"; import { countReviewCommentContexts, formatReviewCommentContext, parseReviewCommentMessageSegments, parseReviewInlineComments, type ReviewCommentTarget,} from "./reviewCommentSelection"; function makeTarget(): ReviewCommentTarget { return { sectionId: "section-1", sectionTitle: "Working tree", filePath: "apps/demo/src/main.ts", startIndex: 0, endIndex: 1, lines: [ { kind: "line", id: "line-1", change: "delete", oldLineNumber: 7, newLineNumber: null, content: "const retryLimit = 2;", additionTokenIndex: null, deletionTokenIndex: 0, comparison: null, }, { kind: "line", id: "line-2", change: "add", oldLineNumber: null, newLineNumber: 7, content: "const retryLimit = 4;", additionTokenIndex: 0, deletionTokenIndex: null, comparison: null, }, ], };} describe("review comment serialization", () => { it("preserves enough metadata for inline diff rendering", () => { const serialized = formatReviewCommentContext(makeTarget(), "Please keep this configurable."); expect(countReviewCommentContexts(serialized)).toBe(1); expect(parseReviewInlineComments(serialized)).toEqual([ expect.objectContaining({ sectionId: "section-1", sectionTitle: "Working tree", filePath: "apps/demo/src/main.ts", startIndex: 0, endIndex: 1, text: "Please keep this configurable.", diff: expect.stringContaining("-const retryLimit = 2;"), }), ]); }); it("splits chat text into review comment segments", () => { const serialized = `Before\n${formatReviewCommentContext(makeTarget(), "Please keep this configurable.")}\nAfter`; const segments = parseReviewCommentMessageSegments(serialized); expect(segments).toHaveLength(3); expect(segments[0]).toEqual(expect.objectContaining({ kind: "text", text: "Before\n" })); expect(segments[1]).toEqual( expect.objectContaining({ kind: "review-comment", comment: expect.objectContaining({ filePath: "apps/demo/src/main.ts", text: "Please keep this configurable.", diff: expect.stringContaining("+const retryLimit = 4;"), }), }), ); expect(segments[2]).toEqual(expect.objectContaining({ kind: "text", text: "\nAfter" })); });});
import { describe, expect, it } from "vite-plus/test";
import {
countReviewCommentContexts,
formatReviewCommentContext,
parseReviewCommentMessageSegments,
parseReviewInlineComments,
type ReviewCommentTarget,
} from "./reviewCommentSelection";
function makeTarget(): ReviewCommentTarget {
return {
sectionId: "section-1",
sectionTitle: "Working tree",
filePath: "apps/demo/src/main.ts",
startIndex: 0,
endIndex: 1,
lines: [
{
kind: "line",
id: "line-1",
change: "delete",
oldLineNumber: 7,
newLineNumber: null,
content: "const retryLimit = 2;",
additionTokenIndex: null,
deletionTokenIndex: 0,
comparison: null,
},
{
kind: "line",
id: "line-2",
change: "add",
oldLineNumber: null,
newLineNumber: 7,
content: "const retryLimit = 4;",
additionTokenIndex: 0,
deletionTokenIndex: null,
comparison: null,
},
],
};
}
describe("review comment serialization", () => {
it("preserves enough metadata for inline diff rendering", () => {
const serialized = formatReviewCommentContext(makeTarget(), "Please keep this configurable.");
expect(countReviewCommentContexts(serialized)).toBe(1);
expect(parseReviewInlineComments(serialized)).toEqual([
expect.objectContaining({
sectionId: "section-1",
sectionTitle: "Working tree",
filePath: "apps/demo/src/main.ts",
startIndex: 0,
endIndex: 1,
text: "Please keep this configurable.",
diff: expect.stringContaining("-const retryLimit = 2;"),
}),
]);
});
it("splits chat text into review comment segments", () => {
const serialized = `Before\n${formatReviewCommentContext(makeTarget(), "Please keep this configurable.")}\nAfter`;
const segments = parseReviewCommentMessageSegments(serialized);
expect(segments).toHaveLength(3);
expect(segments[0]).toEqual(expect.objectContaining({ kind: "text", text: "Before\n" }));
expect(segments[1]).toEqual(
expect.objectContaining({
kind: "review-comment",
comment: expect.objectContaining({
filePath: "apps/demo/src/main.ts",
text: "Please keep this configurable.",
diff: expect.stringContaining("+const retryLimit = 4;"),
}),
}),
);
expect(segments[2]).toEqual(expect.objectContaining({ kind: "text", text: "\nAfter" }));
});
});