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