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