Decouple legacy migration service
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { describe, it } from "node:test";
|
||||
import type {
|
||||
LegacyConsumerMigrationDependencies,
|
||||
LegacyMigrationCircuitInput,
|
||||
LegacyMigrationReportInput,
|
||||
} from "../src/domain/ports/legacy-consumer-migration.store.js";
|
||||
import { LegacyConsumerMigrationService } from "../src/domain/services/legacy-consumer-migration.service.js";
|
||||
|
||||
describe("legacy consumer migration service", () => {
|
||||
it("plans the migration through injected readers and persists one complete batch", async () => {
|
||||
let defaultsCreatedFor: string | null = null;
|
||||
let persisted:
|
||||
| {
|
||||
circuitListId: string;
|
||||
circuits: LegacyMigrationCircuitInput[];
|
||||
report: LegacyMigrationReportInput;
|
||||
}
|
||||
| undefined;
|
||||
const dependencies: LegacyConsumerMigrationDependencies = {
|
||||
circuitListReader: {
|
||||
async findById(projectId, circuitListId) {
|
||||
assert.equal(projectId, "project-1");
|
||||
assert.equal(circuitListId, "list-1");
|
||||
return { id: circuitListId };
|
||||
},
|
||||
},
|
||||
sectionStore: {
|
||||
async createDefaults(circuitListId) {
|
||||
defaultsCreatedFor = circuitListId;
|
||||
},
|
||||
async listByCircuitList() {
|
||||
return [
|
||||
{ id: "section-1", key: "single_phase", prefix: "-2F" },
|
||||
{ id: "section-2", key: "unassigned", prefix: "-XF" },
|
||||
];
|
||||
},
|
||||
},
|
||||
circuitReader: {
|
||||
async listByCircuitList() {
|
||||
return [
|
||||
{
|
||||
sectionId: "section-1",
|
||||
equipmentIdentifier: "-2F2",
|
||||
sortOrder: 10,
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
roomReader: {
|
||||
async listByProject() {
|
||||
return [
|
||||
{ id: "room-1", roomNumber: "1.01", roomName: "Besprechung" },
|
||||
];
|
||||
},
|
||||
},
|
||||
migrationStore: {
|
||||
async listSourceConsumersByCircuitList() {
|
||||
return [
|
||||
{
|
||||
id: "consumer-1",
|
||||
projectDeviceId: null,
|
||||
roomId: "room-1",
|
||||
circuitNumber: null,
|
||||
description: "Steckdosen Besprechung",
|
||||
name: "Steckdose",
|
||||
category: null,
|
||||
deviceType: null,
|
||||
phaseType: null,
|
||||
tradeOrCostGroup: "KG 440",
|
||||
protectionType: null,
|
||||
protectionRatedCurrent: null,
|
||||
protectionCharacteristic: null,
|
||||
cableType: null,
|
||||
cableCrossSection: null,
|
||||
comment: null,
|
||||
quantity: 2,
|
||||
installedPowerPerUnitKw: 0.2,
|
||||
demandFactor: 0.8,
|
||||
voltageV: 230,
|
||||
phaseCount: 1,
|
||||
powerFactor: 0.95,
|
||||
note: "Bestand",
|
||||
},
|
||||
];
|
||||
},
|
||||
async listMigratedConsumerIds() {
|
||||
return [];
|
||||
},
|
||||
persistCircuitListMigration(input) {
|
||||
persisted = input;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const report = await new LegacyConsumerMigrationService(
|
||||
dependencies
|
||||
).migrateCircuitList("project-1", "list-1");
|
||||
|
||||
assert.equal(defaultsCreatedFor, "list-1");
|
||||
assert.deepEqual(report.generatedIdentifiers, ["-2F3"]);
|
||||
assert.equal(report.createdCircuitCount, 1);
|
||||
assert.equal(report.createdDeviceRowCount, 1);
|
||||
assert.equal(persisted?.circuitListId, "list-1");
|
||||
assert.equal(persisted?.circuits[0].circuit.sectionId, "section-1");
|
||||
assert.equal(
|
||||
persisted?.circuits[0].circuit.equipmentIdentifier,
|
||||
"-2F3"
|
||||
);
|
||||
assert.deepEqual(persisted?.circuits[0].deviceRows[0], {
|
||||
linkedProjectDeviceId: undefined,
|
||||
legacyConsumerId: "consumer-1",
|
||||
sortOrder: 10,
|
||||
name: "Steckdose",
|
||||
displayName: "Steckdosen Besprechung",
|
||||
phaseType: undefined,
|
||||
connectionKind: undefined,
|
||||
costGroup: "KG 440",
|
||||
category: undefined,
|
||||
roomId: "room-1",
|
||||
roomNumberSnapshot: "1.01",
|
||||
roomNameSnapshot: "Besprechung",
|
||||
quantity: 2,
|
||||
powerPerUnit: 0.2,
|
||||
simultaneityFactor: 0.8,
|
||||
cosPhi: 0.95,
|
||||
remark: "Bestand",
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user