evOo-local/packages/core/src/screen-lease.test.ts
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

41 lines
1.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
canReleaseScreenLease,
canTakeScreenLease,
parseScreenLeaseId,
screenLeaseId,
} from "./screen-lease.js";
describe("screenLeaseId", () => {
it("puts the fence after the run id, including boot ids that contain a colon", () => {
expect(screenLeaseId("run-1", 8)).toBe("run-1:8");
expect(screenLeaseId("boot:abc", 3)).toBe("boot:abc:3");
expect(parseScreenLeaseId("boot:abc:3")).toEqual({ ownerId: "boot:abc", fence: 3 });
expect(parseScreenLeaseId("run-1")).toEqual({ ownerId: "run-1", fence: 0 });
});
});
describe("canTakeScreenLease", () => {
it("lets a newer fence reclaim the same bot screen", () => {
expect(canTakeScreenLease("run-1:1", "run-2:2")).toBe(true);
expect(canTakeScreenLease("run-1:1", "run-1:8")).toBe(true);
});
it("rejects a delayed request from an older execution", () => {
expect(canTakeScreenLease("run-2:2", "run-1:1")).toBe(false);
expect(canTakeScreenLease("run-1:8", "run-1:1")).toBe(false);
expect(canTakeScreenLease("run-2:2", undefined)).toBe(false);
});
});
describe("canReleaseScreenLease", () => {
it("lets the same run release after a takeover fence bump", () => {
expect(canReleaseScreenLease("run-1:1", "run-1:8")).toBe(true);
expect(canReleaseScreenLease("run-1:1", "run-1:1")).toBe(true);
});
it("rejects a stale finalizer after a newer run reclaimed the screen", () => {
expect(canReleaseScreenLease("run-2:2", "run-1:1")).toBe(false);
});
});