Files
MikrotikManager/lib/certificate-issue-checkpoint.test.ts
T

25 lines
1.6 KiB
TypeScript

import assert from "node:assert/strict"
import { test } from "node:test"
import { createCertificateIssueCheckpoint, readCertificateIssueCheckpoint, certificateIssueStorageKey } from "./certificate-issue-checkpoint"
const id = "11111111-1111-4111-8111-111111111111"
const target = { serverId: "1", certName: "cert", domainNames: ["test.example"] }
test("checkpoint persists ID and immutable target before acceptance", () => {
const value = createCertificateIssueCheckpoint(target, id)
target.domainNames.push("later.example")
assert.deepEqual(value.request.domainNames, ["test.example"])
assert.equal(value.accepted, false); assert.equal(value.job, null)
assert.deepEqual(readCertificateIssueCheckpoint(JSON.stringify(value)), value)
})
test("malformed and foreign restored observations are rejected", () => {
assert.throws(() => readCertificateIssueCheckpoint("bad"))
assert.throws(() => readCertificateIssueCheckpoint("{}"))
const value = createCertificateIssueCheckpoint({ ...target, domainNames: ["test.example"] }, id)
const job = { id, serverId: "2", certName: "cert", domainNames: ["test.example"], status: "done", step: "done", requestedAt: "2026-10-01T00:00:00Z" }
assert.throws(() => readCertificateIssueCheckpoint(JSON.stringify({ ...value, accepted: true, job })))
assert.throws(() => readCertificateIssueCheckpoint(JSON.stringify({ ...value, job: { ...job, serverId: "1" } })))
})
test("storage context is isolated per backend and absent checkpoint stays absent", () => {
assert.notEqual(certificateIssueStorageKey("https://one.example.test"), certificateIssueStorageKey("https://two.example.test"))
assert.equal(readCertificateIssueCheckpoint(null), null)
})