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

import { versionVergleichen } from "./appVersion"

/* Der Vergleich entscheidet, ob die App dem Nutzer sagt „ich bin älter als der
   Server". Beide Fehlrichtungen sind teuer: ein Fehlalarm schickt ihn grundlos
   an Xcode, ein verschluckter Hinweis lässt genau die stille Veraltung zu, die
   die ganze Mechanik verhindern soll. */
describe("versionVergleichen", () => {
  it("meldet Gleichstand bei identischer Version", () => {
    const v = versionVergleichen("2026.08.23.1", "2026.08.23.1")
    expect(v.stand).toBe("gleich")
  })

  it("meldet eine Abweichung, sobald die Zeichenketten sich unterscheiden", () => {
    expect(versionVergleichen("2026.08.23.1", "2026.08.24.1").stand).toBe("abweichend")
    expect(versionVergleichen("2026.08.23.2", "2026.08.23.1").stand).toBe("abweichend")
  })

  it("vergleicht nicht, wenn das Backend nichts meldet", () => {
    // Altes Backend ohne die Versions-Entität, oder offline. Ein Hinweis waere
    // hier geraten, nicht gewusst.
    expect(versionVergleichen("2026.08.23.1", null).stand).toBe("unbekannt")
  })

  it("vergleicht nicht, wenn die App ihre eigene Version nicht kennt", () => {
    expect(versionVergleichen(null, "2026.08.23.1").stand).toBe("unbekannt")
  })

  it("behandelt eine leere Zeichenkette wie fehlend, nicht wie einen Wert", () => {
    expect(versionVergleichen("", "2026.08.23.1").stand).toBe("unbekannt")
    expect(versionVergleichen("2026.08.23.1", "").stand).toBe("unbekannt")
  })

  it("gibt beide Staende zur Anzeige zurueck", () => {
    const v = versionVergleichen("2026.08.23.1", "2026.08.24.1")
    expect(v.app).toBe("2026.08.23.1")
    expect(v.server).toBe("2026.08.24.1")
  })
})
