Fiel der Server aus, endete der Start bei einem Fehlerbildschirm mit zwei Knöpfen: „Erneut versuchen" und „Abmelden". Beide nützen im Flugzeug nichts — und dahinter lagen die Dateien, die man genau für diesen Fall heruntergeladen hatte. Jetzt geht die App trotzdem auf: Token und Konto liegen auf dem Gerät, die Mediathekenliste auch, und die Startseite kommt neuerdings aus demselben Speicher. Oben die Downloads, darunter der Stand vom letzten Mal, ausgegraut, mit einem Satz, der sagt warum. Die Detailseite nimmt den Titel vom Gerät, wenn der Server schweigt, und der Abspielknopf bleibt an, weil die Datei ja da ist. Und was man offline geschaut hat, zählt: Fortschritt, den der Server nicht annimmt, wird zurückgelegt und nachgereicht, sobald er wieder antwortet. Dafür sagt `reportProgress` jetzt, ob die Meldung ankam. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
66 lines
2.4 KiB
Swift
66 lines
2.4 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import MediaKit
|
|
|
|
@Suite("Die gemerkte Startseite")
|
|
struct LibraryCacheHomeTests {
|
|
private func speicher() -> LibraryCache {
|
|
LibraryCache(root: FileManager.default.temporaryDirectory
|
|
.appending(path: "cache-\(UUID().uuidString)", directoryHint: .isDirectory))
|
|
}
|
|
|
|
private func titel(_ nummer: Int) -> MediaItem {
|
|
MediaItem(id: "t\(nummer)", kind: .movie, title: "Titel \(nummer)", thumb: "/bild/\(nummer)")
|
|
}
|
|
|
|
@Test("Was gespeichert wurde, kommt zurück")
|
|
func hinUndZurueck() async {
|
|
let cache = speicher()
|
|
let reihen = [
|
|
MediaRowGroup(id: "continue", title: "Weiterschauen",
|
|
libraryID: "mediathek", items: [titel(1), titel(2)]),
|
|
MediaRowGroup(id: "latest.1", title: "Neu", moreKey: "/mehr", items: [titel(3)]),
|
|
]
|
|
|
|
await cache.storeHomeRows(reihen, server: "server-a")
|
|
let gemerkt = await cache.homeRows(server: "server-a")
|
|
|
|
#expect(gemerkt?.map(\.id) == ["continue", "latest.1"])
|
|
#expect(gemerkt?.first?.title == "Weiterschauen")
|
|
#expect(gemerkt?.first?.libraryID == "mediathek")
|
|
#expect(gemerkt?.last?.moreKey == "/mehr")
|
|
#expect(gemerkt?.first?.items.map(\.id) == ["t1", "t2"])
|
|
// Ohne den Bildpfad wäre der Abzug wertlos: die Plakate liegen
|
|
// bereits auf der Platte, nur findet sie dann niemand.
|
|
#expect(gemerkt?.first?.items.first?.thumb == "/bild/1")
|
|
}
|
|
|
|
@Test("Ein anderer Server hat seine eigene Startseite")
|
|
func getrenntJeServer() async {
|
|
let cache = speicher()
|
|
await cache.storeHomeRows(
|
|
[MediaRowGroup(id: "continue", title: "Weiterschauen", items: [titel(1)])],
|
|
server: "server-a"
|
|
)
|
|
let fremd = await cache.homeRows(server: "server-b")
|
|
#expect(fremd == nil)
|
|
}
|
|
|
|
@Test("Ohne gespeicherten Stand kommt nichts")
|
|
func nochNichtsDa() async {
|
|
let gemerkt = await speicher().homeRows(server: "server-a")
|
|
#expect(gemerkt == nil)
|
|
}
|
|
|
|
@Test("Lange Reihen werden gekürzt")
|
|
func nichtAlles() async {
|
|
let cache = speicher()
|
|
let lang = (1...80).map(titel)
|
|
await cache.storeHomeRows(
|
|
[MediaRowGroup(id: "latest", title: "Neu", items: lang)], server: "server-a"
|
|
)
|
|
let gemerkt = await cache.homeRows(server: "server-a")
|
|
#expect(gemerkt?.first?.items.count == 20)
|
|
}
|
|
}
|