krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

v2.16.0: HutchTests/HutchIntentsTests.swift · raw

 1import Foundation
 2import Testing
 3@testable import Hutch
 4
 5@MainActor
 6struct HutchIntentsTests {
 7
 8    @Test
 9    func checkSystemStatusReturnsOperationalWhenNoDisruption() async throws {
10        let defaultsName = "HutchIntentsTests-status-\(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            ],
18            hasDisruption: false,
19            overallStatusText: "All monitored services operational",
20            bannerSummary: "",
21            updatedAt: .now
22        )
23        SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
24
25        let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
26        #expect(loaded != nil)
27        #expect(loaded?.hasDisruption == false)
28    }
29
30    @Test
31    func checkSystemStatusReturnsDisruptionDetails() async throws {
32        let defaultsName = "HutchIntentsTests-disruption-\(UUID().uuidString)"
33        let defaults = UserDefaults(suiteName: defaultsName)!
34        defer { defaults.removePersistentDomain(forName: defaultsName) }
35
36        let snapshot = SystemStatusWidgetSnapshot(
37            services: [
38                .init(id: "git", name: "git.sr.ht", status: "Degraded", requiresAttention: true),
39                .init(id: "meta", name: "meta.sr.ht", status: "Operational", requiresAttention: false),
40            ],
41            hasDisruption: true,
42            overallStatusText: "Experiencing disruptions",
43            bannerSummary: "git.sr.ht disrupted",
44            updatedAt: .now
45        )
46        SystemStatusWidgetSnapshotStore.save(snapshot, defaults: defaults)
47
48        let loaded = SystemStatusWidgetSnapshotStore.load(defaults: defaults)
49        #expect(loaded?.hasDisruption == true)
50
51        let disrupted = loaded!.services.filter(\.requiresAttention)
52        #expect(disrupted.count == 1)
53        #expect(disrupted.first?.name == "git.sr.ht")
54    }
55
56    @Test
57    func needsAttentionSnapshotSupportsBuildsCheck() {
58        let defaultsName = "HutchIntentsTests-builds-\(UUID().uuidString)"
59        let defaults = UserDefaults(suiteName: defaultsName)!
60        defer { defaults.removePersistentDomain(forName: defaultsName) }
61
62        let snapshot = NeedsAttentionSnapshot(
63            unreadInboxThreads: 5,
64            assignedOpenTickets: 3,
65            failedBuilds: 2,
66            updatedAt: .now
67        )
68        NeedsAttentionSnapshotStore.save(snapshot, defaults: defaults)
69
70        let loaded = NeedsAttentionSnapshotStore.load(defaults: defaults)
71        #expect(loaded?.failedBuilds == 2)
72        #expect(loaded?.unreadInboxThreads == 5)
73        #expect(loaded?.assignedOpenTickets == 3)
74    }
75}