25 lines
1.5 KiB
JavaScript
25 lines
1.5 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"}]);
|
||
|
|
});
|