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}