krz/hutch

an ios client for sourcehut

clone: git clone https://gitbay.org/krz/hutch.git

v3.2.1: 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}