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