import XCTest @testable import iPX final class CarTests: XCTestCase { private func episode(_ json: String) throws -> CarEpisode { try JSONDecoder().decode(CarEpisode.self, from: Data(json.utf8)) } func testAnItemReadsAsTheAPISendsIt() throws { let e = try episode(""" {"guid":"g","feed_id":"f","title":null,"link":null,"image":null,"duration":1800,"position":600, "read":false,"flagged":false,"enclosures":[ {"id":7,"feed_id":"f","guid":"g","url":"https://x/v.mp4","mime":"video/mp4","state":"done"}, {"id":8,"feed_id":"f","guid":"g","url":"https://x/Show%20Ep%201.mp3","mime":"audio/mpeg","state":"done"}]} """) XCTAssertEqual(e.audio?.id, 8, "a video is passed over for the sound") XCTAssertEqual(e.name, "Show Ep 1", "untitled is named by its file") XCTAssertEqual(e.left, "20 min left") } func testNothingToPlayIsNotListed() throws { let e = try episode(#"{"guid":"g","feed_id":"f","title":"A post","position":0,"enclosures":[]}"#) XCTAssertNil(e.audio) XCTAssertNil(e.left, "not started") XCTAssertNil(e.item(feedTitle: "F", feedImage: nil, kept: [])) } func testTheFileIsTheOneThePageWouldPlay() { let plain = CarEpisode.Enclosure(id: 4, url: "u", mime: nil, deadair: nil) let trimmed = CarEpisode.Enclosure(id: 5, url: "u", mime: nil, deadair: 90) XCTAssertEqual(CarEpisode.path(of: plain, kept: []), "/media/4") XCTAssertEqual(CarEpisode.path(of: trimmed, kept: []), "/media/5/deadair.m3u8") XCTAssertEqual(CarEpisode.path(of: trimmed, kept: ["/media/5/deadair"]), "/media/5/deadair", "the copy on the phone, connection or not") } }