import XCTest @testable import GrowthLapse final class SettingsTests: XCTestCase { func testFreshSettingsDoNotDependOnDeveloperMachine() { let settings = RenderSettings() XCTAssertNil(settings.inputFolder) XCTAssertNil(settings.outputFile) XCTAssertNil(settings.ffmpegExecutable) XCTAssertNil(settings.ffprobeExecutable) } func testCustomSettingsSurviveJSONRoundTrip() throws { var settings = RenderSettings() settings.inputFolder = URL(fileURLWithPath: "/tmp/Meine Videos") settings.outputFile = URL(fileURLWithPath: "/tmp/Ergebnis.mp4") settings.ffmpegExecutable = URL(fileURLWithPath: "/tmp/tools/ffmpeg") settings.segmentLength = 12 settings.sortMode = .filenameAscending settings.keepRenderCacheForReview = false let data = try JSONEncoder().encode(PersistedRenderSettings(settings: settings)) let restored = try JSONDecoder().decode(PersistedRenderSettings.self, from: data) XCTAssertEqual(restored.renderSettings, settings) } func testOlderSettingsReceiveCompatibilityDefaults() throws { let data = try JSONEncoder().encode(PersistedRenderSettings(settings: RenderSettings())) var json = try XCTUnwrap(JSONSerialization.jsonObject(with: data) as? [String: Any]) for key in ["renderMode", "duplicateClipSelection", "keepRenderCacheForReview", "burnInClipNumbers", "bestSegmentDetectionEnabled"] { json.removeValue(forKey: key) } let restored = try JSONDecoder().decode(PersistedRenderSettings.self, from: JSONSerialization.data(withJSONObject: json)).renderSettings XCTAssertEqual(restored.renderMode, .videoGrowthLapse) XCTAssertEqual(restored.duplicateClipSelection, .first) XCTAssertTrue(restored.keepRenderCacheForReview) XCTAssertFalse(restored.burnInClipNumbers) XCTAssertFalse(restored.bestSegmentDetectionEnabled) } }