import { flugplanZeit, gbText, laufzeit, seit, vor } from "./zeit" import { rolleVon, temperaturFarbe, versionen } from "./anzeige" import type { Modell } from "./typen" // Fester Bezugspunkt: Mittwoch, 23.09.2026, 20:45 Uhr Berliner Zeit. const JETZT = new Date("2026-09-23T20:45:00+02:00") describe("flugplanZeit", () => { it("benennt heute, gestern und morgen", () => { expect(flugplanZeit("2026-09-23T03:00:00+02:00", JETZT)).toBe("HEUTE 03:00") expect(flugplanZeit("2026-09-22T23:10:00+02:00", JETZT)).toBe("GESTERN 23:10") expect(flugplanZeit("2026-09-24T03:00:00+02:00", JETZT)).toBe("MORGEN 03:00") }) it("nimmt für die nächsten Tage den Wochentag", () => { expect(flugplanZeit("2026-09-27T04:30:00+02:00", JETZT)).toBe("SO 04:30") }) it("rechnet UTC-Zeiten in Berliner Zeit um", () => { expect(flugplanZeit("2026-09-23T05:00:00Z", JETZT)).toBe("HEUTE 07:00") }) }) describe("kleine Helfer", () => { it("seit und vor", () => { expect(seit(new Date("2026-09-07T11:03:00+02:00").getTime() / 1000, JETZT)).toBe("seit 07.09., 11:03") expect(vor(JETZT.getTime() / 1000 - 40, JETZT.getTime())).toBe("vor 40 s") expect(vor(JETZT.getTime() / 1000 - 2 * 86_400, JETZT.getTime())).toBe("vor 2 Tagen") }) it("laufzeit und gbText", () => { expect(laufzeit(10 * 86_400 + 14 * 3600 + 59)).toEqual([10, 14]) expect(gbText(55 * 1024 ** 3)).toBe("55 GB") expect(gbText(1.9 * 1024 ** 4, 1)).toBe("1,9 TB") }) it("Temperaturfarbe wechselt bei 70 und 85 Grad", () => { expect(temperaturFarbe(37)).toBe("var(--gruen)") expect(temperaturFarbe(70)).toBe("var(--bernstein)") expect(temperaturFarbe(85)).toBe("var(--rot)") }) }) describe("versionen", () => { it("zeigt Motor-Builds mit b und nur echte Neuerungen", () => { expect(versionen("engine", { kind: "engine", installed_build: 11057, latest_build: 11139 })).toEqual({ laeuft: "b11057", neu: "b11139" }) expect(versionen("engine", { kind: "engine", installed_build: 11139, latest_build: 11139 })).toEqual({ laeuft: "b11139", neu: null }) }) it("zählt beim Betriebssystem die Pakete", () => { expect(versionen("os", { kind: "os", count: 24 })).toEqual({ laeuft: "Ubuntu", neu: "24 Pakete" }) }) it("zeigt bei Hermes die Version und die Zahl der Änderungen", () => { expect(versionen("hermes", { kind: "hermes", installed_version: "0.21.3", behind: 2523 })) .toEqual({ laeuft: "v0.21.3", neu: "+2.523 Änderungen" }) expect(versionen("hermes", { kind: "hermes", behind: 0 })).toEqual({ laeuft: "–", neu: null }) }) }) describe("rolleVon", () => { const m = (aliases: string[]): Modell => ({ name: "x", role: null, aliases, ctx: null, ttl: null, filename: "", quant: "", size_bytes: null, spec_active: false, parallel_slots: 1, }) it("erkennt Hirn und Coder an den Aliasen", () => { expect(rolleVon(m(["hermes", "fast"]))).toBe("hirn") expect(rolleVon(m(["coder", "heavy"]))).toBe("coder") expect(rolleVon(m(["debugger"]))).toBeNull() }) })