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}