Files
MikrotikManager/lib/backup-restore-checkpoint.test.ts

16 lines
1.4 KiB
TypeScript

import assert from "node:assert/strict"
import { test } from "node:test"
import { ApiClientError } from "@/shared/api/http-client"
import { backupRestoreStorageKey, readBackupRestoreCheckpoint, restoreWasNotApplied } from "./backup-restore-checkpoint"
test("restore checkpoint preserves target and rejects corrupt or incomplete state", () => {
const target = { backupId: "backup-1", serverId: 1, filename: "config.rsc", serverName: "router", requestedAt: "2026-10-01T00:00:00Z" }
assert.deepEqual(readBackupRestoreCheckpoint(JSON.stringify(target)), target); assert.equal(readBackupRestoreCheckpoint(null), null)
for (const payload of ["invalid JSON", JSON.stringify({}), JSON.stringify({ ...target, serverId: "1" }), JSON.stringify({ ...target, requestedAt: "bad" })]) assert.throws(() => readBackupRestoreCheckpoint(payload))
assert.notEqual(backupRestoreStorageKey("first"), backupRestoreStorageKey("second"))
})
test("unknown response is not proof that import was not applied", () => {
for (const error of [new Error("timeout"), new ApiClientError("old backend error", 400), new ApiClientError("lost after apply", 502, { outcome: "unknown" }), new ApiClientError("server error", 500)]) assert.equal(restoreWasNotApplied(error), false)
assert.equal(restoreWasNotApplied(new ApiClientError("prepare failed", 400, { outcome: "not-applied" })), true)
assert.equal(restoreWasNotApplied(new ApiClientError("forbidden", 403)), true)
})