mirror of
https://github.com/yattee/yattee.git
synced 2026-02-20 01:39:46 +00:00
Yattee v2 rewrite
This commit is contained in:
149
YatteeTests/InstancesManagerTests.swift
Normal file
149
YatteeTests/InstancesManagerTests.swift
Normal file
@@ -0,0 +1,149 @@
|
||||
//
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user