import { describe, expect, test } from "bun:test";
import { mkdtempSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { loadObservedDeploymentIdentity } from "./deployment-identity";

describe("observed deployment identity", () => {
  test("loads an exact deployment manifest", () => {
    const path = join(mkdtempSync(join(tmpdir(), "deployment-identity-")), "identity.json");
    const identity = { deploymentId: "deploy-1", targetId: "controller", deployedSha: "a".repeat(40), deployedTree: "b".repeat(40), artifactDigest: "c".repeat(64) };
    writeFileSync(path, JSON.stringify(identity));
    expect(loadObservedDeploymentIdentity(path)).toEqual(identity);
  });

  test("fails closed for missing or malformed manifests", () => {
    expect(loadObservedDeploymentIdentity("/missing/deployment-identity.json")).toBeNull();
    const path = join(mkdtempSync(join(tmpdir(), "deployment-identity-")), "identity.json");
    writeFileSync(path, JSON.stringify({ targetId: "controller" }));
    expect(loadObservedDeploymentIdentity(path)).toBeNull();
  });
});
