import Foundation import Testing @testable import PlexKit /// Unter welchen Namen Plex seine Sammlungen ablegt. /// /// Es gibt keinen einheitlichen, und das ist keine Kleinigkeit: Live-TV galt /// als „nicht eingerichtet", weil die Hülle `Dvr` nicht kannte, eine leere /// Liste las und daraus die falsche Schlussfolgerung zog — auf einem Server, /// auf dem ein Empfänger eingerichtet war. @Suite("Sammlungsnamen in der Hülle") struct ContainerKeysTests { @Test("Fernsehempfänger stehen unter Dvr") func readsDvrKey() throws { let json = """ {"MediaContainer":{"size":1,"Dvr":[ {"key":"1","uuid":"abc","lineupTitle":"Kabel","language":"deu"} ]}} """ let container = try PlexResponse.decode( PlexMediaContainer.self, from: Data(json.utf8) ) #expect(container.content.count == 1) #expect(container.content.first?.key == "1") } @Test("Die Anbieterliste steht unter MediaProvider") func readsMediaProviderKey() throws { // Darüber wird die Kennung des Programmführers gefunden. Ohne sie gibt // es kein Programm, auch wenn die Sender da sind. let json = """ {"MediaContainer":{"size":2,"MediaProvider":[ {"identifier":"com.plexapp.plugins.library","title":"Mediathek"}, {"identifier":"tv.plex.providers.epg.cloud:2","title":"Programm"} ]}} """ let container = try PlexResponse.decode( PlexMediaContainer.self, from: Data(json.utf8) ) #expect(container.content.count == 2) #expect(container.content.contains { $0.identifier.contains("epg") }) } @Test("Titel stehen weiterhin unter Metadata") func stillReadsMetadata() throws { let json = #"{"MediaContainer":{"Metadata":[{"ratingKey":"1","type":"movie","title":"Film"}]}}"# let container = try PlexResponse.decode( PlexMediaContainer.self, from: Data(json.utf8) ) #expect(container.content.first?.title == "Film") } @Test("Eine fehlende Sammlung ist kein Fehler") func missingCollectionIsEmpty() throws { // Eine leere Mediathek liefert gar kein Feld. let json = #"{"MediaContainer":{"size":0}}"# let container = try PlexResponse.decode( PlexMediaContainer.self, from: Data(json.utf8) ) #expect(container.content.isEmpty) } @Test("Eine vorhandene, aber kaputte Sammlung meldet den Fehler") func malformedCollectionThrows() { // Der Unterschied, der beim Umbau beinahe verloren ging: aus „ein Feld // heißt jetzt anders" darf nicht „die Mediathek ist leer" werden. let json = #"{"MediaContainer":{"Metadata":[{"title":"ohne ratingKey"}]}}"# #expect(throws: PlexError.self) { try PlexResponse.decode(PlexMediaContainer.self, from: Data(json.utf8)) } } }