krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

v2.15.0: 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}