diff --git a/AppUpdater.swift b/AppUpdater.swift index 1c9fbb9..b0452bf 100644 --- a/AppUpdater.swift +++ b/AppUpdater.swift @@ -762,8 +762,7 @@ struct Release: Decodable, Comparable { let prefix = "\(repo.lowercased())-" return assets.first { asset in let name = (asset.name as NSString).deletingPathExtension - .lowercased() - guard asset.contentType == .dmg, name.hasPrefix(prefix) else { + guard asset.contentType == .dmg, name.lowercased().hasPrefix(prefix) else { return false } return Version(tolerant: name.dropFirst(prefix.count)) == tagName diff --git a/Tests/AppUpdaterTests/AppUpdaterTests.swift b/Tests/AppUpdaterTests/AppUpdaterTests.swift index 56bb186..df9f735 100644 --- a/Tests/AppUpdaterTests/AppUpdaterTests.swift +++ b/Tests/AppUpdaterTests/AppUpdaterTests.swift @@ -356,6 +356,18 @@ final class AppUpdaterTests: XCTestCase { } } + func testViableAssetPreservesPrereleaseCase() throws { + let matching = try release( + "v2.0.0-RC.1", prerelease: true, assetName: "APPUPDATER-2.0.0-RC.1.dmg" + ) + XCTAssertEqual(matching.viableAsset(forRepo: "AppUpdater")?.name, "APPUPDATER-2.0.0-RC.1.dmg") + + let mismatched = try release( + "v2.0.0-rc.1", prerelease: true, assetName: "AppUpdater-2.0.0-RC.1.dmg" + ) + XCTAssertNil(mismatched.viableAsset(forRepo: "AppUpdater")) + } + @MainActor func testCheckMatchesAssetNamedWithShortVersion() async throws { let releases = try [