// // FeedSubscriptionTests.swift // RSSuperTests // // Created by Mike Freno on 3/29/26. // import XCTest @testable import RSSuper final class FeedSubscriptionTests: XCTestCase { func testFeedSubscriptionEncodingDecoding() throws { let subscription = FeedSubscription( id: "sub-123", url: "https://example.com/feed.xml", title: "Example Feed", category: "Tech", enabled: true, fetchInterval: 120, createdAt: Date(timeIntervalSince1970: 1609459200), updatedAt: Date(timeIntervalSince1970: 1609545600), lastFetchedAt: Date(timeIntervalSince1970: 1609632000), nextFetchAt: Date(timeIntervalSince1970: 1609718400), error: nil, httpAuth: HttpAuth(username: "user", password: "pass") ) let data = try JSONEncoder().encode(subscription) let decoded = try JSONDecoder().decode(FeedSubscription.self, from: data) XCTAssertEqual(decoded.id, subscription.id) XCTAssertEqual(decoded.url, subscription.url) XCTAssertEqual(decoded.title, subscription.title) XCTAssertEqual(decoded.category, subscription.category) XCTAssertEqual(decoded.enabled, subscription.enabled) XCTAssertEqual(decoded.fetchInterval, subscription.fetchInterval) XCTAssertEqual(decoded.createdAt, subscription.createdAt) XCTAssertEqual(decoded.updatedAt, subscription.updatedAt) XCTAssertEqual(decoded.lastFetchedAt, subscription.lastFetchedAt) XCTAssertEqual(decoded.nextFetchAt, subscription.nextFetchAt) XCTAssertEqual(decoded.httpAuth?.username, subscription.httpAuth?.username) XCTAssertEqual(decoded.httpAuth?.password, subscription.httpAuth?.password) } func testFeedSubscriptionOptionalProperties() throws { let subscription = FeedSubscription( id: "minimal-sub", url: "https://example.com/minimal.xml", title: "Minimal Feed" ) XCTAssertNil(subscription.category) XCTAssertNil(subscription.lastFetchedAt) XCTAssertNil(subscription.nextFetchAt) XCTAssertNil(subscription.error) XCTAssertNil(subscription.httpAuth) let data = try JSONEncoder().encode(subscription) let decoded = try JSONDecoder().decode(FeedSubscription.self, from: data) XCTAssertEqual(decoded.id, subscription.id) XCTAssertEqual(decoded.enabled, true) XCTAssertEqual(decoded.fetchInterval, 60) } func testFeedSubscriptionEquality() { let sub1 = FeedSubscription( id: "same-id", url: "https://example.com/feed.xml", title: "Same Title" ) let sub2 = FeedSubscription( id: "same-id", url: "https://example.com/feed.xml", title: "Same Title" ) let sub3 = FeedSubscription( id: "different-id", url: "https://example.com/other.xml", title: "Different Title" ) XCTAssertEqual(sub1, sub2) XCTAssertNotEqual(sub1, sub3) } func testHttpAuthEncodingDecoding() throws { let auth = HttpAuth(username: "testuser", password: "testpass") let data = try JSONEncoder().encode(auth) let decoded = try JSONDecoder().decode(HttpAuth.self, from: data) XCTAssertEqual(decoded.username, auth.username) XCTAssertEqual(decoded.password, auth.password) } func testFeedSubscriptionDebugDescription() { let subscription = FeedSubscription( id: "debug-id", url: "https://example.com/debug.xml", title: "Debug Feed", enabled: false, fetchInterval: 30, error: "Connection timeout" ) let debugDesc = subscription.debugDescription XCTAssertTrue(debugDesc.contains("debug-id")) XCTAssertTrue(debugDesc.contains("Debug Feed")) XCTAssertTrue(debugDesc.contains("30min")) XCTAssertTrue(debugDesc.contains("Connection timeout")) } }