krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
main: HutchTests/TicketSavedFilterStoreTests.swift · raw
1import Foundation
2import Testing
3@testable import Hutch
4
5@MainActor
6struct TicketSavedFilterStoreTests {
7
8 @Test
9 func storesCurrentFilterStatePerTracker() {
10 let suiteName = "TicketSavedFilterStoreTests-\(#function)-\(UUID().uuidString)"
11 let defaults = UserDefaults(suiteName: suiteName)!
12 defer { defaults.removePersistentDomain(forName: suiteName) }
13
14 TicketSavedFilterStore.saveCurrentState(
15 TicketListFilterState(status: .all, labelIDs: [4, 1]),
16 for: "tracker-a",
17 defaults: defaults
18 )
19 TicketSavedFilterStore.saveCurrentState(
20 TicketListFilterState(status: .resolved, labelIDs: [9]),
21 for: "tracker-b",
22 defaults: defaults
23 )
24
25 #expect(
26 TicketSavedFilterStore.loadCurrentState(for: "tracker-a", defaults: defaults) ==
27 TicketListFilterState(status: .all, labelIDs: [1, 4])
28 )
29 #expect(
30 TicketSavedFilterStore.loadCurrentState(for: "tracker-b", defaults: defaults) ==
31 TicketListFilterState(status: .resolved, labelIDs: [9])
32 )
33 }
34
35 @Test
36 func savesNamedFiltersPerTrackerAndReplacesDuplicateNames() {
37 let suiteName = "TicketSavedFilterStoreTests-\(#function)-\(UUID().uuidString)"
38 let defaults = UserDefaults(suiteName: suiteName)!
39 defer { defaults.removePersistentDomain(forName: suiteName) }
40
41 _ = TicketSavedFilterStore.saveFilter(
42 named: "Bugs",
43 state: TicketListFilterState(status: .open, labelIDs: [1]),
44 for: "tracker-a",
45 defaults: defaults,
46 now: Date(timeIntervalSince1970: 100)
47 )
48 _ = TicketSavedFilterStore.saveFilter(
49 named: "bugs",
50 state: TicketListFilterState(status: .resolved, labelIDs: [2]),
51 for: "tracker-a",
52 defaults: defaults,
53 now: Date(timeIntervalSince1970: 200)
54 )
55 _ = TicketSavedFilterStore.saveFilter(
56 named: "Needs Info",
57 state: TicketListFilterState(status: .all, labelIDs: [3]),
58 for: "tracker-b",
59 defaults: defaults,
60 now: Date(timeIntervalSince1970: 300)
61 )
62
63 let trackerAFilters = TicketSavedFilterStore.loadSavedFilters(for: "tracker-a", defaults: defaults)
64 let trackerBFilters = TicketSavedFilterStore.loadSavedFilters(for: "tracker-b", defaults: defaults)
65
66 #expect(trackerAFilters.count == 1)
67 #expect(trackerAFilters.first?.name == "bugs")
68 #expect(trackerAFilters.first?.state == TicketListFilterState(status: .resolved, labelIDs: [2]))
69 #expect(trackerBFilters.map(\.name) == ["Needs Info"])
70 }
71
72 @Test
73 func deletesSavedFilter() {
74 let suiteName = "TicketSavedFilterStoreTests-\(#function)-\(UUID().uuidString)"
75 let defaults = UserDefaults(suiteName: suiteName)!
76 defer { defaults.removePersistentDomain(forName: suiteName) }
77
78 let savedFilter = TicketSavedFilterStore.saveFilter(
79 named: "Bugs",
80 state: TicketListFilterState(status: .open, labelIDs: [1]),
81 for: "tracker-a",
82 defaults: defaults
83 )
84
85 TicketSavedFilterStore.deleteFilter(id: savedFilter!.id, for: "tracker-a", defaults: defaults)
86
87 #expect(TicketSavedFilterStore.loadSavedFilters(for: "tracker-a", defaults: defaults).isEmpty)
88 }
89}