25 lines
1.6 KiB
TypeScript
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)
|
|
})
|