summaryrefslogtreecommitdiff
path: root/HutchTests/SystemStatusWidgetSnapshotTests.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-12 00:55:42 -0500
committerChristian Cleberg <[email protected]>2026-04-12 00:55:42 -0500
commit9050405b4f33b2b9b70458fcf3e43b80c940eef7 (patch)
tree983c3a07a560258059cfe421beb3ffcf3c18baf4 /HutchTests/SystemStatusWidgetSnapshotTests.swift
parent5f6d545eb3455a9e4da5a3cb4460811e3a48d939 (diff)
downloadhutch-2.15.0.tar.gz
hutch-2.15.0.tar.bz2
hutch-2.15.0.zip
add shortcuts widgets and power-user workflowsv2.15.0
Diffstat (limited to 'HutchTests/SystemStatusWidgetSnapshotTests.swift')
-rw-r--r--HutchTests/SystemStatusWidgetSnapshotTests.swift73
1 files changed, 73 insertions, 0 deletions
diff --git a/HutchTests/SystemStatusWidgetSnapshotTests.swift b/HutchTests/SystemStatusWidgetSnapshotTests.swift
new file mode 100644
index 0000000..ddb74b1
--- /dev/null
+++ b/HutchTests/SystemStatusWidgetSnapshotTests.swift
@@ -0,0 +1,73 @@
+import Foundation
+import Testing
+@testable import Hutch
+
+@MainActor
+struct SystemStatusWidgetSnapshotTests {
+
+ @Test
+ func saveAndLoadRoundTrips() {
+ let defaultsName = "SystemStatusWidgetSnapshotTests-\(UUID().uuidString)"
+ let defaults = UserDefaults(suiteName: defaultsName)!
+ defer { defaults.removePersistentDomain(forName: defaultsName) }
+
+ let snapshot = SystemStatusWidgetSnapshot(
+ services: [
+ .init(id: "git", name: "git.sr.ht", status: "Operational", requiresAttention: false),
+ .init(id: "builds", name: "builds.sr.ht", status: "Degraded", requiresAttention: true),
+ ],
+ hasDisruption: true,
+ overallStatusText: "Experiencing disruptions",
+ bannerSummary: "builds.sr.ht disrupted",
+ updatedAt: Date(timeIntervalSince1970: 1000)
+ )
+
+ SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
+ let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
+
+ #expect(loaded != nil)
+ #expect(loaded?.services.count == 2)
+ #expect(loaded?.hasDisruption == true)
+ #expect(loaded?.bannerSummary == "builds.sr.ht disrupted")
+ #expect(loaded?.services[0].name == "git.sr.ht")
+ #expect(loaded?.services[1].requiresAttention == true)
+ }
+
+ @Test
+ func loadReturnsNilWhenEmpty() {
+ let defaultsName = "SystemStatusWidgetSnapshotTests-empty-\(UUID().uuidString)"
+ let defaults = UserDefaults(suiteName: defaultsName)!
+ defer { defaults.removePersistentDomain(forName: defaultsName) }
+
+ let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
+ #expect(loaded == nil)
+ }
+
+ @Test
+ func clearRemovesSnapshot() {
+ let defaultsName = "SystemStatusWidgetSnapshotTests-clear-\(UUID().uuidString)"
+ let defaults = UserDefaults(suiteName: defaultsName)!
+ defer { defaults.removePersistentDomain(forName: defaultsName) }
+
+ let snapshot = SystemStatusWidgetSnapshot(
+ services: [.init(id: "meta", name: "meta.sr.ht", status: "Operational", requiresAttention: false)],
+ hasDisruption: false,
+ overallStatusText: "All monitored services operational",
+ bannerSummary: "",
+ updatedAt: .now
+ )
+
+ SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
+ #expect(SystemStatusWidgetSnapshotStore.load(defaults: defaults) != nil)
+
+ SystemStatusWidgetSnapshotStore.clear(defaults: defaults)
+ #expect(SystemStatusWidgetSnapshotStore.load(defaults: defaults) == nil)
+ }
+
+ @Test
+ func unavailableSnapshotHasEmptyServices() {
+ let snapshot = SystemStatusWidgetSnapshot.unavailable
+ #expect(snapshot.services.isEmpty)
+ #expect(snapshot.hasDisruption == false)
+ }
+}