Surface the existing pin (keep-from-cull) and per-file delete actions as visible inline buttons on each offline cache row instead of context-menu-only: a star toggles protection from auto-cull (and restore-if-missing), a trash culls that file early. Aligns wording/icons to the star metaphor. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
No EOL
1.4 KiB
Swift
30 lines
No EOL
1.4 KiB
Swift
import XCTest
|
|
@testable import TVAnarchyCore
|
|
|
|
final class LibraryIngestTests: XCTestCase {
|
|
func testMergeIngestUnionsEpisodesByRootDir() {
|
|
let existing = [CachedShow(
|
|
name: "Broad City", rootDir: "/bigdisk/_/media/tv/Broad City", category: "tv",
|
|
episodes: [CachedEpisode(path: "/bigdisk/_/media/tv/Broad City/S05E01.mp4", season: 5, episode: 1, label: "S05E01")]
|
|
)]
|
|
let incoming = [CachedShow(
|
|
name: "Broad City", rootDir: "/bigdisk/_/media/tv/Broad City", category: "tv",
|
|
episodes: [CachedEpisode(path: "/bigdisk/_/media/tv/Broad City/S05E02.mp4", season: 5, episode: 2, label: "S05E02")]
|
|
)]
|
|
let merged = LibraryScanner.mergeIngest(incoming, into: existing)
|
|
XCTAssertEqual(merged.count, 1)
|
|
XCTAssertEqual(merged[0].episodes.map(\.episode).sorted(), [1, 2])
|
|
}
|
|
|
|
func testScanFromIndexParsesFolderLines() {
|
|
let tsv = """
|
|
100\t1700000000.0\t/bigdisk/_/media/tv/Broad City/Broad City S05/Broad City S05E01 Stories.mp4
|
|
200\t1700000001.0\t/bigdisk/_/media/tv/Broad City/Broad City S05/Broad City S05E02 Foo.mp4
|
|
"""
|
|
let shows = LibraryScanner.scanFromIndex(tsv)
|
|
XCTAssertEqual(shows.count, 1)
|
|
XCTAssertEqual(shows[0].name, "Broad City")
|
|
XCTAssertEqual(shows[0].category, "tv")
|
|
XCTAssertEqual(shows[0].episodes.count, 2)
|
|
}
|
|
} |