krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v2.12.0: HutchTests/HomeViewModelTests.swift · raw
1import Foundation
2import Testing
3@testable import Hutch
4
5struct HomeViewModelTests {
6
7 @Test
8 func failedBuildsKeepsOnlyFailedAndTimedOutJobs() {
9 let jobs = [
10 makeJob(id: 1, status: .success, created: Date(timeIntervalSince1970: 10)),
11 makeJob(id: 2, status: .failed, created: Date(timeIntervalSince1970: 20)),
12 makeJob(id: 3, status: .timeout, created: Date(timeIntervalSince1970: 30)),
13 makeJob(id: 4, status: .running, created: Date(timeIntervalSince1970: 40))
14 ]
15
16 let failedBuilds = HomeViewModel.failedBuilds(from: jobs)
17
18 #expect(failedBuilds.map(\.job.id) == [2, 3])
19 }
20
21 @Test
22 func matchesCurrentUserAssigneeNormalizesCanonicalNameAndUsername() {
23 let currentUser = User(
24 id: 42,
25 username: "owner",
26 canonicalName: "~owner",
27 email: "owner@example.com",
28 avatar: nil
29 )
30
31 #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: "~owner"), currentUser: currentUser))
32 #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: "owner"), currentUser: currentUser))
33 #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: currentUser.username), currentUser: currentUser))
34 #expect(HomeViewModel.matchesCurrentUserAssignee(Entity(canonicalName: "~someone-else"), currentUser: currentUser) == false)
35 }
36
37 @Test
38 func primaryRepositoryReferenceParsesManifestSourceURL() {
39 let manifest = """
40 image: alpine/latest
41 sources:
42 - https://git.sr.ht/~owner/hutch
43 tasks:
44 - true
45 """
46
47 let repository = HomeViewModel.primaryRepositoryReference(in: manifest)
48
49 #expect(repository?.ownerCanonicalName == "~owner")
50 #expect(repository?.name == "hutch")
51 }
52
53 private func makeJob(id: Int, status: JobStatus, created: Date) -> HomeJobPayload {
54 HomeJobPayload(
55 id: id,
56 created: created,
57 updated: created,
58 status: status,
59 note: nil,
60 tags: [],
61 visibility: nil,
62 image: nil,
63 tasks: [],
64 manifest: nil
65 )
66 }
67}