krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v2.15.0: 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 unavailableSnapshotHasEmptyServices() {
69 let snapshot = SystemStatusWidgetSnapshot.unavailable
70 #expect(snapshot.services.isEmpty)
71 #expect(snapshot.hasDisruption == false)
72 }
73}