Files
ScarriffleandClaude Opus 5 5a0f2bf07f Eine Prüfung dafür, dass eine Datei auch ein Bild sein darf
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>
2026-10-12 20:28:14 +02:00

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