diff --git a/Brief/Updater.swift b/Brief/Updater.swift
index 4cfcdef..4361cdf 100644
--- a/Brief/Updater.swift
+++ b/Brief/Updater.swift
@@ -49,11 +49,11 @@ extension Updater {
guard let release = releases
.sorted()
.reversed()
- .first(where: { $0.minimumOSVersion < osVersion }) else { return }
+ .first(where: { $0.minimumOSVersion <= osVersion }) else { return }
guard !userIgnored(release: release) else { return }
guard !release.prerelease else { return }
let latestVersion = SemVer(release.name)
- let currentVersion = SemVer(Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String)
+ let currentVersion = SemVer(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0.0")
if latestVersion > currentVersion {
DispatchQueue.main.async {
self.update = release
@@ -158,7 +158,11 @@ extension Release {
}
public var minimumOSVersion: SemVer {
- SemVer("1.1.1")
+ guard let range = body.range(of: "Minimum macOS Version"),
+ let numberStart = body.rangeOfCharacter(from: CharacterSet.decimalDigits, options: [], range: range.upperBound..
SemVer("10.0.0"))
+ let release = Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Critical Security Update Minimum macOS Version: 1.2.3")
+ XCTAssert(release.minimumOSVersion > SemVer("1.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 updater = Updater(checkOnLaunch: false, osVersion: SemVer("2.2.3"))
+ let two = Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available! Minimum macOS Version: 2.2.3")
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: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release Minimum macOS Version: 1.2.3"),
+ Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes Minimum macOS Version: 1.2.3"),
two,
- Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch!"),
+ Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch! Minimum macOS Version: 1.2.3"),
]
+
+ let expectation = XCTestExpectation()
updater.evaluate(releases: releases)
- XCTAssert(updater.update == two)
+ DispatchQueue.main.async {
+ XCTAssert(updater.update == two)
+ expectation.fulfill()
+ }
+ wait(for: [expectation], timeout: 1)
}
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 updater = Updater(checkOnLaunch: false, osVersion: SemVer("1.2.3"))
+ let oneOhTwo = Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch! Minimum macOS Version: 1.2.3")
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,
+ Release(name: "1.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Initial release Minimum macOS Version: 1.2.3"),
+ Release(name: "1.0.1", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Bug fixes Minimum macOS Version: 1.2.3"),
+ Release(name: "2.0.0", prerelease: false, html_url: URL(string: "https://example.com")!, body: "2.0 available! Minimum macOS Version: 2.2.3"),
+ Release(name: "1.0.2", prerelease: false, html_url: URL(string: "https://example.com")!, body: "Emergency patch! Minimum macOS Version: 1.2.3"),
]
+ let expectation = XCTestExpectation()
updater.evaluate(releases: releases)
- XCTAssert(updater.update == oneOhTwo)
+ DispatchQueue.main.async {
+ XCTAssert(updater.update == oneOhTwo)
+ expectation.fulfill()
+ }
+ wait(for: [expectation], timeout: 1)
}
func testSorting() {
diff --git a/BriefTests/SemVerTests.swift b/BriefTests/SemVerTests.swift
index 274e5aa..f7ee332 100644
--- a/BriefTests/SemVerTests.swift
+++ b/BriefTests/SemVerTests.swift
@@ -37,6 +37,11 @@ class SemVerTests: XCTestCase {
XCTAssert(current.versionNumbers == [1, 1, 0])
}
+ func testGarbage() {
+ let current = SemVer("Test")
+ XCTAssert(current.versionNumbers == [0, 0, 0])
+ }
+
func testBeta() {
let current = SemVer("1.0.2")
let new = SemVer("1.1.0_beta1")