37 lines
1.6 KiB
JavaScript
37 lines
1.6 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { createMigrationContext, migrationObjectId } from "../dist/migration.js";
|
|
test("migration context offers restricted ports and deterministic helper identities", () => {
|
|
const input = {
|
|
schemaVersion: 1,
|
|
executionId: "operation:transition",
|
|
exportId: "migrate",
|
|
ports: [
|
|
{
|
|
name: "old",
|
|
binding: "slot:name",
|
|
view: "old",
|
|
access: ["read"],
|
|
states: [{ objectId: "obj:one", value: "Alice" }],
|
|
},
|
|
{ name: "new", binding: "slot:name", view: "new", access: ["write"] },
|
|
{ name: "newRead", binding: "slot:name", view: "new", access: ["read"] },
|
|
{ name: "helpers", binding: "atom:helper", view: "new", access: ["create"] },
|
|
],
|
|
};
|
|
const { context, result } = createMigrationContext(input);
|
|
assert.equal(context.read("old", "obj:one"), "Alice");
|
|
assert.throws(() => context.write("old", "obj:one", "Bob"), /does not grant/);
|
|
assert.throws(() => context.read("new", "obj:one"), /does not grant/);
|
|
context.write("new", "obj:one", "Alice");
|
|
assert.equal(context.read("newRead", "obj:one"), "Alice");
|
|
context.write("new", "obj:one", "Bob");
|
|
assert.equal(context.read("newRead", "obj:one"), "Bob");
|
|
assert.equal(context.read("old", "obj:one"), "Alice");
|
|
const helper = context.create("helpers", "one");
|
|
assert.equal(helper, migrationObjectId(input.executionId, "helpers", "one"));
|
|
assert.equal(context.create("helpers", "one"), helper);
|
|
assert.equal(result().creates.length, 1);
|
|
assert.deepEqual(input.ports[0].states, [{ objectId: "obj:one", value: "Alice" }]);
|
|
});
|