mirror of
https://github.com/yattee/yattee.git
synced 2026-02-19 17:29:45 +00:00
150 lines
4.9 KiB
Swift
150 lines
4.9 KiB
Swift
//
|
|
// InstancesManagerTests.swift
|
|
// YatteeTests
|
|
//
|
|
// Tests for the InstancesManager.
|
|
//
|
|
|
|
import Testing
|
|
import Foundation
|
|
@testable import Yattee
|
|
|
|
// MARK: - Instance Filtering Tests
|
|
|
|
@Suite("Instance Filtering Tests")
|
|
@MainActor
|
|
struct InstanceFilteringTests {
|
|
|
|
@Test("Filter YouTube instances")
|
|
func filterYouTubeInstances() {
|
|
let instances = [
|
|
Instance(type: .invidious, url: URL(string: "https://inv.example.com")!),
|
|
Instance(type: .piped, url: URL(string: "https://piped.example.com")!),
|
|
Instance(type: .peertube, url: URL(string: "https://pt.example.com")!),
|
|
]
|
|
|
|
let youtubeInstances = instances.filter(\.isYouTubeInstance)
|
|
#expect(youtubeInstances.count == 2)
|
|
#expect(youtubeInstances.allSatisfy { $0.type == .invidious || $0.type == .piped })
|
|
}
|
|
|
|
@Test("Filter PeerTube instances")
|
|
func filterPeerTubeInstances() {
|
|
let instances = [
|
|
Instance(type: .invidious, url: URL(string: "https://inv.example.com")!),
|
|
Instance(type: .peertube, url: URL(string: "https://pt1.example.com")!),
|
|
Instance(type: .peertube, url: URL(string: "https://pt2.example.com")!),
|
|
]
|
|
|
|
let peertubeInstances = instances.filter(\.isPeerTubeInstance)
|
|
#expect(peertubeInstances.count == 2)
|
|
#expect(peertubeInstances.allSatisfy { $0.type == .peertube })
|
|
}
|
|
|
|
@Test("Filter enabled instances")
|
|
func filterEnabledInstances() {
|
|
var enabled = Instance(type: .invidious, url: URL(string: "https://enabled.example.com")!)
|
|
enabled.isEnabled = true
|
|
|
|
var disabled = Instance(type: .invidious, url: URL(string: "https://disabled.example.com")!)
|
|
disabled.isEnabled = false
|
|
|
|
let instances = [enabled, disabled]
|
|
let enabledInstances = instances.filter(\.isEnabled)
|
|
|
|
#expect(enabledInstances.count == 1)
|
|
#expect(enabledInstances.first?.url.host == "enabled.example.com")
|
|
}
|
|
}
|
|
|
|
// MARK: - Instance Type Tests
|
|
|
|
@Suite("InstanceType Tests")
|
|
@MainActor
|
|
struct InstanceTypeTests {
|
|
|
|
@Test("InstanceType display names")
|
|
func displayNames() {
|
|
#expect(InstanceType.invidious.displayName == "Invidious")
|
|
#expect(InstanceType.piped.displayName == "Piped")
|
|
#expect(InstanceType.peertube.displayName == "PeerTube")
|
|
}
|
|
|
|
@Test("InstanceType is Codable")
|
|
func codable() throws {
|
|
for type in InstanceType.allCases {
|
|
let encoded = try JSONEncoder().encode(type)
|
|
let decoded = try JSONDecoder().decode(InstanceType.self, from: encoded)
|
|
#expect(type == decoded)
|
|
}
|
|
}
|
|
|
|
@Test("Instance is Codable")
|
|
func instanceCodable() throws {
|
|
let instance = Instance(
|
|
type: .invidious,
|
|
url: URL(string: "https://example.com")!,
|
|
name: "Test Instance"
|
|
)
|
|
|
|
let encoded = try JSONEncoder().encode(instance)
|
|
let decoded = try JSONDecoder().decode(Instance.self, from: encoded)
|
|
|
|
#expect(instance.type == decoded.type)
|
|
#expect(instance.url == decoded.url)
|
|
#expect(instance.name == decoded.name)
|
|
}
|
|
|
|
@Test("Instance array is Codable")
|
|
func instanceArrayCodable() throws {
|
|
let instances = [
|
|
Instance(type: .invidious, url: URL(string: "https://inv.example.com")!),
|
|
Instance(type: .piped, url: URL(string: "https://piped.example.com")!),
|
|
Instance(type: .peertube, url: URL(string: "https://pt.example.com")!, name: "My PeerTube"),
|
|
]
|
|
|
|
let encoded = try JSONEncoder().encode(instances)
|
|
let decoded = try JSONDecoder().decode([Instance].self, from: encoded)
|
|
|
|
#expect(decoded.count == 3)
|
|
#expect(decoded[0].type == .invidious)
|
|
#expect(decoded[1].type == .piped)
|
|
#expect(decoded[2].name == "My PeerTube")
|
|
}
|
|
}
|
|
|
|
// MARK: - Instance Identity Tests
|
|
|
|
@Suite("Instance Identity Tests")
|
|
@MainActor
|
|
struct InstanceIdentityTests {
|
|
|
|
@Test("Instances with same UUID are equal")
|
|
func sameUUIDEqual() {
|
|
let sharedID = UUID()
|
|
let url = URL(string: "https://example.com")!
|
|
let instance1 = Instance(id: sharedID, type: .invidious, url: url)
|
|
let instance2 = Instance(id: sharedID, type: .invidious, url: url)
|
|
|
|
#expect(instance1.id == instance2.id)
|
|
}
|
|
|
|
@Test("New instances have unique IDs")
|
|
func newInstancesHaveUniqueIDs() {
|
|
let instance1 = Instance(type: .invidious, url: URL(string: "https://example.com")!)
|
|
let instance2 = Instance(type: .invidious, url: URL(string: "https://example.com")!)
|
|
|
|
// Each new instance gets a unique UUID
|
|
#expect(instance1.id != instance2.id)
|
|
}
|
|
|
|
@Test("Instance ID is stable across name changes")
|
|
func idStableAcrossNameChanges() {
|
|
var instance = Instance(type: .invidious, url: URL(string: "https://example.com")!)
|
|
let originalID = instance.id
|
|
|
|
instance.name = "New Name"
|
|
#expect(instance.id == originalID)
|
|
}
|
|
}
|