43 lines
3.2 KiB
TypeScript
43 lines
3.2 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { describe, it } from "node:test";
|
|
import { projectExternalXlsxReturn } from "../src/external-model/application/external-xlsx-return-projection.js";
|
|
import type { ExternalModelObjectSnapshot } from "../src/external-model/domain/external-model-contracts.js";
|
|
|
|
function object(): ExternalModelObjectSnapshot {
|
|
return {
|
|
id: "object-1", projectId: "project-1", sourceId: "source-1",
|
|
worksharingId: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee-ffffffff", ifcGuid: null,
|
|
deviceTypeId: "type-1", lastSeenImportBatchId: "batch-1", lastAcceptedImportBatchId: "batch-1",
|
|
acceptedSourceValues: { rowNumber: 2, roomNumber: "101", roomName: "Büro", familyAndType: "Steckdose", selectionMarker: "SD", socketCount: 2, sourceRemark: null, circuitCombined: "UV 1-2F1.1", boardName: "UV 1", circuitIdentifier: "-2F1.1", designation: "Steckdose", electricalPowerW: "240", voltageV: 230, currentA: "1,16" },
|
|
planningValues: { displayName: "Steckdose", category: "single_phase", connectionKind: "socket", effectiveQuantity: 2, powerPerUnitW: 120, simultaneityFactor: 1, cosPhi: 0.9, costGroup: null, remark: null },
|
|
overriddenFields: [], externalRoomMappingId: null, distributionBoardId: "board-1", linkedProjectDeviceId: null, circuitDeviceRowId: "row-1", presenceStatus: "present",
|
|
};
|
|
}
|
|
|
|
describe("external XLSX return projection", () => {
|
|
it("projects typed row values and compares normalized imported scalars", () => {
|
|
const result = projectExternalXlsxReturn({ object: object(), circuitMode: "combined", singlePhaseVoltageV: 230, threePhaseVoltageV: 400, row: { rowId: "row-1", displayName: "Steckdose", powerPerUnitKw: 0.12, cosPhi: 0.9, phaseType: "single_phase", category: "single_phase", circuitIdentifier: "-2F1.1", circuitVoltageV: 230, distributionBoardName: "UV 1" } });
|
|
assert.deepEqual(result.values, { circuitCombined: "UV 1-2F1.1", designation: "Steckdose", electricalPowerW: 240, voltageV: 230, currentA: 1.16 });
|
|
assert.equal(result.differsFromImported, false);
|
|
assert.deepEqual(result.warnings, []);
|
|
});
|
|
|
|
it("uses object planning without a row and leaves an uncomputable current empty", () => {
|
|
const input = object(); input.circuitDeviceRowId = null; input.planningValues.cosPhi = null;
|
|
const result = projectExternalXlsxReturn({ object: input, row: null, circuitMode: "separate", singlePhaseVoltageV: 230, threePhaseVoltageV: 400 });
|
|
assert.equal(result.values.boardName, "");
|
|
assert.equal(result.values.circuitIdentifier, "");
|
|
assert.equal(result.values.electricalPowerW, 240);
|
|
assert.equal(result.values.currentA, null);
|
|
assert.equal(result.differsFromImported, true);
|
|
assert.match(result.warnings.join(" "), /Stromstärke/);
|
|
});
|
|
|
|
it("uses three-phase current and object-specific effective quantity", () => {
|
|
const input = object(); input.planningValues.category = "three_phase"; input.planningValues.effectiveQuantity = 3;
|
|
const result = projectExternalXlsxReturn({ object: input, row: null, circuitMode: "combined", singlePhaseVoltageV: 230, threePhaseVoltageV: 400 });
|
|
assert.equal(result.values.electricalPowerW, 360);
|
|
assert.equal(result.values.voltageV, 400);
|
|
assert.equal(result.values.currentA, 0.58);
|
|
});
|
|
});
|