krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v3.3.1: HutchTests/AppStateTests.swift · raw
1import Foundation
2import Testing
3@testable import Hutch
4
5struct AppStateTests {
6
7 @Test
8 @MainActor
9 func presentRepositoryDeepLinkErrorSetsUserFacingMessage() {
10 let appState = AppState()
11
12 appState.presentRepositoryDeepLinkError()
13
14 #expect(appState.deepLinkError == "The repository could not be found or is inaccessible.")
15 }
16
17 @Test
18 @MainActor
19 func presentTicketDeepLinkErrorSetsUserFacingMessage() {
20 let appState = AppState()
21
22 appState.presentTicketDeepLinkError()
23
24 #expect(appState.deepLinkError == "The ticket could not be found or is inaccessible.")
25 }
26
27 @Test
28 @MainActor
29 func openSystemStatusSelectsMoreTabAndQueuesNavigation() {
30 let appState = AppState()
31
32 appState.openSystemStatus()
33
34 #expect(appState.selectedTab == .more)
35 #expect(appState.pendingTabNavigation == .systemStatus)
36 }
37
38 @Test
39 @MainActor
40 func navigateToBuildsListSelectsBuildsTabAndQueuesBuildsNavigation() {
41 let appState = AppState()
42
43 appState.navigateToBuildsList()
44
45 #expect(appState.selectedTab == .builds)
46 #expect(appState.pendingTabNavigation == .builds)
47 }
48
49 @Test
50 @MainActor
51 func navigationHelpersQueueExpectedTargets() {
52 let appState = AppState()
53 let repository = RepositorySummary(
54 fields: .init(
55 id: 1,
56 rid: "repo",
57 service: .git,
58 name: "hutch",
59 description: nil,
60 visibility: .publicVisibility,
61 updated: .distantPast,
62 owner: Entity(canonicalName: "~owner"),
63 head: nil
64 )
65 )
66 let tracker = TrackerSummary(
67 id: 2,
68 rid: "tracker",
69 name: "todo",
70 description: nil,
71 visibility: .publicVisibility,
72 updated: .distantPast,
73 owner: Entity(canonicalName: "~owner")
74 )
75
76 appState.navigateToRepository(repository)
77 #expect(appState.selectedTab == .repositories)
78 #expect(appState.pendingTabNavigation == .repository(repository))
79
80 appState.navigateToTracker(tracker)
81 #expect(appState.selectedTab == .tickets)
82 #expect(appState.pendingTabNavigation == .tracker(tracker))
83
84 appState.navigateToBuild(jobId: 42)
85 #expect(appState.selectedTab == .builds)
86 #expect(appState.pendingDeepLink == .build(jobId: 42))
87
88 appState.navigateToTicket(ownerUsername: "owner", trackerName: "todo", ticketId: 9)
89 #expect(appState.selectedTab == .tickets)
90 #expect(appState.pendingDeepLink == .ticket(owner: "owner", tracker: "todo", ticketId: 9))
91 }
92}