mirror of
				https://github.com/maxgoedjen/secretive.git
				synced 2025-11-04 09:20:56 +00:00 
			
		
		
		
	Tests
This commit is contained in:
		
							parent
							
								
									06271b17c8
								
							
						
					
					
						commit
						404ab09faa
					
				@ -11,7 +11,10 @@ public class Updater: ObservableObject, UpdaterProtocol {
 | 
			
		||||
 | 
			
		||||
    @Published public var update: Release?
 | 
			
		||||
 | 
			
		||||
    public init(checkOnLaunch: Bool) {
 | 
			
		||||
    private let osVersion: SemVer
 | 
			
		||||
 | 
			
		||||
    public init(checkOnLaunch: Bool, osVersion: SemVer = SemVer(ProcessInfo.processInfo.operatingSystemVersion)) {
 | 
			
		||||
        self.osVersion = osVersion
 | 
			
		||||
        if checkOnLaunch {
 | 
			
		||||
            // Don't do a launch check if the user hasn't seen the setup prompt explaining updater yet.
 | 
			
		||||
            checkForUpdates()
 | 
			
		||||
@ -44,8 +47,9 @@ extension Updater {
 | 
			
		||||
 | 
			
		||||
    func evaluate(releases: [Release]) {
 | 
			
		||||
        guard let release = releases
 | 
			
		||||
            .sorted()
 | 
			
		||||
                .first(where: { $0.minimumOSVersion < SemVer(ProcessInfo.processInfo.operatingSystemVersionString) }) else { return }
 | 
			
		||||
                .sorted()
 | 
			
		||||
                .reversed()
 | 
			
		||||
                .first(where: { $0.minimumOSVersion < osVersion }) else { return }
 | 
			
		||||
        guard !userIgnored(release: release) else { return }
 | 
			
		||||
        guard !release.prerelease else { return }
 | 
			
		||||
        let latestVersion = SemVer(release.name)
 | 
			
		||||
@ -71,7 +75,7 @@ public struct SemVer {
 | 
			
		||||
 | 
			
		||||
    let versionNumbers: [Int]
 | 
			
		||||
 | 
			
		||||
    init(_ version: String) {
 | 
			
		||||
    public init(_ version: String) {
 | 
			
		||||
        // Betas have the format 1.2.3_beta1
 | 
			
		||||
        let strippedBeta = version.split(separator: "_").first!
 | 
			
		||||
        var split = strippedBeta.split(separator: ".").compactMap { Int($0) }
 | 
			
		||||
@ -81,6 +85,10 @@ public struct SemVer {
 | 
			
		||||
        versionNumbers = split
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public init(_ version: OperatingSystemVersion) {
 | 
			
		||||
        versionNumbers = [version.majorVersion, version.minorVersion, version.patchVersion]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extension SemVer: Comparable {
 | 
			
		||||
 | 
			
		||||
@ -4,29 +4,80 @@ import XCTest
 | 
			
		||||
class ReleaseParsingTests: XCTestCase {
 | 
			
		||||
 | 
			
		||||
    func testNonCritical() {
 | 
			
		||||
 | 
			
		||||
        let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release")
 | 
			
		||||
        XCTAssert(release.critical == false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testCritical() {
 | 
			
		||||
        let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
 | 
			
		||||
        XCTAssert(release.critical == true)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testOSMissing() {
 | 
			
		||||
        let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
 | 
			
		||||
        XCTAssert(release.minimumOSVersion == SemVer("11.0.0"))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testOSPresent() {
 | 
			
		||||
        let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update Requires macOS 11.0.0")
 | 
			
		||||
        XCTAssert(release.minimumOSVersion == SemVer("11.0.0"))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testOSGreaterThanMinimum() {
 | 
			
		||||
        let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
 | 
			
		||||
        XCTAssert(release.minimumOSVersion < SemVer("11.0.0"))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testOSEqualToMinimum() {
 | 
			
		||||
        let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
 | 
			
		||||
        XCTAssert(release.minimumOSVersion <= SemVer("11.0.0"))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testOSLessThanMinimum() {
 | 
			
		||||
 | 
			
		||||
        let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update")
 | 
			
		||||
        XCTAssert(release.minimumOSVersion > SemVer("10.0.0"))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testGreatestSelectedIfOldPatchIsPublishedLater() {
 | 
			
		||||
        // If 2.x.x series has been published, and a patch for 1.x.x is issued
 | 
			
		||||
        // 2.x.x should still be selected if user can run it.
 | 
			
		||||
        let updater = Updater(checkOnLaunch: false, osVersion: SemVer("10.0.0"))
 | 
			
		||||
        let two = Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available!")
 | 
			
		||||
        let releases = [
 | 
			
		||||
            Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release"),
 | 
			
		||||
            Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes"),
 | 
			
		||||
            two,
 | 
			
		||||
            Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch!"),
 | 
			
		||||
        ]
 | 
			
		||||
        updater.evaluate(releases: releases)
 | 
			
		||||
        XCTAssert(updater.update == two)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testLatestVersionIsRunnable() {
 | 
			
		||||
        // If the 2.x.x series has been published but the user can't run it
 | 
			
		||||
        // the last version the user can run should be selected.
 | 
			
		||||
        let updater = Updater(checkOnLaunch: false, osVersion: SemVer("10.0.0"))
 | 
			
		||||
        let oneOhTwo = Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch!")
 | 
			
		||||
        let releases = [
 | 
			
		||||
            Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release"),
 | 
			
		||||
            Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes"),
 | 
			
		||||
            Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available!"),
 | 
			
		||||
            oneOhTwo,
 | 
			
		||||
        ]
 | 
			
		||||
        updater.evaluate(releases: releases)
 | 
			
		||||
        XCTAssert(updater.update == oneOhTwo)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testSorting() {
 | 
			
		||||
        let two = Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available!")
 | 
			
		||||
        let releases = [
 | 
			
		||||
            Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release"),
 | 
			
		||||
            Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes"),
 | 
			
		||||
            two,
 | 
			
		||||
            Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch!"),
 | 
			
		||||
        ]
 | 
			
		||||
        let sorted = releases.sorted().reversed().first
 | 
			
		||||
        XCTAssert(sorted == two)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -27,6 +27,16 @@ class SemVerTests: XCTestCase {
 | 
			
		||||
        XCTAssert(current < new)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testRegularParsing() {
 | 
			
		||||
        let current = SemVer("1.0.2")
 | 
			
		||||
        XCTAssert(current.versionNumbers == [1, 0, 2])
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testNoPatch() {
 | 
			
		||||
        let current = SemVer("1.1")
 | 
			
		||||
        XCTAssert(current.versionNumbers == [1, 1, 0])
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    func testBeta() {
 | 
			
		||||
        let current = SemVer("1.0.2")
 | 
			
		||||
        let new = SemVer("1.1.0_beta1")
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user