test/git-session-attribution.test.js
Rama main · réplica de lectura del repositorio original.
var assert = require("node:assert/strict");
var fs = require("node:fs");
var os = require("node:os");
var path = require("node:path");
var test = require("node:test");
var { execFileSync } = require("node:child_process");
var { attachGitSessionAttribution } = require("../lib/git-session-attribution");
var gitCli = require("../lib/git-cli");
function git(cwd, args) {
return execFileSync("git", args, { cwd: cwd, encoding: "utf8" });
}
function makeRepository() {
var root = fs.mkdtempSync(path.join(os.tmpdir(), "clay-git-session-"));
git(root, ["init"]);
git(root, ["config", "user.email", "test@example.com"]);
git(root, ["config", "user.name", "Clay Test"]);
fs.writeFileSync(path.join(root, "app.js"), "var value = 1;\n");
git(root, ["add", "app.js"]);
git(root, ["commit", "-m", "test: initialize repository"]);
return root;
}
test("session attribution links new working-tree changes and compares their baseline", function () {
var root = makeRepository();
var tracker = attachGitSessionAttribution({ cwd: root, storageDir: fs.mkdtempSync(path.join(os.tmpdir(), "clay-git-tracking-")) });
var session = { localId: 7, cliSessionId: "session-one", title: "Update value", vendor: "codex" };
tracker.beginTurn(session);
fs.writeFileSync(path.join(root, "app.js"), "var value = 2;\n");
tracker.finishTurn(session);
var sessions = new Map([[7, session]]);
var status = tracker.decorateStatus(gitCli.getStatus(root), sessions);
assert.equal(status.files[0].sessions[0].sessionId, 7);
assert.equal(status.files[0].sessions[0].title, "Update value");
assert.equal(status.files[0].sessions[0].preExisting, false);
var comparison = tracker.getSessionBaselineDiff("session-one", "app.js");
assert.equal(comparison.oldContent, "var value = 1;\n");
assert.equal(comparison.newContent, "var value = 2;\n");
});
test("session attribution preserves pre-existing uncommitted content as the baseline", function () {
var root = makeRepository();
var tracker = attachGitSessionAttribution({ cwd: root, storageDir: fs.mkdtempSync(path.join(os.tmpdir(), "clay-git-tracking-")) });
var session = { localId: 8, cliSessionId: "session-two", title: "Continue edit", vendor: "claude" };
fs.writeFileSync(path.join(root, "app.js"), "var value = 2;\n");
tracker.beginTurn(session);
fs.writeFileSync(path.join(root, "app.js"), "var value = 3;\n");
tracker.finishTurn(session);
var status = tracker.decorateStatus(gitCli.getStatus(root), new Map([[8, session]]));
assert.equal(status.files[0].sessions[0].preExisting, true);
var comparison = tracker.getSessionBaselineDiff("session-two", "app.js");
assert.equal(comparison.oldContent, "var value = 2;\n");
assert.equal(comparison.newContent, "var value = 3;\n");
});