meta {
  name: GET item definitions
  type: http
  seq: 1
}

get {
  url: {{baseUrl}}/game/world/item-definitions
  body: none
  auth: none
}

tests {
  test("returns 200 JSON with schema v1 and items array", function () {
    expect(res.getStatus()).to.equal(200);
    expect(res.getHeader("content-type")).to.contain("application/json");
    const body = res.getBody();
    expect(body.schemaVersion).to.equal(1);
    expect(body.items).to.be.an("array");
    expect(body.items.length).to.equal(6);
  });

  test("items are ascending by id (ordinal)", function () {
    const body = res.getBody();
    const ids = body.items.map((x) => x.id);
    // Match server StringComparer.Ordinal (prototype ids are ASCII snake_case).
    const sorted = [...ids].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
    expect(ids).to.eql(sorted);
  });

  test("frozen prototype six matches registry id order", function () {
    const body = res.getBody();
    const ids = body.items.map((x) => x.id);
    expect(ids).to.eql([
      "contract_handoff_token",
      "field_stim_mk0",
      "prototype_armor_shell",
      "refined_plate_stock",
      "scrap_metal_bulk",
      "survey_drone_kit",
    ]);
  });

  test("frozen prototype six is present", function () {
    const body = res.getBody();
    const ids = new Set(body.items.map((x) => x.id));
    expect(ids.has("scrap_metal_bulk")).to.equal(true);
    expect(ids.has("refined_plate_stock")).to.equal(true);
    expect(ids.has("field_stim_mk0")).to.equal(true);
    expect(ids.has("survey_drone_kit")).to.equal(true);
    expect(ids.has("contract_handoff_token")).to.equal(true);
    expect(ids.has("prototype_armor_shell")).to.equal(true);
  });

  test("scrap_metal_bulk row matches catalog", function () {
    const body = res.getBody();
    const row = body.items.find((x) => x.id === "scrap_metal_bulk");
    expect(row).to.be.an("object");
    expect(row.displayName).to.equal("Scrap Metal (Bulk)");
    expect(row.prototypeRole).to.equal("material");
    expect(row.stackMax).to.equal(999);
    expect(row.inventorySlotKind).to.equal("bag");
  });
}
