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