import { describe, expect, it } from "vitest";

import apiContract from "../api_contract.json";
import { ApiPath } from "../api_path";

describe("ApiPath contract source", () => {
  it("uses the shared contract path for every static operation", () => {
    const staticOperations = Object.entries(apiContract).filter(
      ([, operation]) => !operation.path.includes("{"),
    );

    for (const [operationId, operation] of staticOperations) {
      expect(ApiPath[operationId as keyof typeof ApiPath]).toBe(
        operation.path,
      );
    }
  });

  it("fills and encodes the private album path parameter", () => {
    expect(ApiPath.privateZoneAlbumUnlock("album/id 1")).toBe(
      "/api/private-zone/albums/album%2Fid%201/unlock",
    );
  });

  it("fills and encodes the commercial offer path parameter", () => {
    expect(ApiPath.paymentCommercialOfferAccept("offer/id 1")).toBe(
      "/api/payment/commercial-offers/offer%2Fid%201/accept",
    );
  });
});
