krz/hutch

an ios client for sourcehut

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

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