// // SearchFiltersTests.swift // RSSuperTests // // Created by Mike Freno on 3/29/26. // import XCTest @testable import RSSuper final class SearchFiltersTests: XCTestCase { func testSearchFiltersEncodingDecoding() throws { let filters = SearchFilters( dateFrom: Date(timeIntervalSince1970: 1609459200), dateTo: Date(timeIntervalSince1970: 1609545600), feedIds: ["feed-1", "feed-2"], authors: ["Author 1", "Author 2"], contentType: .audio ) let data = try JSONEncoder().encode(filters) let decoded = try JSONDecoder().decode(SearchFilters.self, from: data) XCTAssertEqual(decoded.dateFrom, filters.dateFrom) XCTAssertEqual(decoded.dateTo, filters.dateTo) XCTAssertEqual(decoded.feedIds, filters.feedIds) XCTAssertEqual(decoded.authors, filters.authors) XCTAssertEqual(decoded.contentType, filters.contentType) } func testSearchFiltersEmpty() throws { let filters = SearchFilters() XCTAssertNil(filters.dateFrom) XCTAssertNil(filters.dateTo) XCTAssertNil(filters.feedIds) XCTAssertNil(filters.authors) XCTAssertNil(filters.contentType) let data = try JSONEncoder().encode(filters) let decoded = try JSONDecoder().decode(SearchFilters.self, from: data) XCTAssertNil(decoded.dateFrom) XCTAssertNil(decoded.feedIds) } func testSearchFiltersEquality() { let filters1 = SearchFilters( feedIds: ["feed-1"], authors: ["Author 1"] ) let filters2 = SearchFilters( feedIds: ["feed-1"], authors: ["Author 1"] ) let filters3 = SearchFilters( feedIds: ["feed-2"], authors: ["Author 2"] ) XCTAssertEqual(filters1, filters2) XCTAssertNotEqual(filters1, filters3) } func testSearchSortOptionLocalizedDescription() { XCTAssertEqual(SearchSortOption.relevance.localizedDescription, "Relevance") XCTAssertEqual(SearchSortOption.dateDesc.localizedDescription, "Date (Newest First)") XCTAssertEqual(SearchSortOption.dateAsc.localizedDescription, "Date (Oldest First)") XCTAssertEqual(SearchSortOption.titleAsc.localizedDescription, "Title (A-Z)") XCTAssertEqual(SearchSortOption.titleDesc.localizedDescription, "Title (Z-A)") XCTAssertEqual(SearchSortOption.feedAsc.localizedDescription, "Feed (A-Z)") XCTAssertEqual(SearchSortOption.feedDesc.localizedDescription, "Feed (Z-A)") } func testContentTypeLocalizedDescription() { XCTAssertEqual(ContentType.article.localizedDescription, "Article") XCTAssertEqual(ContentType.audio.localizedDescription, "Audio") XCTAssertEqual(ContentType.video.localizedDescription, "Video") } func testSearchFiltersDebugDescription() { let filters = SearchFilters( dateFrom: Date(timeIntervalSince1970: 1609459200), feedIds: ["feed-1", "feed-2"], contentType: .video ) let debugDesc = filters.debugDescription XCTAssertTrue(debugDesc.contains("feed-1")) XCTAssertTrue(debugDesc.contains("feed-2")) XCTAssertTrue(debugDesc.contains("Video")) } }