99 lines
2.5 KiB
TypeScript
99 lines
2.5 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { describe, it } from "node:test";
|
|
import Database from "better-sqlite3";
|
|
|
|
describe("project device canonical-field migration", () => {
|
|
it("preserves canonical values while removing transitional mirror columns", () => {
|
|
const sqlite = new Database(":memory:");
|
|
try {
|
|
sqlite.exec(`
|
|
CREATE TABLE project_devices (
|
|
id text PRIMARY KEY NOT NULL,
|
|
power_per_unit real NOT NULL,
|
|
simultaneity_factor real NOT NULL,
|
|
phase_type text NOT NULL,
|
|
cos_phi real,
|
|
remark text,
|
|
voltage_v real,
|
|
installed_power_per_unit_kw real NOT NULL,
|
|
demand_factor real NOT NULL,
|
|
phase_count integer,
|
|
power_factor real,
|
|
note text
|
|
);
|
|
INSERT INTO project_devices VALUES (
|
|
'device-1',
|
|
0.25,
|
|
0.8,
|
|
'three_phase',
|
|
0.95,
|
|
'Canonical remark',
|
|
400,
|
|
0.25,
|
|
0.8,
|
|
3,
|
|
0.95,
|
|
'Canonical remark'
|
|
);
|
|
`);
|
|
|
|
const migrationSql = fs.readFileSync(
|
|
path.resolve(
|
|
"src",
|
|
"db",
|
|
"migrations",
|
|
"0011_project_device_canonical_fields.sql"
|
|
),
|
|
"utf8"
|
|
);
|
|
for (const statement of migrationSql.split("--> statement-breakpoint")) {
|
|
if (statement.trim()) {
|
|
sqlite.exec(statement);
|
|
}
|
|
}
|
|
|
|
const columns = (
|
|
sqlite.prepare("PRAGMA table_info(project_devices)").all() as Array<{
|
|
name: string;
|
|
}>
|
|
).map((column) => column.name);
|
|
assert.deepEqual(columns, [
|
|
"id",
|
|
"power_per_unit",
|
|
"simultaneity_factor",
|
|
"phase_type",
|
|
"cos_phi",
|
|
"remark",
|
|
"voltage_v",
|
|
]);
|
|
assert.deepEqual(
|
|
sqlite
|
|
.prepare(
|
|
`SELECT
|
|
power_per_unit AS powerPerUnit,
|
|
simultaneity_factor AS simultaneityFactor,
|
|
phase_type AS phaseType,
|
|
cos_phi AS cosPhi,
|
|
remark,
|
|
voltage_v AS voltageV
|
|
FROM project_devices
|
|
WHERE id = ?`
|
|
)
|
|
.get("device-1"),
|
|
{
|
|
powerPerUnit: 0.25,
|
|
simultaneityFactor: 0.8,
|
|
phaseType: "three_phase",
|
|
cosPhi: 0.95,
|
|
remark: "Canonical remark",
|
|
voltageV: 400,
|
|
}
|
|
);
|
|
} finally {
|
|
sqlite.close();
|
|
}
|
|
});
|
|
});
|