fix(rest): 修复旧版备份恢复单次模式失效

This commit is contained in:
ysicing committed 2026-09-26 20:06:41 +08:00
1 parent 9df9d439af
commit 0a734f1ab2
2 files changed
+20 -2

No files matched your search

@@ -125,8 +125,9 @@ extension AppSettings {
assign(\.restDailyGoal, option(doc.restDailyGoal, in: Self.restDailyGoalOptions))
if let mode = doc.restMode.flatMap(RestRunMode.init(rawValue:)) {
assign(\.restMode, mode)
} else {
assign(\.restCycleEnabled, doc.restCycleEnabled)
} else if let cycle = doc.restCycleEnabled {
// 工作番茄和单次的兼容布尔值均为 false,需比较完整模式才能正确恢复。
assign(\.restMode, cycle ? .cycle : .single)
}
assign(\.restSound, doc.restSound.flatMap(RestSound.init(rawValue:)))
assign(\.restHUDStyle, doc.restHUDStyle.flatMap(RestHUDStyle.init(rawValue:)))
@@ -584,6 +584,23 @@ import Testing
#expect(target.restHUDStyle == .hourglass)
}
@Test(arguments: [false, true, nil] as [Bool?])
func legacyRestBackupRestoresModeFromWorkday(cycle: Bool?) {
let suite = "RestLegacyBackupTests.\(UUID())"
let defaults = UserDefaults(suiteName: suite)!
defer { defaults.removePersistentDomain(forName: suite) }
let settings = AppSettings(defaults: defaults)
settings.restMode = .workday
var document = SettingsDocument()
document.restCycleEnabled = cycle
settings.apply(document)
let expected: RestRunMode = cycle.map { $0 ? .cycle : .single } ?? .workday
#expect(settings.restMode == expected)
#expect(AppSettings(defaults: defaults).restMode == expected)
}
@Test func workdayModeMigratesLegacyCycleAndRoundTripsBackup() {
let oldSuite = "RestLegacyModeTests.\(UUID())"
let oldDefaults = UserDefaults(suiteName: oldSuite)!