chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import {
|
||||
computeStoreForCompletion,
|
||||
selectStoreForWaitpoint,
|
||||
} from "~/v3/runOpsMigration/crossSeamGuard.server";
|
||||
// Real sample ids exercising the genuine run-id residency classifier (no stub).
|
||||
const NEW = "waitpoint_" + "a".repeat(24) + "01"; // v1 body (version "1" at index 25) -> NEW
|
||||
const LEGACY = "waitpoint_" + "a".repeat(25); // 25-char cuid body -> LEGACY
|
||||
const UNRECOGNIZED = "waitpoint_" + "a".repeat(10); // no version marker -> LEGACY
|
||||
|
||||
describe("selectStoreForWaitpoint — happy-path residency routing", () => {
|
||||
it("MANUAL completion of a NEW waitpoint selects the new store", () => {
|
||||
const d = selectStoreForWaitpoint({ waitpointId: NEW, routeKind: "MANUAL" });
|
||||
expect(d.store).toBe("new");
|
||||
expect(d.residency).toBe("NEW");
|
||||
});
|
||||
|
||||
it("RESUME_TOKEN completion of a LEGACY waitpoint selects the legacy store", () => {
|
||||
const d = selectStoreForWaitpoint({ waitpointId: LEGACY, routeKind: "RESUME_TOKEN" });
|
||||
expect(d.store).toBe("legacy");
|
||||
expect(d.residency).toBe("LEGACY");
|
||||
});
|
||||
|
||||
it("DATETIME completion of a NEW waitpoint selects the new store", () => {
|
||||
expect(selectStoreForWaitpoint({ waitpointId: NEW, routeKind: "DATETIME" }).store).toBe("new");
|
||||
});
|
||||
|
||||
it("RUN completion of a NEW waitpoint selects the new store", () => {
|
||||
expect(selectStoreForWaitpoint({ waitpointId: NEW, routeKind: "RUN" }).store).toBe("new");
|
||||
});
|
||||
|
||||
it("IDEMPOTENCY_REUSE of a NEW waitpoint with no pins selects the new store", () => {
|
||||
const d = selectStoreForWaitpoint({ waitpointId: NEW, routeKind: "IDEMPOTENCY_REUSE" });
|
||||
expect(d.store).toBe("new");
|
||||
expect(d.pinnedReason).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("selectStoreForWaitpoint — legacy pins", () => {
|
||||
it("pins a NEW-residency waitpoint to legacy when non-tree-owned", () => {
|
||||
const d = selectStoreForWaitpoint({
|
||||
waitpointId: NEW,
|
||||
routeKind: "MANUAL",
|
||||
treeOwnerResidency: "LEGACY",
|
||||
});
|
||||
expect(d.store).toBe("legacy");
|
||||
expect(d.pinnedReason).toBe("non-tree-owned");
|
||||
});
|
||||
|
||||
it("pins cross-tree idempotency reuse to legacy", () => {
|
||||
const d = selectStoreForWaitpoint({
|
||||
waitpointId: NEW,
|
||||
routeKind: "IDEMPOTENCY_REUSE",
|
||||
isCrossTreeIdempotency: true,
|
||||
});
|
||||
expect(d.store).toBe("legacy");
|
||||
expect(d.pinnedReason).toBe("cross-tree-idempotency");
|
||||
});
|
||||
|
||||
it("pins a descendant of a legacy parent to legacy", () => {
|
||||
const d = selectStoreForWaitpoint({
|
||||
waitpointId: NEW,
|
||||
routeKind: "RUN",
|
||||
hasLegacyParent: true,
|
||||
});
|
||||
expect(d.store).toBe("legacy");
|
||||
expect(d.pinnedReason).toBe("legacy-parent-descendant");
|
||||
});
|
||||
|
||||
it("applies deterministic pin precedence: non-tree-owned wins", () => {
|
||||
const d = selectStoreForWaitpoint({
|
||||
waitpointId: NEW,
|
||||
routeKind: "RUN",
|
||||
treeOwnerResidency: "LEGACY",
|
||||
isCrossTreeIdempotency: true,
|
||||
hasLegacyParent: true,
|
||||
});
|
||||
expect(d.store).toBe("legacy");
|
||||
expect(d.pinnedReason).toBe("non-tree-owned");
|
||||
});
|
||||
|
||||
it("reports the waitpoint's own residency even when pinned to legacy", () => {
|
||||
const d = selectStoreForWaitpoint({
|
||||
waitpointId: NEW,
|
||||
routeKind: "MANUAL",
|
||||
treeOwnerResidency: "LEGACY",
|
||||
});
|
||||
expect(d.store).toBe("legacy");
|
||||
expect(d.residency).toBe("NEW");
|
||||
});
|
||||
});
|
||||
|
||||
describe("selectStoreForWaitpoint — unrecognized shapes and unknown routes", () => {
|
||||
it("routes an id without the v1 version marker to legacy (classification is total)", () => {
|
||||
const d = selectStoreForWaitpoint({ waitpointId: UNRECOGNIZED, routeKind: "MANUAL" });
|
||||
expect(d.store).toBe("legacy");
|
||||
expect(d.residency).toBe("LEGACY");
|
||||
});
|
||||
|
||||
it("throws when an unknown routeKind is supplied", () => {
|
||||
expect(() =>
|
||||
// @ts-expect-error deliberately invalid kind
|
||||
selectStoreForWaitpoint({ waitpointId: NEW, routeKind: "WAT" as any })
|
||||
).toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe("computeStoreForCompletion — single-DB no-op + flag wrapper", () => {
|
||||
it("returns the single store without classifying when split is OFF", () => {
|
||||
const calls: string[] = [];
|
||||
const d = computeStoreForCompletion(
|
||||
{ waitpointId: UNRECOGNIZED, routeKind: "MANUAL" },
|
||||
{
|
||||
splitEnabled: false,
|
||||
classify: (id) => {
|
||||
calls.push(id);
|
||||
return "NEW";
|
||||
},
|
||||
}
|
||||
);
|
||||
expect(d.store).toBe("legacy"); // the single store
|
||||
expect(calls).toEqual([]); // classifier never consulted
|
||||
});
|
||||
|
||||
it("delegates to selectStoreForWaitpoint when split is ON", () => {
|
||||
const d = computeStoreForCompletion(
|
||||
{ waitpointId: NEW, routeKind: "MANUAL" },
|
||||
{ splitEnabled: true }
|
||||
);
|
||||
expect(d.store).toBe("new");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user