Files
FEDEO/backend/tests/tenantMergePlan.test.ts

69 lines
2.4 KiB
TypeScript

import assert from "node:assert/strict"
import test from "node:test"
import { buildTenantMergePlan } from "../src/utils/tenantMergePlan"
test("classifies imports, existing rows, conflicts and global id collisions", () => {
const plan = buildTenantMergePlan({
units: [
{ id: 1, name: "Stück", short: "Stk." },
{ id: 2, name: "Monat", short: "Mon." },
{ id: 3, name: "Stunde", short: "Std." },
],
customers: [
{ id: 10, tenant: 42, name: "Neu" },
{ id: 11, tenant: 42, name: "Geändert" },
],
}, {
units: [
{ id: 1, name: "Stück", short: "Stk.", updated_at: "later" },
{ id: 2, name: "Kilometer", short: "km" },
{ id: 9, name: "Stunde", short: "h" },
],
customers: [
{ id: 11, tenant: 42, name: "Zieländerung" },
],
}, {
units: { primaryKey: ["id"] },
customers: { primaryKey: ["id"] },
})
assert.deepEqual(plan.summary, {
import: 1,
existing: 1,
conflict: 2,
id_collision: 1,
})
assert.equal(plan.items.find((item) => item.label === "Monat")?.kind, "id_collision")
assert.equal(plan.items.find((item) => item.label === "Stunde")?.kind, "conflict")
assert.equal(plan.items.find((item) => item.label === "Geändert")?.defaultDecision, "target")
})
test("uses target as the safe default for two-way conflicts", () => {
const plan = buildTenantMergePlan({
accounts: [{ id: 5, accountChart: "skr03", number: "8400", label: "Quelle" }],
}, {
accounts: [{ id: 99, accountChart: "skr03", number: "8400", label: "Ziel" }],
}, {
accounts: { primaryKey: ["id"] },
})
assert.equal(plan.items[0].kind, "conflict")
assert.equal(plan.items[0].targetKey, "id=99")
assert.equal(plan.items[0].defaultDecision, "target")
assert.deepEqual(plan.items[0].differences.sort(), ["id", "label"])
})
test("ignores maintenance locks and audit timestamps during comparison", () => {
const plan = buildTenantMergePlan({
tenants: [{ id: 42, name: "Tenant", locked: null, updatedAt: "before" }],
}, {
tenants: [{ id: 42, name: "Tenant", locked: "maintenance_tenant", updatedAt: "after" }],
}, {
tenants: { primaryKey: ["id"] },
})
assert.equal(plan.items[0].kind, "existing")
})