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 <noreply@anthropic.com>
53 lines
2.0 KiB
Swift
53 lines
2.0 KiB
Swift
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)
|
|
}
|
|
}
|