Add atomic circuit update commands
This commit is contained in:
@@ -5,6 +5,10 @@ import {
|
||||
serializeProjectCommand,
|
||||
type SerializedProjectCommand,
|
||||
} from "../src/domain/models/project-command.model.js";
|
||||
import {
|
||||
assertCircuitUpdateProjectCommand,
|
||||
createCircuitUpdateProjectCommand,
|
||||
} from "../src/domain/models/circuit-project-command.model.js";
|
||||
|
||||
describe("serialized project commands", () => {
|
||||
it("round-trips a versioned command envelope", () => {
|
||||
@@ -72,3 +76,49 @@ describe("serialized project commands", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("circuit update project commands", () => {
|
||||
it("creates a typed command with explicit null clearing semantics", () => {
|
||||
const command = createCircuitUpdateProjectCommand("circuit-1", {
|
||||
displayName: null,
|
||||
cableLength: 12.5,
|
||||
isReserve: false,
|
||||
});
|
||||
|
||||
assert.doesNotThrow(() => assertCircuitUpdateProjectCommand(command));
|
||||
assert.deepEqual(command.payload.changes, [
|
||||
{ field: "displayName", value: null },
|
||||
{ field: "cableLength", value: 12.5 },
|
||||
{ field: "isReserve", value: false },
|
||||
]);
|
||||
});
|
||||
|
||||
it("rejects empty, duplicate and invalid field changes", () => {
|
||||
assert.throws(
|
||||
() => createCircuitUpdateProjectCommand("circuit-1", {}),
|
||||
/at least one change/
|
||||
);
|
||||
assert.throws(
|
||||
() =>
|
||||
assertCircuitUpdateProjectCommand({
|
||||
schemaVersion: 1,
|
||||
type: "circuit.update",
|
||||
payload: {
|
||||
circuitId: "circuit-1",
|
||||
changes: [
|
||||
{ field: "displayName", value: "A" },
|
||||
{ field: "displayName", value: "B" },
|
||||
],
|
||||
},
|
||||
}),
|
||||
/duplicate field/
|
||||
);
|
||||
assert.throws(
|
||||
() =>
|
||||
createCircuitUpdateProjectCommand("circuit-1", {
|
||||
voltage: 0,
|
||||
}),
|
||||
/outside its allowed range/
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user