import { describe, expect, it } from "vitest";
import { validateNormalized } from "../src/services/schemaValidator";
import { normalizedFixture, normalizedFixtureV2, normalizedFixtureV2_0_1, normalizedFixtureV2_0_2 } from "./fixtures";

describe("schemaValidator", () => {
  it("passes valid normalized payload", () => {
    const result = validateNormalized(normalizedFixture(), "v1");
    expect(result.passed).toBe(true);
    expect(result.errors).toEqual([]);
  });

  it("fails invalid payload", () => {
    const invalid = { ...normalizedFixture(), route_hint: "unknown_route" };
    const result = validateNormalized(invalid, "v1");
    expect(result.passed).toBe(false);
    expect(result.errors.length).toBeGreaterThan(0);
  });

  it("passes valid normalized v2 payload", () => {
    const result = validateNormalized(normalizedFixtureV2(), "v2");
    expect(result.passed).toBe(true);
    expect(result.errors).toEqual([]);
  });

  it("fails invalid v2 payload", () => {
    const invalid = { ...normalizedFixtureV2(), schema_version: "normalized_query_v1" };
    const result = validateNormalized(invalid, "v2");
    expect(result.passed).toBe(false);
    expect(result.errors.length).toBeGreaterThan(0);
  });

  it("passes valid normalized v2.0.1 payload", () => {
    const result = validateNormalized(normalizedFixtureV2_0_1(), "v2_0_1");
    expect(result.passed).toBe(true);
    expect(result.errors).toEqual([]);
  });

  it("passes valid normalized v2.0.2 payload", () => {
    const result = validateNormalized(normalizedFixtureV2_0_2(), "v2_0_2");
    expect(result.passed).toBe(true);
    expect(result.errors).toEqual([]);
  });
});
