test(update-checker): rewrite tests to exercise real production code
REPLACED: three worthless tests that only tested test code, not production: - statusMessageUpToDateFormat built the expected string locally and matched it - statusMessageUpdateReadyFormat same self-referential test - statusChannelsAreIndependent was literally #expect(true, ...) ADDED: four real tests that drive production code: - dubaiTimeCheckTimeFormat: assert DubaiTime.checkTime() formats as HH:MM Dubai - manualCheckUpToDateIncludesTimestamp: inject stub appcast via testAppcastJSON seam, drive UpdateChecker.checkNow(manual: true), verify statusMessage matches exact format - automaticCheckUpToDateLeavesMessageNil: verify automatic check (manual: false) leaves statusMessage nil when up-to-date - statusChannelsAreIndependent: construct real AppModel via AppDelegate.makeLaunchModel(), assert setStatus() does NOT affect updateStatusMessage, setUpdateStatus() does NOT affect statusLine, and vice versa. PROVES the defect is caught: test fails with 3 issues if updateStatusMessage is reverted to an alias of statusLine. ADDED: testAppcastJSON seam to UpdateChecker for test injection of appcast data. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZiTXPbPCSjzPVsfoweAbp
This commit is contained in:
@@ -36,6 +36,8 @@ final class UpdateChecker {
|
||||
/// this value (including nil) is returned instead of checking the file system.
|
||||
var snapshotPreviousVersionOverride: String?
|
||||
var snapshotUsesPreviousVersionOverride: Bool = false
|
||||
/// Test seam: override appcast JSON. When set, returns this instead of fetching from URL.
|
||||
var testAppcastJSON: String?
|
||||
|
||||
init() {
|
||||
let config = URLSessionConfiguration.ephemeral
|
||||
@@ -359,7 +361,12 @@ final class UpdateChecker {
|
||||
}
|
||||
|
||||
private func fetchAppcast() async throws -> Appcast {
|
||||
let data = try await fetchData(from: Self.resolvedAppcastURL())
|
||||
let data: Data
|
||||
if let testJSON = testAppcastJSON {
|
||||
data = testJSON.data(using: .utf8) ?? Data()
|
||||
} else {
|
||||
data = try await fetchData(from: Self.resolvedAppcastURL())
|
||||
}
|
||||
return try JSONDecoder().decode(Appcast.self, from: data)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user