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}