import { describe, it, expect } from "vitest"
import { cn, formatPrice, slugify } from "./utils"

describe("cn", () => {
  it("concatène des classes", () => {
    expect(cn("a", "b")).toBe("a b")
  })

  it("ignore les valeurs falsy", () => {
    expect(cn("a", false, null, undefined, "b")).toBe("a b")
  })

  it("résout les conflits Tailwind (dernière classe gagne)", () => {
    expect(cn("p-2", "p-4")).toBe("p-4")
  })
})

describe("formatPrice", () => {
  it("convertit les centimes en euros", () => {
    const out = formatPrice(24900)
    expect(out).toContain("249")
    expect(out).toContain("€")
  })

  it("gère les centimes non ronds", () => {
    const out = formatPrice(5999)
    expect(out).toContain("59")
    expect(out).toContain("99")
  })

  it("gère zéro", () => {
    expect(formatPrice(0)).toContain("0")
  })

  it("accepte une autre devise", () => {
    const out = formatPrice(1000, "USD")
    expect(out).toContain("10")
  })
})

describe("slugify", () => {
  it("met en minuscules et remplace les espaces", () => {
    expect(slugify("Hoodie Tech")).toBe("hoodie-tech")
  })

  it("retire les accents", () => {
    expect(slugify("Combinaison Néoprène")).toBe("combinaison-neoprene")
  })

  it("retire les caractères spéciaux", () => {
    expect(slugify("Sac à Dos / Tech!")).toBe("sac-a-dos-tech")
  })

  it("ne laisse pas de tiret en début ou fin", () => {
    expect(slugify("  Banane  ")).toBe("banane")
  })

  it("fusionne les séparateurs multiples", () => {
    expect(slugify("a---b   c")).toBe("a-b-c")
  })
})
