summaryrefslogtreecommitdiff
path: root/HutchTests/SRHTWebURLTests.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-13 19:44:44 -0500
committerChristian Cleberg <[email protected]>2026-04-13 19:44:44 -0500
commitfe1ccc69661603d419a642a450e4ac9e1258adb0 (patch)
tree386455b6b5468abdd9dfa46dd4802b10da8b77a2 /HutchTests/SRHTWebURLTests.swift
parent6ec9754ce34f331641b000eddef3d44bca2631a5 (diff)
downloadhutch-fe1ccc69661603d419a642a450e4ac9e1258adb0.tar.gz
hutch-fe1ccc69661603d419a642a450e4ac9e1258adb0.tar.bz2
hutch-fe1ccc69661603d419a642a450e4ac9e1258adb0.zip
fix: centralize URLs, tighten models, and polish SwiftUI bindingsv3.1.3
- Add shared HutchDeepLinkURL constants for app, widgets, and tests. - Bump marketing version to 3.1.2 and build to 70 (app + widget extension). - Point Hutch stats default base URL at HutchStatsAPI; add SRHTWebURL status incident feed and reuse it from SystemStatusService. - Group Project into Metadata and Resources; split ContributionStatsResponse into StatsWindow and StatsTotals with updated decoding and tests. - Replace @Bindable usage with explicit Bindings in Profile, Projects list, and repository ACL flows; simplify Home pinned-item helper; add no-op bodies on cancel alert buttons where the compiler requires a statement. - Move repository row build-status indicator next to the relative-updated caption and reserve a fixed 8×8 slot so the row does not jump when status loads. - Use NSString.lastPathComponent for build artifact filenames; collapse duplicate ACL error branches; minor HutchStats HTTP and XMLParserDelegate cleanups. - Point widgets at HutchDeepLinkURL helpers; align tests with the new response and URL types.
Diffstat (limited to 'HutchTests/SRHTWebURLTests.swift')
-rw-r--r--HutchTests/SRHTWebURLTests.swift26
1 files changed, 18 insertions, 8 deletions
diff --git a/HutchTests/SRHTWebURLTests.swift b/HutchTests/SRHTWebURLTests.swift
index a183f00..c1f0dc0 100644
--- a/HutchTests/SRHTWebURLTests.swift
+++ b/HutchTests/SRHTWebURLTests.swift
@@ -3,6 +3,16 @@ import Testing
@testable import Hutch
struct SRHTWebURLTests {
+ private enum Expected {
+ static let chatOrigin = "https://chat.sr.ht"
+ static let statusOrigin = "https://status.sr.ht"
+ static let gitRepoHTTPS = "https://git.sr.ht/~ccleberg/hutch"
+ static let gitSSH = "[email protected]:~ccleberg/hutch"
+ static let tracker = "https://todo.sr.ht/~ccleberg/todo"
+ static let ticket = "https://todo.sr.ht/~ccleberg/todo/42"
+ static let buildJob = "https://builds.sr.ht/~ccleberg/job/12"
+ }
+
private let repository = RepositorySummary(
id: 1,
rid: "repo-1",
@@ -26,21 +36,21 @@ struct SRHTWebURLTests {
@Test
func browserOnlyServiceURLsUseCanonicalHosts() {
- #expect(SRHTWebURL.chat.absoluteString == "https://chat.sr.ht")
- #expect(SRHTWebURL.status.absoluteString == "https://status.sr.ht")
+ #expect(SRHTWebURL.chat.absoluteString == Expected.chatOrigin)
+ #expect(SRHTWebURL.status.absoluteString == Expected.statusOrigin)
}
@Test
func repositoryAndCloneURLsUseStableUserScopedPaths() {
- #expect(SRHTWebURL.repository(repository)?.absoluteString == "https://git.sr.ht/~ccleberg/hutch")
- #expect(SRHTWebURL.httpsCloneURL(repository) == "https://git.sr.ht/~ccleberg/hutch")
- #expect(SRHTWebURL.sshCloneURL(repository) == "[email protected]:~ccleberg/hutch")
+ #expect(SRHTWebURL.repository(repository)?.absoluteString == Expected.gitRepoHTTPS)
+ #expect(SRHTWebURL.httpsCloneURL(repository) == Expected.gitRepoHTTPS)
+ #expect(SRHTWebURL.sshCloneURL(repository) == Expected.gitSSH)
}
@Test
func trackerTicketAndBuildURLsUseStableUserScopedPaths() {
- #expect(SRHTWebURL.tracker(tracker)?.absoluteString == "https://todo.sr.ht/~ccleberg/todo")
- #expect(SRHTWebURL.ticket(ownerUsername: "ccleberg", trackerName: "todo", ticketId: 42)?.absoluteString == "https://todo.sr.ht/~ccleberg/todo/42")
- #expect(SRHTWebURL.build(jobId: 12, ownerCanonicalName: "~ccleberg")?.absoluteString == "https://builds.sr.ht/~ccleberg/job/12")
+ #expect(SRHTWebURL.tracker(tracker)?.absoluteString == Expected.tracker)
+ #expect(SRHTWebURL.ticket(ownerUsername: "ccleberg", trackerName: "todo", ticketId: 42)?.absoluteString == Expected.ticket)
+ #expect(SRHTWebURL.build(jobId: 12, ownerCanonicalName: "~ccleberg")?.absoluteString == Expected.buildJob)
}
}