Files
CleanMM/Packages/AtlasApplication/Tests/AtlasApplicationTests/AtlasUpdateCheckerTests.swift
zhukang d3ca6d18dc feat: add in-app update checker, enhance About page and project metadata
- Add AtlasUpdateChecker with GitHub Releases API integration
- Add AtlasVersionComparator for semantic version comparison
- Add AboutUpdateToolbarButton with popover update UI
- Enhance AboutFeatureView with social QR codes and layout refinements
- Add CHANGELOG.md and CODE_OF_CONDUCT.md
- Rebrand project files from Mole to Atlas for Mac
- Update build script to support version/build number injection
- Add installation guide to README
- Add bilingual localization strings for update feature
- Add unit tests for update checker and version comparator
2026-03-11 20:07:26 +08:00

70 lines
2.5 KiB
Swift

import Foundation
import XCTest
@testable import AtlasApplication
final class AtlasUpdateCheckerTests: XCTestCase {
func testCheckForUpdateReturnsAvailableRelease() async throws {
let checker = AtlasUpdateChecker { request in
XCTAssertEqual(
request.url?.absoluteString,
"https://api.github.com/repos/CSZHK/CleanMyPc/releases/latest"
)
let body = """
{
"tag_name": "V1.2.3",
"html_url": "https://github.com/CSZHK/CleanMyPc/releases/tag/V1.2.3",
"body": "Release notes"
}
"""
return (
Data(body.utf8),
HTTPURLResponse(url: request.url!, statusCode: 200, httpVersion: nil, headerFields: nil)!
)
}
let result = try await checker.checkForUpdate(currentVersion: "1.0.0")
XCTAssertEqual(result.currentVersion, "1.0.0")
XCTAssertEqual(result.latestVersion, "V1.2.3")
XCTAssertEqual(result.releaseURL?.absoluteString, "https://github.com/CSZHK/CleanMyPc/releases/tag/V1.2.3")
XCTAssertEqual(result.releaseNotes, "Release notes")
XCTAssertTrue(result.isUpdateAvailable)
}
func testCheckForUpdateTreatsMissingReleaseAsUnavailable() async {
let checker = AtlasUpdateChecker { request in
(
Data(),
HTTPURLResponse(url: request.url!, statusCode: 404, httpVersion: nil, headerFields: nil)!
)
}
do {
_ = try await checker.checkForUpdate(currentVersion: "1.0.0")
XCTFail("Expected missing releases to be reported explicitly")
} catch let error as AtlasUpdateCheckerError {
XCTAssertEqual(error, .noPublishedRelease)
} catch {
XCTFail("Unexpected error: \(error)")
}
}
func testCheckForUpdateMapsUnexpectedStatusToRequestFailure() async {
let checker = AtlasUpdateChecker { request in
(
Data(),
HTTPURLResponse(url: request.url!, statusCode: 500, httpVersion: nil, headerFields: nil)!
)
}
do {
_ = try await checker.checkForUpdate(currentVersion: "1.0.0")
XCTFail("Expected a request failure")
} catch let error as AtlasUpdateCheckerError {
XCTAssertEqual(error, .requestFailed)
} catch {
XCTFail("Unexpected error: \(error)")
}
}
}