All first todos completed

This commit is contained in:
2026-05-01 17:58:14 +02:00
parent 65819900b1
commit 18a4fdd893
29 changed files with 1263 additions and 160 deletions
+65
View File
@@ -0,0 +1,65 @@
import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { applyLinkedProjectDeviceValues } from "../src/domain/services/consumer-linking.service.js";
describe("consumer linking service", () => {
it("applies project-device values to linked consumers", () => {
const input = {
projectId: "p1",
projectDeviceId: "d1",
isLinkedToDevice: true,
name: "Alt",
quantity: 1,
installedPowerPerUnitKw: 0.2,
demandFactor: 0.8,
};
const result = applyLinkedProjectDeviceValues(input, {
displayName: "Kaffeemaschine",
category: "Küche",
quantity: 3,
installedPowerPerUnitKw: 1.5,
demandFactor: 0.6,
phaseCount: 3,
powerFactor: 0.9,
note: "aus Vorlage",
});
assert.equal(result.name, "Kaffeemaschine");
assert.equal(result.category, "Küche");
assert.equal(result.quantity, 3);
assert.equal(result.installedPowerPerUnitKw, 1.5);
assert.equal(result.demandFactor, 0.6);
assert.equal(result.phaseCount, 3);
assert.equal(result.powerFactor, 0.9);
assert.equal(result.note, "aus Vorlage");
});
it("keeps values unchanged when entry is not linked", () => {
const input = {
projectId: "p1",
projectDeviceId: "d1",
isLinkedToDevice: false,
name: "Eigener Name",
quantity: 2,
installedPowerPerUnitKw: 0.5,
demandFactor: 1,
};
const result = applyLinkedProjectDeviceValues(input, {
displayName: "Vorlage",
category: "Test",
quantity: 9,
installedPowerPerUnitKw: 9,
demandFactor: 0.2,
phaseCount: 1,
powerFactor: 1,
note: null,
});
assert.equal(result.name, "Eigener Name");
assert.equal(result.quantity, 2);
assert.equal(result.installedPowerPerUnitKw, 0.5);
assert.equal(result.demandFactor, 1);
});
});
+38
View File
@@ -0,0 +1,38 @@
import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { createConsumerSchema } from "../src/shared/validation/consumer.schemas.js";
describe("consumer schema fixed option lists", () => {
it("accepts valid predefined domain values", () => {
const parsed = createConsumerSchema.safeParse({
projectId: "p1",
name: "Test",
quantity: 1,
installedPowerPerUnitKw: 1,
demandFactor: 1,
deviceType: "Beleuchtung",
phaseType: "3-phasig",
tradeOrCostGroup: "KG 440 Starkstromanlagen",
group: "Technik",
protectionType: "LS",
protectionCharacteristic: "C",
cableType: "NYM-J",
cableCrossSection: "2,5 mm²",
});
assert.equal(parsed.success, true);
});
it("rejects unknown domain values", () => {
const parsed = createConsumerSchema.safeParse({
projectId: "p1",
name: "Test",
quantity: 1,
installedPowerPerUnitKw: 1,
demandFactor: 1,
deviceType: "Irgendwas",
});
assert.equal(parsed.success, false);
});
});