diff options
| author | Christian Cleberg <[email protected]> | 2026-04-12 21:33:14 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-12 21:33:14 -0500 |
| commit | 31cbca674957eea7ae2529012e20a9d95158e561 (patch) | |
| tree | ea57e5b7faf17b3a3a0967e074960f41d3556393 /HutchTests/TicketSavedFilterStoreTests.swift | |
| parent | 7548bfb595d853c682653c0dc21bb3bf17af80d5 (diff) | |
| download | hutch-31cbca674957eea7ae2529012e20a9d95158e561.tar.gz hutch-31cbca674957eea7ae2529012e20a9d95158e561.tar.bz2 hutch-31cbca674957eea7ae2529012e20a9d95158e561.zip | |
feat: add ticket saved filters and label filtering
Implements: https://todo.sr.ht/~ccleberg/hutch/32
Implements: https://todo.sr.ht/~ccleberg/hutch/33
Diffstat (limited to 'HutchTests/TicketSavedFilterStoreTests.swift')
| -rw-r--r-- | HutchTests/TicketSavedFilterStoreTests.swift | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/HutchTests/TicketSavedFilterStoreTests.swift b/HutchTests/TicketSavedFilterStoreTests.swift new file mode 100644 index 0000000..2ff64e6 --- /dev/null +++ b/HutchTests/TicketSavedFilterStoreTests.swift @@ -0,0 +1,88 @@ +import Foundation +import Testing +@testable import Hutch + +struct TicketSavedFilterStoreTests { + + @Test + func storesCurrentFilterStatePerTracker() { + let suiteName = "TicketSavedFilterStoreTests-\(#function)-\(UUID().uuidString)" + let defaults = UserDefaults(suiteName: suiteName)! + defer { defaults.removePersistentDomain(forName: suiteName) } + + TicketSavedFilterStore.saveCurrentState( + TicketListFilterState(status: .all, labelIDs: [4, 1]), + for: "tracker-a", + defaults: defaults + ) + TicketSavedFilterStore.saveCurrentState( + TicketListFilterState(status: .resolved, labelIDs: [9]), + for: "tracker-b", + defaults: defaults + ) + + #expect( + TicketSavedFilterStore.loadCurrentState(for: "tracker-a", defaults: defaults) == + TicketListFilterState(status: .all, labelIDs: [1, 4]) + ) + #expect( + TicketSavedFilterStore.loadCurrentState(for: "tracker-b", defaults: defaults) == + TicketListFilterState(status: .resolved, labelIDs: [9]) + ) + } + + @Test + func savesNamedFiltersPerTrackerAndReplacesDuplicateNames() { + let suiteName = "TicketSavedFilterStoreTests-\(#function)-\(UUID().uuidString)" + let defaults = UserDefaults(suiteName: suiteName)! + defer { defaults.removePersistentDomain(forName: suiteName) } + + _ = TicketSavedFilterStore.saveFilter( + named: "Bugs", + state: TicketListFilterState(status: .open, labelIDs: [1]), + for: "tracker-a", + defaults: defaults, + now: Date(timeIntervalSince1970: 100) + ) + _ = TicketSavedFilterStore.saveFilter( + named: "bugs", + state: TicketListFilterState(status: .resolved, labelIDs: [2]), + for: "tracker-a", + defaults: defaults, + now: Date(timeIntervalSince1970: 200) + ) + _ = TicketSavedFilterStore.saveFilter( + named: "Needs Info", + state: TicketListFilterState(status: .all, labelIDs: [3]), + for: "tracker-b", + defaults: defaults, + now: Date(timeIntervalSince1970: 300) + ) + + let trackerAFilters = TicketSavedFilterStore.loadSavedFilters(for: "tracker-a", defaults: defaults) + let trackerBFilters = TicketSavedFilterStore.loadSavedFilters(for: "tracker-b", defaults: defaults) + + #expect(trackerAFilters.count == 1) + #expect(trackerAFilters.first?.name == "bugs") + #expect(trackerAFilters.first?.state == TicketListFilterState(status: .resolved, labelIDs: [2])) + #expect(trackerBFilters.map(\.name) == ["Needs Info"]) + } + + @Test + func deletesSavedFilter() { + let suiteName = "TicketSavedFilterStoreTests-\(#function)-\(UUID().uuidString)" + let defaults = UserDefaults(suiteName: suiteName)! + defer { defaults.removePersistentDomain(forName: suiteName) } + + let savedFilter = TicketSavedFilterStore.saveFilter( + named: "Bugs", + state: TicketListFilterState(status: .open, labelIDs: [1]), + for: "tracker-a", + defaults: defaults + ) + + TicketSavedFilterStore.deleteFilter(id: savedFilter!.id, for: "tracker-a", defaults: defaults) + + #expect(TicketSavedFilterStore.loadSavedFilters(for: "tracker-a", defaults: defaults).isEmpty) + } +} |
