diff --git a/Sources/Lithe/Models/Settings/AppSettings.swift b/Sources/Lithe/Models/Settings/AppSettings.swift index adb33ba0..5469979c 100644 --- a/Sources/Lithe/Models/Settings/AppSettings.swift +++ b/Sources/Lithe/Models/Settings/AppSettings.swift @@ -95,7 +95,7 @@ final class AppSettings: ObservableObject { rawValue: defaults.string(forKey: Key.editorTabLayoutMode) ?? "" ) ?? .singleLine showCodeVision = defaults.object(forKey: Key.showCodeVision) as? Bool ?? true - autoSave = defaults.object(forKey: Key.autoSave) as? Bool ?? false + autoSave = defaults.object(forKey: Key.autoSave) as? Bool ?? true autoSaveDelay = defaults.object(forKey: Key.autoSaveDelay) as? Double ?? 1.5 terminalShell = TerminalShell(rawValue: defaults.string(forKey: Key.terminalShell) ?? "") ?? .system hiddenDirectoryNames = defaults.stringArray(forKey: Key.hiddenDirectories) @@ -153,7 +153,7 @@ final class AppSettings: ObservableObject { tabWidth = 4 editorTabLayoutMode = .singleLine showCodeVision = true - autoSave = false + autoSave = true autoSaveDelay = 1.5 terminalShell = .system hiddenDirectoryNames = FileVisibilityRules.default.hiddenDirectoryNames diff --git a/Tests/LitheTests/AppSettingsTests.swift b/Tests/LitheTests/AppSettingsTests.swift new file mode 100644 index 00000000..0977a189 --- /dev/null +++ b/Tests/LitheTests/AppSettingsTests.swift @@ -0,0 +1,41 @@ +import Foundation +import Testing +@testable import Lithe + +@Suite("App settings") +@MainActor +struct AppSettingsTests { + @Test + func autoSaveDefaultsToEnabledAndPersistsDisabledSelection() { + let store = AppSettingsTestStore() + let settings = AppSettings(store: store) + + #expect(settings.autoSave) + + settings.autoSave = false + + #expect(AppSettings(store: store).autoSave == false) + } + + @Test + func restoringDefaultsEnablesAutoSave() { + let store = AppSettingsTestStore() + let settings = AppSettings(store: store) + settings.autoSave = false + + settings.restoreDefaults() + + #expect(settings.autoSave) + #expect(AppSettings(store: store).autoSave) + } +} + +private final class AppSettingsTestStore: KeyValueStore, @unchecked Sendable { + private var values: [String: Any] = [:] + + func data(forKey key: String) -> Data? { values[key] as? Data } + func object(forKey key: String) -> Any? { values[key] } + func string(forKey key: String) -> String? { values[key] as? String } + func stringArray(forKey key: String) -> [String]? { values[key] as? [String] } + func set(_ value: Any?, forKey key: String) { values[key] = value } +}