krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v3.1.11: HutchTests/SystemStatusWidgetSnapshotTests.swift · raw
1import Foundation
2import Testing
3@testable import Hutch
4
5@MainActor
6struct SystemStatusWidgetSnapshotTests {
7
8 @Test
9 func saveAndLoadRoundTrips() {
10 let defaultsName = "SystemStatusWidgetSnapshotTests-\(UUID().uuidString)"
11 let defaults = UserDefaults(suiteName: defaultsName)!
12 defer { defaults.removePersistentDomain(forName: defaultsName) }
13
14 let snapshot = SystemStatusWidgetSnapshot(
15 services: [
16 .init(id: "git", name: "git.sr.ht", status: "Operational", requiresAttention: false),
17 .init(id: "builds", name: "builds.sr.ht", status: "Degraded", requiresAttention: true),
18 ],
19 hasDisruption: true,
20 overallStatusText: "Experiencing disruptions",
21 bannerSummary: "builds.sr.ht disrupted",
22 updatedAt: Date(timeIntervalSince1970: 1000)
23 )
24
25 SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
26 let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
27
28 #expect(loaded != nil)
29 #expect(loaded?.services.count == 2)
30 #expect(loaded?.hasDisruption == true)
31 #expect(loaded?.bannerSummary == "builds.sr.ht disrupted")
32 #expect(loaded?.services[0].name == "git.sr.ht")
33 #expect(loaded?.services[1].requiresAttention == true)
34 }
35
36 @Test
37 func loadReturnsNilWhenEmpty() {
38 let defaultsName = "SystemStatusWidgetSnapshotTests-empty-\(UUID().uuidString)"
39 let defaults = UserDefaults(suiteName: defaultsName)!
40 defer { defaults.removePersistentDomain(forName: defaultsName) }
41
42 let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
43 #expect(loaded == nil)
44 }
45
46 @Test
47 func clearRemovesSnapshot() {
48 let defaultsName = "SystemStatusWidgetSnapshotTests-clear-\(UUID().uuidString)"
49 let defaults = UserDefaults(suiteName: defaultsName)!
50 defer { defaults.removePersistentDomain(forName: defaultsName) }
51
52 let snapshot = SystemStatusWidgetSnapshot(
53 services: [.init(id: "meta", name: "meta.sr.ht", status: "Operational", requiresAttention: false)],
54 hasDisruption: false,
55 overallStatusText: "All monitored services operational",
56 bannerSummary: "",
57 updatedAt: .now
58 )
59
60 SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
61 #expect(SystemStatusWidgetSnapshotStore.load(defaults: defaults) != nil)
62
63 SystemStatusWidgetSnapshotStore.clear(defaults: defaults)
64 #expect(SystemStatusWidgetSnapshotStore.load(defaults: defaults) == nil)
65 }
66
67 @Test
68 func snapshotsAreIsolatedPerAccount() {
69 let defaultsName = "SystemStatusWidgetSnapshotTests-isolation-\(UUID().uuidString)"
70 let defaults = UserDefaults(suiteName: defaultsName)!
71 defer { defaults.removePersistentDomain(forName: defaultsName) }
72
73 let firstSnapshot = SystemStatusWidgetSnapshot(
74 services: [.init(id: "git", name: "git.sr.ht", status: "Operational", requiresAttention: false)],
75 hasDisruption: false,
76 overallStatusText: "All monitored services operational",
77 bannerSummary: "",
78 updatedAt: Date(timeIntervalSince1970: 100)
79 )
80 let secondSnapshot = SystemStatusWidgetSnapshot(
81 services: [.init(id: "builds", name: "builds.sr.ht", status: "Degraded", requiresAttention: true)],
82 hasDisruption: true,
83 overallStatusText: "Experiencing disruptions",
84 bannerSummary: "builds.sr.ht disrupted",
85 updatedAt: Date(timeIntervalSince1970: 200)
86 )
87
88 SystemStatusWidgetSnapshotStore.save(firstSnapshot, accountID: "account-a", defaults: defaults)
89 SystemStatusWidgetSnapshotStore.save(secondSnapshot, accountID: "account-b", defaults: defaults)
90
91 #expect(SystemStatusWidgetSnapshotStore.load(accountID: "account-a", defaults: defaults)?.services.first?.name == "git.sr.ht")
92 #expect(SystemStatusWidgetSnapshotStore.load(accountID: "account-b", defaults: defaults)?.services.first?.name == "builds.sr.ht")
93
94 ActiveAccountContextStore.save("account-b", defaults: defaults)
95 #expect(SystemStatusWidgetSnapshotStore.load(defaults: defaults)?.bannerSummary == "builds.sr.ht disrupted")
96 }
97
98 @Test
99 func unavailableSnapshotHasEmptyServices() {
100 let snapshot = SystemStatusWidgetSnapshot.unavailable
101 #expect(snapshot.services.isEmpty)
102 #expect(snapshot.hasDisruption == false)
103 }
104}