import { describe, it } from "node:test";
import assert from "node:assert/strict";
import http from "node:http";

describe("api health contract", () => {
  it("returns ok for liveness-style health response", async () => {
    const server = http.createServer((req, res) => {
      if (req.url === "/api/v1/health/live") {
        res.writeHead(200, { "Content-Type": "application/json" });
        res.end(
          JSON.stringify({
            status: "ok",
            service: "api",
            timestamp: new Date().toISOString(),
          }),
        );
        return;
      }
      res.writeHead(404);
      res.end();
    });

    await new Promise((resolve) => server.listen(0, resolve));
    const addr = server.address();
    assert.ok(addr && typeof addr === "object");
    const port = addr.port;

    const response = await fetch(`http://127.0.0.1:${port}/api/v1/health/live`);
    assert.equal(response.status, 200);
    const body = await response.json();
    assert.equal(body.status, "ok");
    assert.equal(body.service, "api");

    await new Promise((resolve, reject) =>
      server.close((err) => (err ? reject(err) : resolve())),
    );
  });
});
