// NodegroupTable: the Spec column maps instance types through the pricing
// cache's spec map; unknown types and a missing map fall back to an em
// dash. Fabricated InventoryNodegroup fixtures.

import { describe, expect, it } from "vitest";
import { render, screen } from "@testing-library/react";
import type { InventoryNodegroup } from "@/engine/inventory";
import { NodegroupTable } from "@/components/regions/NodegroupTable";

function ng(overrides: Partial<InventoryNodegroup> = {}): InventoryNodegroup {
  return {
    name: "observability",
    zone: "us-west-2a",
    instanceTypes: ["m6a.xlarge", "r6a.2xlarge"],
    capacityType: "ON_DEMAND",
    count: 3,
    allocatableCpuTotal: 11.5,
    allocatableMemGibTotal: 44,
    singleAz: true,
    ...overrides,
  };
}

describe("NodegroupTable", () => {
  it("renders the spec of every known instance type", () => {
    render(
      <NodegroupTable
        nodegroups={[ng()]}
        specByType={{ "m6a.xlarge": "4c16g", "r6a.2xlarge": "8c64g" }}
      />,
    );
    expect(screen.getByText("4c16g, 8c64g")).toBeTruthy();
  });

  it("falls back to an em dash for unknown types or a missing map", () => {
    const { rerender } = render(
      <NodegroupTable nodegroups={[ng()]} specByType={{ "m6a.xlarge": "4c16g" }} />,
    );
    // Partial knowledge still shows the known spec.
    expect(screen.getByText("4c16g")).toBeTruthy();
    rerender(<NodegroupTable nodegroups={[ng()]} />);
    // No map at all (older run artifacts) — dash.
    expect(screen.getByText("—")).toBeTruthy();
  });
});
