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) + } +}