Native surfaces migration — evolve the extension onto VS Code's native review surfaces (9-task plan, spec v0.2.1) (#72)
This commit was merged in pull request #72.
This commit is contained in:
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
||||
import * as fs from "node:fs";
|
||||
import * as os from "node:os";
|
||||
import * as path from "node:path";
|
||||
import { BaselineStore, type Baseline } from "../src/baselineStore";
|
||||
import { BaselineStore, normalizeReason, type Baseline } from "../src/baselineStore";
|
||||
|
||||
let dir: string;
|
||||
|
||||
@@ -16,9 +16,23 @@ afterEach(() => {
|
||||
const KEY = "a1b2c3"; // a stand-in for the controller's sha256(uri) key
|
||||
|
||||
function sample(uri = "file:///ws/notes/chapter-1.md"): Baseline {
|
||||
return { uri, text: "hello\nworld\n", capturedAt: "2026-06-11T00:00:00.000Z", reason: "opened" };
|
||||
return { uri, text: "hello\nworld\n", capturedAt: "2026-06-11T00:00:00.000Z", reason: "entered" };
|
||||
}
|
||||
|
||||
describe("normalizeReason (INV-7 legacy migration)", () => {
|
||||
it("migrates legacy 'opened' → 'entered'", () => {
|
||||
expect(normalizeReason("opened")).toBe("entered");
|
||||
});
|
||||
it("migrates legacy 'machine-landing' → 'entered'", () => {
|
||||
expect(normalizeReason("machine-landing")).toBe("entered");
|
||||
});
|
||||
it("passes current reasons through unchanged", () => {
|
||||
expect(normalizeReason("entered")).toBe("entered");
|
||||
expect(normalizeReason("pinned")).toBe("pinned");
|
||||
expect(normalizeReason("head")).toBe("head");
|
||||
});
|
||||
});
|
||||
|
||||
describe("BaselineStore", () => {
|
||||
it("returns null for a key with no baseline", () => {
|
||||
expect(new BaselineStore(dir).load(KEY)).toBeNull();
|
||||
@@ -36,9 +50,31 @@ describe("BaselineStore", () => {
|
||||
expect(store.load(KEY)).toEqual(b);
|
||||
});
|
||||
|
||||
it("migrates a legacy on-disk reason ('opened') to 'entered' on load", () => {
|
||||
const store = new BaselineStore(dir);
|
||||
fs.mkdirSync(path.dirname(store.baselinePath(KEY)), { recursive: true });
|
||||
fs.writeFileSync(
|
||||
store.baselinePath(KEY),
|
||||
JSON.stringify({ uri: "file:///a.md", text: "legacy\n", capturedAt: "2026-06-11T00:00:00.000Z", reason: "opened" }),
|
||||
"utf8",
|
||||
);
|
||||
expect(store.load(KEY)?.reason).toBe("entered");
|
||||
});
|
||||
|
||||
it("migrates a legacy on-disk reason ('machine-landing') to 'entered' on load", () => {
|
||||
const store = new BaselineStore(dir);
|
||||
fs.mkdirSync(path.dirname(store.baselinePath(KEY)), { recursive: true });
|
||||
fs.writeFileSync(
|
||||
store.baselinePath(KEY),
|
||||
JSON.stringify({ uri: "file:///a.md", text: "legacy\n", capturedAt: "2026-06-11T00:00:00.000Z", reason: "machine-landing" }),
|
||||
"utf8",
|
||||
);
|
||||
expect(store.load(KEY)?.reason).toBe("entered");
|
||||
});
|
||||
|
||||
it("overwrites in place: the newest epoch wins, no history kept", () => {
|
||||
const store = new BaselineStore(dir);
|
||||
store.save(KEY, { uri: "untitled:Untitled-1", text: "v1", capturedAt: "2026-06-11T00:00:00.000Z", reason: "opened" });
|
||||
store.save(KEY, { uri: "untitled:Untitled-1", text: "v1", capturedAt: "2026-06-11T00:00:00.000Z", reason: "entered" });
|
||||
store.save(KEY, { uri: "untitled:Untitled-1", text: "v2", capturedAt: "2026-06-11T00:01:00.000Z", reason: "pinned" });
|
||||
expect(store.load(KEY)).toEqual({ uri: "untitled:Untitled-1", text: "v2", capturedAt: "2026-06-11T00:01:00.000Z", reason: "pinned" });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user