import Foundation import Testing @testable import JellyfinKit /// Was aus dem wird, was jemand in das Adressfeld tippt. /// /// Die Reihenfolge ist der Prüfgegenstand, nicht die bloße Menge: probiert /// die App bei einer IP-Adresse zuerst HTTPS, wartet man auf jedem Server /// ohne Zertifikat erst einmal auf eine Zeitüberschreitung. @Suite("Adressen ergänzen") struct AddressTests { @Test("Ein getipptes Schema wird nicht angetastet") func keepsExplicitScheme() { let candidates = JellyfinAddress.candidates(for: "https://medien.example.com/jellyfin") #expect(candidates.map(\.absoluteString) == ["https://medien.example.com/jellyfin"]) } @Test("Nachlaufende Schrägstriche fallen weg") func trimsTrailingSlash() { let candidates = JellyfinAddress.candidates(for: " https://example.com/ ") #expect(candidates.map(\.absoluteString) == ["https://example.com"]) } @Test("Bei einer IP-Adresse zuerst der Standardport, unverschlüsselt") func prefersPlainHTTPForAddresses() { let candidates = JellyfinAddress.candidates(for: "192.168.1.50") #expect(candidates.map(\.absoluteString) == [ "http://192.168.1.50:8096", "http://192.168.1.50", "https://192.168.1.50", ]) } @Test("Bei einem Domänennamen zuerst HTTPS") func prefersHTTPSForDomains() { let candidates = JellyfinAddress.candidates(for: "medien.example.com") #expect(candidates.first?.absoluteString == "https://medien.example.com") #expect(candidates.map(\.absoluteString).contains("http://medien.example.com:8096")) } @Test("Ein genannter Port wird nicht überschrieben") func keepsExplicitPort() { let candidates = JellyfinAddress.candidates(for: "medien.example.com:8920") #expect(candidates.map(\.absoluteString) == [ "http://medien.example.com:8920", "https://medien.example.com:8920", ]) } @Test("Der Standardport landet vor dem Pfad, nicht dahinter") func insertsPortBeforePath() { let candidates = JellyfinAddress.candidates(for: "server.local/jellyfin") #expect(candidates.first?.absoluteString == "http://server.local:8096/jellyfin") } @Test("Leere Eingabe ergibt keine Adresse") func rejectsEmptyInput() { #expect(JellyfinAddress.candidates(for: " ").isEmpty) } }