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