mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
* feat(app): add fileView preference for changes panel * feat(app): add buildDiffTree util for changed-files tree * feat(app): add changed-files tree directory row * feat(app): changed-files tree view mode in changes panel (#117) * feat(protocol): add checkout.commits.list RPC + commitsList feature flag * feat(server): list branch commits ahead of base with on-remote flags * feat(server): handle checkout.commits.list RPC and advertise capability * feat(client): checkout.commits.list method + useCommitsQuery hook * feat(app): per-commit inline view with local-vs-remote markers (#117) * feat(protocol,server): per-commit file diff RPC (checkout.commits.file_diff) * feat(app): open per-commit file diff on click (#117) * refactor: surface baseRef + commits loading/error, drop dead depth field * fix(app): flip commit local/remote dot — local hollow, remote filled * feat(app): list/tree view for expanded commit file list (#117) * fix(app): syntax-highlight per-commit file diff to match Changes view * feat(app): draggable resize between commits and diff sections * refactor(app): dedupe wrap-text helpers into diff-highlighted-text * fix(app): clean up commits resize drag on unmount + a11y label * fix(app): collapse commits section by default * fix(app): render per-commit file diff with the shared Changes line renderer * perf(app): memoize shared diff line row; drop redundant DiffLineView wrapper * refactor(app): extract shared DiffFileBody; render commit file diff through it * fix(app): hide inline-comment affordance in per-commit diffs (no reviewActions) * feat(app): move commits to a resizable bottom drawer in the Changes panel * feat(review): commitSha scoping for per-commit review drafts + attachment * feat(app): per-commit inline comments wired through to the composer (#117) * refactor(app): own commit file-diff open state in CommitFileList (drop reset effect) * refactor(app): colocate diff-render cluster under git/diff-file-body/ * feat(app): add diff tab target kind (working/commit diff tabs) * feat(app): useDiffFiles hook unifying working + commit diff targets * feat(app): diff tab panel rendering working/commit diffs * feat(app): open a commit diff tab on commit click; drop per-commit drawer/file list * feat(app): open/scroll working diff tab on changed-file click * fix(app): keep commit diff tabs ephemeral; align working diff whitespace * feat(app): collapsible file sections in the diff tab, collapsed by default * feat(app): make the on-remote commit dot more subtle Dims the filled green remote dot (row + legend) to ~0.55 opacity so the local-only ring stays the state that draws the eye. * Reshape commit diffs around the existing Changes view * Fix diff tab migration complexity after rebase * Address diff tab review findings * Clean up diff tab review interfaces * Collapse commit diffs into the existing view * Load commits when expanded --------- Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>
102 lines
2.7 KiB
TypeScript
102 lines
2.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { CheckoutCommitFile, ParsedDiffFile } from "@getpaseo/protocol/messages";
|
|
import { resolveCommitDiffFiles } from "./use-diff-files";
|
|
|
|
function createCommitFile(
|
|
overrides: Partial<CheckoutCommitFile> & { path: string },
|
|
): CheckoutCommitFile {
|
|
return {
|
|
path: overrides.path,
|
|
additions: overrides.additions ?? 0,
|
|
deletions: overrides.deletions ?? 0,
|
|
...(overrides.status ? { status: overrides.status } : {}),
|
|
};
|
|
}
|
|
|
|
function createParsedDiffFile(
|
|
overrides: Partial<ParsedDiffFile> & { path: string },
|
|
): ParsedDiffFile {
|
|
return {
|
|
path: overrides.path,
|
|
isNew: overrides.isNew ?? false,
|
|
isDeleted: overrides.isDeleted ?? false,
|
|
additions: overrides.additions ?? 1,
|
|
deletions: overrides.deletions ?? 0,
|
|
hunks: overrides.hunks ?? [
|
|
{
|
|
oldStart: 1,
|
|
oldCount: 1,
|
|
newStart: 1,
|
|
newCount: 1,
|
|
lines: [{ type: "add", content: "x", tokens: [] }],
|
|
},
|
|
],
|
|
status: overrides.status,
|
|
} as ParsedDiffFile;
|
|
}
|
|
|
|
describe("resolveCommitDiffFiles", () => {
|
|
it("keeps pending commit files out of the shared view until their per-file diff resolves", () => {
|
|
const files = [
|
|
createCommitFile({ path: "blob.bin", status: "added" }),
|
|
createCommitFile({ path: "src/app.ts", additions: 3, deletions: 1, status: "modified" }),
|
|
];
|
|
|
|
const resolvedByPath = new Map<string, ParsedDiffFile | null | undefined>([
|
|
["blob.bin", undefined],
|
|
[
|
|
"src/app.ts",
|
|
createParsedDiffFile({
|
|
path: "src/app.ts",
|
|
additions: 3,
|
|
deletions: 1,
|
|
}),
|
|
],
|
|
]);
|
|
|
|
expect(resolveCommitDiffFiles(files, resolvedByPath)).toEqual([
|
|
expect.objectContaining({
|
|
path: "src/app.ts",
|
|
additions: 3,
|
|
deletions: 1,
|
|
}),
|
|
]);
|
|
});
|
|
|
|
it("preserves binary-only commit files from commit metadata when the per-file diff is null", () => {
|
|
const files = [
|
|
createCommitFile({ path: "blob.bin", status: "added" }),
|
|
createCommitFile({ path: "src/app.ts", additions: 3, deletions: 1, status: "modified" }),
|
|
];
|
|
|
|
const resolvedByPath = new Map<string, ParsedDiffFile | null>([
|
|
["blob.bin", null],
|
|
[
|
|
"src/app.ts",
|
|
createParsedDiffFile({
|
|
path: "src/app.ts",
|
|
additions: 3,
|
|
deletions: 1,
|
|
}),
|
|
],
|
|
]);
|
|
|
|
expect(resolveCommitDiffFiles(files, resolvedByPath)).toEqual([
|
|
{
|
|
path: "blob.bin",
|
|
isNew: true,
|
|
isDeleted: false,
|
|
additions: 0,
|
|
deletions: 0,
|
|
hunks: [],
|
|
status: "binary",
|
|
},
|
|
expect.objectContaining({
|
|
path: "src/app.ts",
|
|
additions: 3,
|
|
deletions: 1,
|
|
}),
|
|
]);
|
|
});
|
|
});
|