mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-04-18 05:22:11 +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?
|
@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 {
|
if checkOnLaunch {
|
||||||
// Don't do a launch check if the user hasn't seen the setup prompt explaining updater yet.
|
// Don't do a launch check if the user hasn't seen the setup prompt explaining updater yet.
|
||||||
checkForUpdates()
|
checkForUpdates()
|
||||||
@ -44,8 +47,9 @@ extension Updater {
|
|||||||
|
|
||||||
func evaluate(releases: [Release]) {
|
func evaluate(releases: [Release]) {
|
||||||
guard let release = releases
|
guard let release = releases
|
||||||
.sorted()
|
.sorted()
|
||||||
.first(where: { $0.minimumOSVersion < SemVer(ProcessInfo.processInfo.operatingSystemVersionString) }) else { return }
|
.reversed()
|
||||||
|
.first(where: { $0.minimumOSVersion < osVersion }) else { return }
|
||||||
guard !userIgnored(release: release) else { return }
|
guard !userIgnored(release: release) else { return }
|
||||||
guard !release.prerelease else { return }
|
guard !release.prerelease else { return }
|
||||||
let latestVersion = SemVer(release.name)
|
let latestVersion = SemVer(release.name)
|
||||||
@ -71,7 +75,7 @@ public struct SemVer {
|
|||||||
|
|
||||||
let versionNumbers: [Int]
|
let versionNumbers: [Int]
|
||||||
|
|
||||||
init(_ version: String) {
|
public init(_ version: String) {
|
||||||
// Betas have the format 1.2.3_beta1
|
// Betas have the format 1.2.3_beta1
|
||||||
let strippedBeta = version.split(separator: "_").first!
|
let strippedBeta = version.split(separator: "_").first!
|
||||||
var split = strippedBeta.split(separator: ".").compactMap { Int($0) }
|
var split = strippedBeta.split(separator: ".").compactMap { Int($0) }
|
||||||
@ -81,6 +85,10 @@ public struct SemVer {
|
|||||||
versionNumbers = split
|
versionNumbers = split
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public init(_ version: OperatingSystemVersion) {
|
||||||
|
versionNumbers = [version.majorVersion, version.minorVersion, version.patchVersion]
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension SemVer: Comparable {
|
extension SemVer: Comparable {
|
||||||
|
@ -4,29 +4,80 @@ import XCTest
|
|||||||
class ReleaseParsingTests: XCTestCase {
|
class ReleaseParsingTests: XCTestCase {
|
||||||
|
|
||||||
func testNonCritical() {
|
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() {
|
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() {
|
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() {
|
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() {
|
func testGreatestSelectedIfOldPatchIsPublishedLater() {
|
||||||
// If 2.x.x series has been published, and a patch for 1.x.x is issued
|
// 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.
|
// 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() {
|
func testLatestVersionIsRunnable() {
|
||||||
// If the 2.x.x series has been published but the user can't run it
|
// 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.
|
// 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)
|
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() {
|
func testBeta() {
|
||||||
let current = SemVer("1.0.2")
|
let current = SemVer("1.0.2")
|
||||||
let new = SemVer("1.1.0_beta1")
|
let new = SemVer("1.1.0_beta1")
|
||||||
|
Loading…
Reference in New Issue
Block a user