krz/hutch

an ios client for sourcehut

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

v2.10.1: 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}