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