krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
ce1a59205b30518ee11d99ac043e15d83c27cce2
verified · cmc
author: Christian Cleberg <hello@cleberg.net> · 2026-04-12T04:36:36Z
HutchTests/HomeViewModelTests.swift | 11 ++++++++++- HutchTests/ProjectTests.swift | 2 ++ HutchTests/RepositorySettingsViewModelTests.swift | 8 +++++--- HutchTests/TrackerManagementViewModelTests.swift | 2 ++ 4 files changed, 19 insertions(+), 4 deletions(-) @@ -22,10 +22,19 @@ struct HomeViewModelTests { func matchesCurrentUserAssigneeNormalizesCanonicalNameAndUsername() { let currentUser = User( id: 42, + created: nil, + updated: nil, username: "owner", canonicalName: "~owner", email: "owner@example.com", - avatar: nil + url: nil, + location: nil, + bio: nil, + avatar: nil, + pronouns: nil, + userType: nil, + receivesPaidServices: nil, + suspensionNotice: nil ) #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: "~owner"), currentUser: currentUser)) @@ -12,6 +12,7 @@ struct ProjectTests { website: nil, visibility: .public, tags: [], + updated: Date(timeIntervalSince1970: 0), mailingLists: [ Project.MailingList( id: "list-1", @@ -62,6 +63,7 @@ struct ProjectTests { website: "https://example.com", visibility: .public, tags: [], + updated: Date(timeIntervalSince1970: 0), mailingLists: [], sources: [], trackers: [] @@ -33,6 +33,7 @@ struct RepositorySettingsViewModelTests { } @Test + @MainActor func gitCanonicalEntityAddsMissingTilde() { #expect(RepositorySettingsViewModel.gitCanonicalEntity(from: "alice") == "~alice") #expect(RepositorySettingsViewModel.gitCanonicalEntity(from: "~alice") == "~alice") @@ -40,6 +41,7 @@ struct RepositorySettingsViewModelTests { } @Test + @MainActor func gitHeadReferenceUsesFullBranchRef() { #expect(RepositorySettingsViewModel.gitHeadReference(from: "main") == "refs/heads/main") #expect(RepositorySettingsViewModel.gitHeadReference(from: " refs/heads/dev ") == "refs/heads/dev") @@ -50,7 +52,7 @@ struct RepositorySettingsViewModelTests { func unchangedHeadIsOmittedFromSaveInput() { let viewModel = RepositorySettingsViewModel( repository: makeRepository(headName: "refs/heads/main"), - branches: [Reference(name: "refs/heads/main", target: nil)], + branches: [ReferenceDetail(name: "refs/heads/main", target: nil, date: nil)], client: SRHTClient(token: "test-token") ) @@ -63,8 +65,8 @@ struct RepositorySettingsViewModelTests { let viewModel = RepositorySettingsViewModel( repository: makeRepository(headName: "refs/heads/main"), branches: [ - Reference(name: "refs/heads/main", target: nil), - Reference(name: "refs/heads/dev", target: nil) + ReferenceDetail(name: "refs/heads/main", target: nil, date: nil), + ReferenceDetail(name: "refs/heads/dev", target: nil, date: nil) ], client: SRHTClient(token: "test-token") ) @@ -4,12 +4,14 @@ import Testing struct TrackerManagementViewModelTests { @Test + @MainActor func normalizedUsernameStripsLeadingTildeAndWhitespace() { #expect(TrackerManagementViewModel.normalizedUsername(" ~alice ") == "alice") #expect(TrackerManagementViewModel.normalizedUsername("bob") == "bob") } @Test + @MainActor func hexColorValidationRequiresPoundAndSixHexDigits() { #expect(TrackerManagementViewModel.isValidHexColor("#a1B2c3")) #expect(!TrackerManagementViewModel.isValidHexColor("a1B2c3"))