summaryrefslogtreecommitdiff
path: root/HutchTests/HutchIntentsTests.swift
diff options
context:
space:
mode:
Diffstat (limited to 'HutchTests/HutchIntentsTests.swift')
-rw-r--r--HutchTests/HutchIntentsTests.swift75
1 files changed, 75 insertions, 0 deletions
diff --git a/HutchTests/HutchIntentsTests.swift b/HutchTests/HutchIntentsTests.swift
new file mode 100644
index 0000000..94ecbf0
--- /dev/null
+++ b/HutchTests/HutchIntentsTests.swift
@@ -0,0 +1,75 @@
+import Foundation
+import Testing
+@testable import Hutch
+
+@MainActor
+struct HutchIntentsTests {
+
+ @Test
+ func checkSystemStatusReturnsOperationalWhenNoDisruption() async throws {
+ let defaultsName = "HutchIntentsTests-status-\(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),
+ ],
+ hasDisruption: false,
+ overallStatusText: "All monitored services operational",
+ bannerSummary: "",
+ updatedAt: .now
+ )
+ SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
+
+ let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
+ #expect(loaded != nil)
+ #expect(loaded?.hasDisruption == false)
+ }
+
+ @Test
+ func checkSystemStatusReturnsDisruptionDetails() async throws {
+ let defaultsName = "HutchIntentsTests-disruption-\(UUID().uuidString)"
+ let defaults = UserDefaults(suiteName: defaultsName)!
+ defer { defaults.removePersistentDomain(forName: defaultsName) }
+
+ let snapshot = SystemStatusWidgetSnapshot(
+ services: [
+ .init(id: "git", name: "git.sr.ht", status: "Degraded", requiresAttention: true),
+ .init(id: "meta", name: "meta.sr.ht", status: "Operational", requiresAttention: false),
+ ],
+ hasDisruption: true,
+ overallStatusText: "Experiencing disruptions",
+ bannerSummary: "git.sr.ht disrupted",
+ updatedAt: .now
+ )
+ SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
+
+ let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
+ #expect(loaded?.hasDisruption == true)
+
+ let disrupted = loaded!.services.filter(\.requiresAttention)
+ #expect(disrupted.count == 1)
+ #expect(disrupted.first?.name == "git.sr.ht")
+ }
+
+ @Test
+ func needsAttentionSnapshotSupportsBuildsCheck() {
+ let defaultsName = "HutchIntentsTests-builds-\(UUID().uuidString)"
+ let defaults = UserDefaults(suiteName: defaultsName)!
+ defer { defaults.removePersistentDomain(forName: defaultsName) }
+
+ let snapshot = NeedsAttentionSnapshot(
+ unreadInboxThreads: 5,
+ assignedOpenTickets: 3,
+ failedBuilds: 2,
+ updatedAt: .now
+ )
+ NeedsAttentionSnapshotStore.save(snapshot, defaults: defaults)
+
+ let loaded = NeedsAttentionSnapshotStore.load(defaults: defaults)
+ #expect(loaded?.failedBuilds == 2)
+ #expect(loaded?.unreadInboxThreads == 5)
+ #expect(loaded?.assignedOpenTickets == 3)
+ }
+}