38 lines
1.8 KiB
Swift
38 lines
1.8 KiB
Swift
import XCTest
|
|
@testable import TVAnarchyCore
|
|
|
|
final class ContentIDTests: XCTestCase {
|
|
/// The SAME episode in two libraries (different folder/release names, different
|
|
/// rips) normalizes to the SAME canonical id — the basis for cross-library dedup.
|
|
func testSameEpisodeAcrossLibrariesShareCanonicalID() {
|
|
let a = ContentID.canonical(work: "DAN DA DAN", season: 1, episode: 3)
|
|
let b = ContentID.canonical(work: "DANDADAN", season: 1, episode: 3)
|
|
let c = ContentID.canonical(work: "Dan.Da.Dan", season: 1, episode: 3)
|
|
XCTAssertEqual(a, b)
|
|
XCTAssertEqual(b, c)
|
|
XCTAssertEqual(a, "dandadan/s1e3")
|
|
}
|
|
|
|
func testDifferentEpisodesDiffer() {
|
|
XCTAssertNotEqual(ContentID.canonical(work: "Daria", season: 2, episode: 1),
|
|
ContentID.canonical(work: "Daria", season: 3, episode: 1))
|
|
}
|
|
|
|
/// Quality is excluded by default (same content), opt-in to distinguish rips.
|
|
func testQualityIsOptIn() {
|
|
let base = ContentID.canonical(work: "Daria", season: 3, episode: 1)
|
|
XCTAssertEqual(ContentID.withQuality(base, quality: nil), base)
|
|
XCTAssertEqual(ContentID.withQuality(base, quality: "1080p"), "daria/s3e1@1080p")
|
|
XCTAssertNotEqual(ContentID.withQuality(base, quality: "1080p"),
|
|
ContentID.withQuality(base, quality: "720p"))
|
|
}
|
|
|
|
/// The digest is stable, fixed-length, and reveals no title (for k-anonymity
|
|
/// counters / the wire).
|
|
func testDigestStableAndOpaque() {
|
|
let id = ContentID.canonical(work: "Daria", season: 3, episode: 1)
|
|
XCTAssertEqual(ContentID.digest(id), ContentID.digest(id)) // stable
|
|
XCTAssertEqual(ContentID.digest(id).count, 16)
|
|
XCTAssertFalse(ContentID.digest(id).contains("daria")) // opaque
|
|
}
|
|
}
|