Ctrl K
ComunidadGuías…

test/git-session-attribution.test.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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");
});