diff options
| author | Christian Cleberg <[email protected]> | 2026-03-18 22:56:34 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-03-18 22:56:34 -0500 |
| commit | ffc0ef0988b5e7d01951c23af85a1cf026b3da9f (patch) | |
| tree | 868cef24e91ddaa5e7d5e39362d97ec6a94107c9 /HutchTests/HomeViewModelTests.swift | |
| parent | ed48e72520c51e4635cd3840dbc569bdd74c950f (diff) | |
| download | hutch-ffc0ef0988b5e7d01951c23af85a1cf026b3da9f.tar.gz hutch-ffc0ef0988b5e7d01951c23af85a1cf026b3da9f.tar.bz2 hutch-ffc0ef0988b5e7d01951c23af85a1cf026b3da9f.zip | |
add Home dashboard and repository build status indicators
Diffstat (limited to 'HutchTests/HomeViewModelTests.swift')
| -rw-r--r-- | HutchTests/HomeViewModelTests.swift | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/HutchTests/HomeViewModelTests.swift b/HutchTests/HomeViewModelTests.swift new file mode 100644 index 0000000..5475bdd --- /dev/null +++ b/HutchTests/HomeViewModelTests.swift @@ -0,0 +1,67 @@ +import Foundation +import Testing +@testable import Hutch + +struct HomeViewModelTests { + + @Test + func failedBuildsKeepsOnlyFailedAndTimedOutJobs() { + let jobs = [ + makeJob(id: 1, status: .success, created: Date(timeIntervalSince1970: 10)), + makeJob(id: 2, status: .failed, created: Date(timeIntervalSince1970: 20)), + makeJob(id: 3, status: .timeout, created: Date(timeIntervalSince1970: 30)), + makeJob(id: 4, status: .running, created: Date(timeIntervalSince1970: 40)) + ] + + let failedBuilds = HomeViewModel.failedBuilds(from: jobs) + + #expect(failedBuilds.map(\.job.id) == [2, 3]) + } + + @Test + func matchesCurrentUserAssigneeNormalizesCanonicalNameAndUsername() { + let currentUser = User( + id: 42, + username: "owner", + canonicalName: "~owner", + email: "[email protected]", + avatar: nil + ) + + #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: "~owner"), currentUser: currentUser)) + #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: "owner"), currentUser: currentUser)) + #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: currentUser.username), currentUser: currentUser)) + #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: "~someone-else"), currentUser: currentUser) == false) + } + + @Test + func primaryRepositoryReferenceParsesManifestSourceURL() { + let manifest = """ + image: alpine/latest + sources: + - https://git.sr.ht/~owner/hutch + tasks: + - true + """ + + let repository = HomeViewModel.primaryRepositoryReference(in: manifest) + + #expect(repository?.ownerCanonicalName == "~owner") + #expect(repository?.name == "hutch") + } + + private func makeJob(id: Int, status: JobStatus, created: Date) -> HomeJobPayload { + HomeJobPayload( + id: id, + created: created, + updated: created, + status: status, + note: nil, + tags: [], + visibility: nil, + image: nil, + tasks: [], + manifest: nil + ) + } +} |
