krz/hutch

an ios client for sourcehut

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

v2.16.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}