krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
main: HutchTests/LookupHistoryStoreTests.swift · raw
1import Foundation
2import Testing
3@testable import Hutch
4
5@MainActor
6struct LookupHistoryStoreTests {
7
8 @Test
9 func recordsMostRecentUniqueSearchFirst() {
10 let suiteName = "LookupHistoryStoreTests-\(UUID().uuidString)"
11 let defaults = UserDefaults(suiteName: suiteName)!
12 defer { defaults.removePersistentDomain(forName: suiteName) }
13
14 LookupHistoryStore.record(
15 type: .user,
16 query: "~alice",
17 defaults: defaults,
18 now: Date(timeIntervalSince1970: 100)
19 )
20 LookupHistoryStore.record(
21 type: .gitRepo,
22 query: "~alice/hutch",
23 defaults: defaults,
24 now: Date(timeIntervalSince1970: 200)
25 )
26 LookupHistoryStore.record(
27 type: .user,
28 query: "~alice",
29 defaults: defaults,
30 now: Date(timeIntervalSince1970: 300)
31 )
32
33 let history = LookupHistoryStore.load(defaults: defaults)
34
35 #expect(history.count == 2)
36 #expect(history.map(\.type) == [.user, .gitRepo])
37 #expect(history.map(\.query) == ["~alice", "~alice/hutch"])
38 #expect(history.first?.createdAt == Date(timeIntervalSince1970: 300))
39 }
40
41 @Test
42 func trimsHistoryToMaximumSize() {
43 let suiteName = "LookupHistoryStoreTests-\(UUID().uuidString)"
44 let defaults = UserDefaults(suiteName: suiteName)!
45 defer { defaults.removePersistentDomain(forName: suiteName) }
46
47 for index in 0..<25 {
48 LookupHistoryStore.record(
49 type: .buildJob,
50 query: "\(index)",
51 defaults: defaults,
52 now: Date(timeIntervalSince1970: TimeInterval(index))
53 )
54 }
55
56 let history = LookupHistoryStore.load(defaults: defaults)
57
58 #expect(history.count == 20)
59 #expect(history.first?.query == "24")
60 #expect(history.last?.query == "5")
61 }
62
63 @Test
64 func clearsPersistedHistory() {
65 let suiteName = "LookupHistoryStoreTests-\(UUID().uuidString)"
66 let defaults = UserDefaults(suiteName: suiteName)!
67 defer { defaults.removePersistentDomain(forName: suiteName) }
68
69 LookupHistoryStore.record(type: .tracker, query: "~owner/todo", defaults: defaults)
70 #expect(!LookupHistoryStore.load(defaults: defaults).isEmpty)
71
72 LookupHistoryStore.clear(defaults: defaults)
73
74 #expect(LookupHistoryStore.load(defaults: defaults).isEmpty)
75 }
76}