diff --git a/Brief/Updater.swift b/Brief/Updater.swift
index 2684e45..4cfcdef 100644
--- a/Brief/Updater.swift
+++ b/Brief/Updater.swift
@@ -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 {
diff --git a/BriefTests/ReleaseParsingTests.swift b/BriefTests/ReleaseParsingTests.swift
index a032779..6c9b99d 100644
--- a/BriefTests/ReleaseParsingTests.swift
+++ b/BriefTests/ReleaseParsingTests.swift
@@ -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)
     }
 
 }
diff --git a/BriefTests/SemVerTests.swift b/BriefTests/SemVerTests.swift
index 02729fa..274e5aa 100644
--- a/BriefTests/SemVerTests.swift
+++ b/BriefTests/SemVerTests.swift
@@ -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")