From 5a0f2bf07f085b76bacf9ee32f701a1bd3dc3cab Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Mon, 12 Oct 2026 20:28:14 +0200 Subject: [PATCH] =?UTF-8?q?Eine=20Pr=C3=BCfung=20daf=C3=BCr,=20dass=20eine?= =?UTF-8?q?=20Datei=20auch=20ein=20Bild=20sein=20darf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Lader gab bei jeder `file:`-Adresse `nil` zurück, und nichts hätte das gemeldet. Drei Zeilen Prüfung: ein PNG auf der Platte kommt an, eine fehlende Datei nicht, und Text ist kein Bild. Co-Authored-By: Claude Opus 5 --- .../FlaroDesignTests/ArtworkLoaderTests.swift | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Packages/FlaroKit/Tests/FlaroDesignTests/ArtworkLoaderTests.swift diff --git a/Packages/FlaroKit/Tests/FlaroDesignTests/ArtworkLoaderTests.swift b/Packages/FlaroKit/Tests/FlaroDesignTests/ArtworkLoaderTests.swift new file mode 100644 index 0000000..3ebffb7 --- /dev/null +++ b/Packages/FlaroKit/Tests/FlaroDesignTests/ArtworkLoaderTests.swift @@ -0,0 +1,52 @@ +import Foundation +import Testing +@testable import FlaroDesign + +/// Ein Bild von der Platte muss ankommen. +/// +/// **Der Fehler, für den diese Prüfung steht.** Der Lader verlangte von jeder +/// Antwort eine `HTTPURLResponse` — eine `file:`-Adresse antwortet aber mit +/// einer schlichten `URLResponse`, und die Prüfung gab darauf `nil` zurück. +/// Sichtbar wurde das erst, als die Downloads ihre Plakate mitbrachten: die +/// Dateien lagen da, und die Kacheln blieben trotzdem grau. +@Suite("Bilder von der Platte") +struct ArtworkLoaderTests { + /// Ein gültiges PNG, ein Bildpunkt gross. + private static let winzigesPNG = Data(base64Encoded: """ + iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmM\ + IQAAAABJRU5ErkJggg== + """)! + + private func ablegen(_ daten: Data, als name: String) throws -> URL { + let ziel = FileManager.default.temporaryDirectory + .appending(path: "artwork-\(UUID().uuidString)-\(name)") + try daten.write(to: ziel) + return ziel + } + + @Test("Eine Datei wird gelesen, nicht abgefragt") + func dateiWirdGelesen() async throws { + let datei = try ablegen(Self.winzigesPNG, als: "plakat.bild") + defer { try? FileManager.default.removeItem(at: datei) } + + let bild = await ArtworkLoader.shared.image(for: datei) + #expect(bild != nil) + } + + @Test("Eine Datei, die es nicht gibt, ergibt kein Bild") + func fehlendeDatei() async { + let nirgends = FileManager.default.temporaryDirectory + .appending(path: "gibt-es-nicht-\(UUID().uuidString).bild") + let bild = await ArtworkLoader.shared.image(for: nirgends) + #expect(bild == nil) + } + + @Test("Was keine Bilddaten sind, ergibt kein Bild") + func keinBild() async throws { + let datei = try ablegen(Data("kein Bild, nur Text".utf8), als: "text.bild") + defer { try? FileManager.default.removeItem(at: datei) } + + let bild = await ArtworkLoader.shared.image(for: datei) + #expect(bild == nil) + } +}