diff --git a/DuckDuckGo/AutoClearSettingsViewController.swift b/DuckDuckGo/AutoClearSettingsViewController.swift index 5b5ec0c874..14c4178ac0 100644 --- a/DuckDuckGo/AutoClearSettingsViewController.swift +++ b/DuckDuckGo/AutoClearSettingsViewController.swift @@ -33,8 +33,18 @@ class AutoClearSettingsViewController: UITableViewController { @IBOutlet weak var clearDataToggle: UISwitch! @IBOutlet var labels: [UILabel]! - private lazy var appSettings = AppDependencyProvider.shared.appSettings + private var appSettings: AppSettings private var clearDataSettings: AutoClearSettingsModel? + + init?(appSettings: AppSettings, coder: NSCoder) { + self.appSettings = appSettings + super.init(coder: coder) + } + + @available(*, unavailable, renamed: "init(appSettings:coder:)") + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } override func viewDidLoad() { super.viewDidLoad() diff --git a/DuckDuckGo/SettingsLegacyViewProvider.swift b/DuckDuckGo/SettingsLegacyViewProvider.swift index 880156e2ee..736e81f8e5 100644 --- a/DuckDuckGo/SettingsLegacyViewProvider.swift +++ b/DuckDuckGo/SettingsLegacyViewProvider.swift @@ -78,10 +78,15 @@ class SettingsLegacyViewProvider: ObservableObject { var autoConsent: UIViewController { instantiate("AutoconsentSettingsViewController", fromStoryboard: "Settings") } var unprotectedSites: UIViewController { instantiate("UnprotectedSites", fromStoryboard: "Settings") } var fireproofSites: UIViewController { instantiate("FireProofSites", fromStoryboard: "Settings") } - var autoclearData: UIViewController { instantiate("AutoClearSettingsViewController", fromStoryboard: "Settings") } var keyboard: UIViewController { instantiate("Keyboard", fromStoryboard: "Settings") } var feedback: UIViewController { instantiate("Feedback", fromStoryboard: "Feedback") } - + var autoclearData: UIViewController { + let storyboard = UIStoryboard(name: "Settings", bundle: nil) + return storyboard.instantiateViewController(identifier: "AutoClearSettingsViewController", creator: { coder in + return AutoClearSettingsViewController(appSettings: self.appSettings, coder: coder) + }) + } + @MainActor func syncSettings(source: String? = nil) -> SyncSettingsViewController { return SyncSettingsViewController(syncService: self.syncService, diff --git a/DuckDuckGoTests/AutoClearSettingsScreenTests.swift b/DuckDuckGoTests/AutoClearSettingsScreenTests.swift index 95d056cf4a..4f9e4c36c4 100644 --- a/DuckDuckGoTests/AutoClearSettingsScreenTests.swift +++ b/DuckDuckGoTests/AutoClearSettingsScreenTests.swift @@ -23,35 +23,20 @@ import XCTest class AutoClearSettingsScreenTests: XCTestCase { - var mockDependencyProvider: MockDependencyProvider! - - override func setUp() { - super.setUp() - - mockDependencyProvider = MockDependencyProvider() - AppDependencyProvider.shared = mockDependencyProvider - } - - override func tearDown() { - super.tearDown() - - AppDependencyProvider.shared = AppDependencyProvider.makeTestingInstance() - } - func testWhenOpeningSettingsThenClearDataToggleIsSetBasedOnAppSettings() { - let appSettigns = AppUserDefaults() - appSettigns.autoClearAction = [] - - if let settingsController = AutoClearSettingsViewController.loadFromStoryboard() { + let appSettings = AppUserDefaults() + appSettings.autoClearAction = [] + + if let settingsController = AutoClearSettingsViewController.loadFromStoryboard(appSettings: appSettings) { settingsController.loadViewIfNeeded() XCTAssertFalse(settingsController.clearDataToggle.isOn) } else { assertionFailure("Could not load View Controller") } - appSettigns.autoClearAction = .clearData - - if let settingsController = AutoClearSettingsViewController.loadFromStoryboard() { + appSettings.autoClearAction = .clearData + + if let settingsController = AutoClearSettingsViewController.loadFromStoryboard(appSettings: appSettings) { settingsController.loadViewIfNeeded() XCTAssert(settingsController.clearDataToggle.isOn) } else { @@ -63,7 +48,7 @@ class AutoClearSettingsScreenTests: XCTestCase { let appSettings = AppUserDefaults() appSettings.autoClearAction = [] - guard let settingsController = AutoClearSettingsViewController.loadFromStoryboard() else { + guard let settingsController = AutoClearSettingsViewController.loadFromStoryboard(appSettings: appSettings) else { assertionFailure("Could not load View Controller") return } @@ -85,9 +70,11 @@ class AutoClearSettingsScreenTests: XCTestCase { private extension AutoClearSettingsViewController { - static func loadFromStoryboard() -> AutoClearSettingsViewController? { - let controller = UIStoryboard(name: "Settings", bundle: nil).instantiateViewController(withIdentifier: "AutoClearSettingsViewController") - return controller as? AutoClearSettingsViewController + static func loadFromStoryboard(appSettings: AppSettings) -> AutoClearSettingsViewController? { + let storyboard = UIStoryboard(name: "Settings", bundle: nil) + return storyboard.instantiateViewController(identifier: "AutoClearSettingsViewController", creator: { coder in + return AutoClearSettingsViewController(appSettings: appSettings, coder: coder) + }) } }