import assert from "node:assert/strict"; import test from "node:test"; import { decideDevTemplateJobReplacement, resolveApplySourceCommit } from "./dev-deploy-apply.mjs"; test("allowlisted suspended template Job image change plans replacement", () => { const decision = decideDevTemplateJobReplacement({ jobName: "hwlab-agent-worker-template", jobNamespace: "hwlab-dev", desiredSuspended: true, liveExists: true, liveSuspended: true, oldImages: [ { name: "hwlab-agent-worker", serviceId: "hwlab-agent-worker", image: "127.0.0.1:5000/hwlab/hwlab-agent-worker:old1234" } ], newImages: [ { name: "hwlab-agent-worker", serviceId: "hwlab-agent-worker", image: "127.0.0.1:5000/hwlab/hwlab-agent-worker:new5678" } ] }); assert.equal(decision.replace, true); assert.equal(decision.result, "planned"); assert.equal(decision.namespace, "hwlab-dev"); assert.equal(decision.jobName, "hwlab-agent-worker-template"); assert.equal(decision.oldImage, "127.0.0.1:5000/hwlab/hwlab-agent-worker:old1234"); assert.equal(decision.newImage, "127.0.0.1:5000/hwlab/hwlab-agent-worker:new5678"); }); test("matching allowlisted suspended template Job image does not replace", () => { const image = "127.0.0.1:5000/hwlab/hwlab-cli:73b379f"; const decision = decideDevTemplateJobReplacement({ jobName: "hwlab-cli-template", jobNamespace: "hwlab-dev", desiredSuspended: true, liveExists: true, liveSuspended: true, oldImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image }], newImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image }] }); assert.equal(decision.replace, false); assert.equal(decision.result, "not_needed"); }); test("replacement policy refuses non-allowlisted or active Jobs", () => { const ignored = decideDevTemplateJobReplacement({ jobName: "some-other-job", jobNamespace: "hwlab-dev", desiredSuspended: true, liveExists: true, liveSuspended: true, oldImages: [{ name: "worker", serviceId: "worker", image: "image:old" }], newImages: [{ name: "worker", serviceId: "worker", image: "image:new" }] }); assert.equal(ignored.replace, false); assert.equal(ignored.result, "ignored"); const active = decideDevTemplateJobReplacement({ jobName: "hwlab-cli-template", jobNamespace: "hwlab-dev", desiredSuspended: true, liveExists: true, liveSuspended: false, oldImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image: "image:old" }], newImages: [{ name: "hwlab-cli", serviceId: "hwlab-cli", image: "image:new" }] }); assert.equal(active.replace, false); assert.equal(active.result, "blocked"); }); test("apply source commit follows deploy/catalog artifact identity", () => { assert.equal( resolveApplySourceCommit({ commitId: "73b379f" }, { commitId: "73b379f" }, "cb35ada68606"), "73b379f" ); assert.equal( resolveApplySourceCommit({ commitId: "73b379f" }, { commitId: "deadbee" }, "cb35ada68606"), "cb35ada68606" ); });