diff options
Diffstat (limited to 'HutchTests/HutchIntentsTests.swift')
| -rw-r--r-- | HutchTests/HutchIntentsTests.swift | 75 |
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) + } +} |
