Create clean release database baseline
This commit is contained in:
@@ -172,18 +172,6 @@ function createTestDatabase(): DatabaseContext {
|
||||
return context;
|
||||
}
|
||||
|
||||
function removeVersionSevenFields(state: Record<string, unknown>) {
|
||||
delete state.distributionBoardComponents;
|
||||
delete state.circuitProtectionDevices;
|
||||
delete state.distributionBoardComponentProtectionDevices;
|
||||
for (const section of state.circuitSections as Array<
|
||||
Record<string, unknown>
|
||||
>) {
|
||||
delete section.category;
|
||||
delete section.groupNumber;
|
||||
}
|
||||
}
|
||||
|
||||
describe("project snapshot repository", () => {
|
||||
it("captures, hashes and lists a complete named logical snapshot", () => {
|
||||
const context = createTestDatabase();
|
||||
@@ -354,41 +342,23 @@ describe("project snapshot repository", () => {
|
||||
) as Record<string, unknown> & {
|
||||
project: Record<string, unknown>;
|
||||
};
|
||||
currentPayload.schemaVersion = 1;
|
||||
removeVersionSevenFields(currentPayload);
|
||||
delete currentPayload.project.internalProjectNumber;
|
||||
delete currentPayload.project.externalProjectNumber;
|
||||
delete currentPayload.project.buildingOwner;
|
||||
delete currentPayload.project.description;
|
||||
delete currentPayload.project.enabledDistributionBoardSupplyTypes;
|
||||
for (const board of currentPayload.distributionBoards as Array<
|
||||
Record<string, unknown>
|
||||
>) {
|
||||
delete board.floorId;
|
||||
delete board.supplyType;
|
||||
delete board.simultaneityFactor;
|
||||
}
|
||||
const legacyPayloadJson = JSON.stringify(currentPayload);
|
||||
currentPayload.schemaVersion = 99;
|
||||
const unsupportedPayloadJson = JSON.stringify(currentPayload);
|
||||
context.db
|
||||
.update(projectSnapshots)
|
||||
.set({
|
||||
schemaVersion: 1,
|
||||
payloadJson: legacyPayloadJson,
|
||||
schemaVersion: 99,
|
||||
payloadJson: unsupportedPayloadJson,
|
||||
payloadSha256: crypto
|
||||
.createHash("sha256")
|
||||
.update(legacyPayloadJson)
|
||||
.update(unsupportedPayloadJson)
|
||||
.digest("hex"),
|
||||
})
|
||||
.where(eq(projectSnapshots.id, snapshot.id))
|
||||
.run();
|
||||
const legacyPrepared = repository.prepareRestore(
|
||||
"project-1",
|
||||
snapshot.id
|
||||
);
|
||||
assert.ok(legacyPrepared);
|
||||
assert.equal(
|
||||
legacyPrepared.command.payload.targetState.project.buildingOwner,
|
||||
null
|
||||
assert.throws(
|
||||
() => repository.prepareRestore("project-1", snapshot.id),
|
||||
/schema version is not supported/
|
||||
);
|
||||
context.db
|
||||
.update(projectSnapshots)
|
||||
@@ -474,10 +444,6 @@ describe("portable project transfer", () => {
|
||||
copied.state.distributionBoards[0].simultaneityFactor,
|
||||
0.65
|
||||
);
|
||||
assert.equal(
|
||||
copied.state.circuits[0].deviceRows[0].legacyConsumerId,
|
||||
null
|
||||
);
|
||||
} finally {
|
||||
context.close();
|
||||
}
|
||||
@@ -512,52 +478,6 @@ describe("portable project transfer", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("imports a checksum-valid version-two project transfer", () => {
|
||||
const context = createTestDatabase();
|
||||
try {
|
||||
const repository = new ProjectTransferRepository(context.db);
|
||||
const current = repository.exportProject("project-1");
|
||||
assert.ok(current);
|
||||
const legacyState = structuredClone(
|
||||
current.projectState
|
||||
) as unknown as Record<string, unknown> & {
|
||||
distributionBoards: Array<Record<string, unknown>>;
|
||||
};
|
||||
legacyState.schemaVersion = 2;
|
||||
removeVersionSevenFields(legacyState);
|
||||
delete (
|
||||
legacyState.project as Record<string, unknown>
|
||||
).enabledDistributionBoardSupplyTypes;
|
||||
for (const board of legacyState.distributionBoards) {
|
||||
delete board.floorId;
|
||||
delete board.supplyType;
|
||||
delete board.simultaneityFactor;
|
||||
}
|
||||
const legacyPayloadJson = JSON.stringify(legacyState);
|
||||
const duplicate = repository.importDuplicate({
|
||||
...current,
|
||||
projectState: legacyState,
|
||||
payloadSha256: crypto
|
||||
.createHash("sha256")
|
||||
.update(legacyPayloadJson)
|
||||
.digest("hex"),
|
||||
});
|
||||
const copied = readProjectStateSnapshot(
|
||||
context.db,
|
||||
duplicate.projectId
|
||||
);
|
||||
assert.ok(copied);
|
||||
assert.equal(copied.state.distributionBoards[0].floorId, null);
|
||||
assert.equal(copied.state.distributionBoards[0].supplyType, null);
|
||||
assert.equal(
|
||||
copied.state.distributionBoards[0].simultaneityFactor,
|
||||
1
|
||||
);
|
||||
} finally {
|
||||
context.close();
|
||||
}
|
||||
});
|
||||
|
||||
it("rolls back a duplicate when a late project-state insert fails", () => {
|
||||
const context = createTestDatabase();
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user