summaryrefslogtreecommitdiff
path: root/macos/Tests/Update/UpdateViewModelTests.swift
blob: dd88cbe83118d97a11a685f60159880c97515c71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import Testing
import Foundation
import SwiftUI
import Sparkle
@testable import Ghostty

struct UpdateViewModelTests {
    // MARK: - Text Formatting Tests
    
    @Test func testIdleText() {
        let viewModel = UpdateViewModel()
        viewModel.state = .idle
        #expect(viewModel.text == "")
    }
    
    @Test func testPermissionRequestText() {
        let viewModel = UpdateViewModel()
        let request = SPUUpdatePermissionRequest(systemProfile: [])
        viewModel.state = .permissionRequest(.init(request: request, reply: { _ in }))
        #expect(viewModel.text == "Enable Automatic Updates?")
    }
    
    @Test func testCheckingText() {
        let viewModel = UpdateViewModel()
        viewModel.state = .checking(.init(cancel: {}))
        #expect(viewModel.text == "Checking for Updates…")
    }
    
    @Test func testDownloadingTextWithKnownLength() {
        let viewModel = UpdateViewModel()
        viewModel.state = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 500))
        #expect(viewModel.text == "Downloading: 50%")
    }
    
    @Test func testDownloadingTextWithUnknownLength() {
        let viewModel = UpdateViewModel()
        viewModel.state = .downloading(.init(cancel: {}, expectedLength: nil, progress: 500))
        #expect(viewModel.text == "Downloading…")
    }
    
    @Test func testDownloadingTextWithZeroExpectedLength() {
        let viewModel = UpdateViewModel()
        viewModel.state = .downloading(.init(cancel: {}, expectedLength: 0, progress: 500))
        #expect(viewModel.text == "Downloading…")
    }
    
    @Test func testExtractingText() {
        let viewModel = UpdateViewModel()
        viewModel.state = .extracting(.init(progress: 0.75))
        #expect(viewModel.text == "Preparing: 75%")
    }
    
    @Test func testReadyToInstallText() {
        let viewModel = UpdateViewModel()
        viewModel.state = .readyToInstall(.init(reply: { _ in }))
        #expect(viewModel.text == "Install Update")
    }
    
    @Test func testInstallingText() {
        let viewModel = UpdateViewModel()
        viewModel.state = .installing
        #expect(viewModel.text == "Installing…")
    }
    
    @Test func testNotFoundText() {
        let viewModel = UpdateViewModel()
        viewModel.state = .notFound
        #expect(viewModel.text == "No Updates Available")
    }
    
    @Test func testErrorText() {
        let viewModel = UpdateViewModel()
        let error = NSError(domain: "Test", code: 1, userInfo: [NSLocalizedDescriptionKey: "Network error"])
        viewModel.state = .error(.init(error: error, retry: {}, dismiss: {}))
        #expect(viewModel.text == "Network error")
    }
    
    // MARK: - Max Width Text Tests
    
    @Test func testMaxWidthTextForDownloading() {
        let viewModel = UpdateViewModel()
        viewModel.state = .downloading(.init(cancel: {}, expectedLength: 1000, progress: 50))
        #expect(viewModel.maxWidthText == "Downloading: 100%")
    }
    
    @Test func testMaxWidthTextForExtracting() {
        let viewModel = UpdateViewModel()
        viewModel.state = .extracting(.init(progress: 0.5))
        #expect(viewModel.maxWidthText == "Preparing: 100%")
    }
    
    @Test func testMaxWidthTextForNonProgressState() {
        let viewModel = UpdateViewModel()
        viewModel.state = .checking(.init(cancel: {}))
        #expect(viewModel.maxWidthText == viewModel.text)
    }
}