import { describe, expect, it } from "vitest"; import { buildAttribution } from "../src/ui/hud.js"; // Die Namensnennung ist Pflicht (CC BY, s. task-11-brief.md), keine Kosmetik — deshalb wird // die Textzusammensetzung hier ohne Browser geprüft statt nur im laufenden HUD betrachtet. describe("buildAttribution", () => { const manifest = { attribution: "Kartenkacheln: GTA VI Map (CC BY 4.0) — https://map.gtadb.org, YANIS v15. " + "Wahrzeichen: rolux/gtamaplib-vc (Unlicense).", }; it("behält den Manifest-Text wörtlich bei", () => { expect(buildAttribution(manifest)).toContain(manifest.attribution); }); it("ergänzt alle vier Modellquellen mit ihrer jeweiligen Lizenz", () => { const text = buildAttribution(manifest); expect(text).toContain("Boris731"); expect(text).toContain("Poly Haven"); expect(text).toContain("Nobiax"); expect(text).toContain("Quaternius"); expect(text).toMatch(/Boris731[^.]*CC BY/); expect(text).toMatch(/Poly Haven[^.]*CC0/); expect(text).toMatch(/Nobiax[^.]*CC0/); expect(text).toMatch(/Quaternius[^.]*CC0/); }); // Himmel und Umgebungslicht kommen aus dem HDRI "Nowhere Road" (src/world/sky.js) — eine Quelle // mehr, die wie die Texturen mit Herkunft und Lizenz im selben Satz stehen soll. it("nennt das HDRI mit Poly Haven und CC0", () => { expect(buildAttribution(manifest)).toMatch(/HDRI[^.]*Poly Haven[^.]*CC0/); }); // Ruling (task-11-brief.md): keine Lizenz kürzen, keine zwei Lizenzen in einer Zeile // vermischen, kein CC0 für etwas behaupten, das CC BY ist — der SUV-Satz muss darum // isoliert bleiben und darf nicht in denselben Satz wie ein CC0-Eintrag rutschen. it("vermischt die SUV-Lizenz (CC BY) nicht mit einer CC0-Angabe im selben Satz", () => { const text = buildAttribution(manifest); const suvSentence = text.split(".").find((s) => s.includes("Boris731")); expect(suvSentence).toBeTruthy(); expect(suvSentence).not.toContain("CC0"); }); });