import { describe, expect, test } from "bun:test";
import {
  checkMcpEndpoint,
  healthUrlForMcpUrl,
  isSecureMcpTransport,
} from "./mcp-readiness.ts";

describe("MCP readiness", () => {
  test("derives health URL from streamable MCP URL", () => {
    expect(
      healthUrlForMcpUrl("https://mcp.example.test/advancedmd/mcp"),
    ).toBe("https://mcp.example.test/advancedmd/health");
  });

  test("requires HTTPS plus bearer token for MCP transport", () => {
    expect(
      isSecureMcpTransport({
        name: "advancedmd",
        mcpUrl: "https://x/advancedmd/mcp",
        bearerToken: "token",
        requiresPhiTransport: true,
      }),
    ).toBe(true);
    expect(
      isSecureMcpTransport({
        name: "advancedmd",
        mcpUrl: "http://x/advancedmd/mcp",
        bearerToken: "token",
        requiresPhiTransport: true,
      }),
    ).toBe(false);
    expect(
      isSecureMcpTransport({
        name: "advancedmd",
        mcpUrl: "https://x/advancedmd/mcp",
        requiresPhiTransport: true,
      }),
    ).toBe(false);
  });

  test("marks endpoint ready only when health and transport pass", async () => {
    const result = await checkMcpEndpoint(
      {
        name: "advancedmd",
        mcpUrl: "https://x/advancedmd/mcp",
        bearerToken: "token",
        requiresPhiTransport: true,
      },
      {
        fetchImpl: (async () =>
          new Response(JSON.stringify({ ok: true }), { status: 200 })) as unknown as typeof fetch,
      },
    );

    expect(result.ok).toBe(true);
    expect(result.healthUrl).toBe("https://x/advancedmd/health");
  });
});
