diff --git a/DuckDuckGo/DBP/DBPHomeViewController.swift b/DuckDuckGo/DBP/DBPHomeViewController.swift index 758bfb8f09..5cbc6b6934 100644 --- a/DuckDuckGo/DBP/DBPHomeViewController.swift +++ b/DuckDuckGo/DBP/DBPHomeViewController.swift @@ -147,8 +147,6 @@ final class DBPHomeViewController: NSViewController { case .valid: displayDBPUI() pixelHandler.fire(.homeViewShowWebUI) - case .unverified: - break } } diff --git a/DuckDuckGo/DBP/DataBrokerPrerequisitesStatusVerifier.swift b/DuckDuckGo/DBP/DataBrokerPrerequisitesStatusVerifier.swift index 2617e45957..f5f5c4d091 100644 --- a/DuckDuckGo/DBP/DataBrokerPrerequisitesStatusVerifier.swift +++ b/DuckDuckGo/DBP/DataBrokerPrerequisitesStatusVerifier.swift @@ -24,7 +24,6 @@ import LoginItems enum DataBrokerPrerequisitesStatus { case invalidDirectory case invalidSystemPermission - case unverified case valid } @@ -33,11 +32,16 @@ protocol DataBrokerPrerequisitesStatusVerifier: AnyObject { } final class DefaultDataBrokerPrerequisitesStatusVerifier: DataBrokerPrerequisitesStatusVerifier { + private let statusChecker: DBPLoginItemStatusChecker + + init(statusChecker: DBPLoginItemStatusChecker = LoginItem.dbpBackgroundAgent) { + self.statusChecker = statusChecker + } func checkStatus() -> DataBrokerPrerequisitesStatus { - if !LoginItem.dbpBackgroundAgent.doesHaveNecessaryPermissions() { + if !statusChecker.doesHaveNecessaryPermissions() { return .invalidSystemPermission - } else if !LoginItem.dbpBackgroundAgent.isInCorrectDirectory() { + } else if !statusChecker.isInCorrectDirectory() { return .invalidDirectory } else { return .valid diff --git a/UnitTests/DBP/DataBrokerPrerequisitesStatusVerifierTests.swift b/UnitTests/DBP/DataBrokerPrerequisitesStatusVerifierTests.swift new file mode 100644 index 0000000000..02c94e7feb --- /dev/null +++ b/UnitTests/DBP/DataBrokerPrerequisitesStatusVerifierTests.swift @@ -0,0 +1,73 @@ +// +// DataBrokerPrerequisitesStatusVerifierTests.swift +// +// Copyright © 2024 DuckDuckGo. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest +@testable import DuckDuckGo_Privacy_Browser +import DataBrokerProtection + +final class DataBrokerPrerequisitesStatusVerifierTests: XCTestCase { + private let statusChecker = MockDBPLoginItemStatusChecker() + + override func setUpWithError() throws { + } + + override func tearDownWithError() throws { + statusChecker.reset() + } + + func testIncorrectDirectory_thenReturnIncorrectDirectoryStatus() { + statusChecker.isInCorrectDirectoryValue = false + let result = DefaultDataBrokerPrerequisitesStatusVerifier(statusChecker: statusChecker).checkStatus() + XCTAssertEqual(result, DataBrokerPrerequisitesStatus.invalidDirectory) + } + + func testIncorrectPermission_thenReturnIncorrectPermissionStatus() { + statusChecker.doesHavePermissionValue = false + let result = DefaultDataBrokerPrerequisitesStatusVerifier(statusChecker: statusChecker).checkStatus() + XCTAssertEqual(result, DataBrokerPrerequisitesStatus.invalidSystemPermission) + } + + func testIncorrectDirectoryAndIncorrectPermission_thenReturnIncorrectPermissionStatus() { + statusChecker.isInCorrectDirectoryValue = false + statusChecker.doesHavePermissionValue = false + let result = DefaultDataBrokerPrerequisitesStatusVerifier(statusChecker: statusChecker).checkStatus() + XCTAssertEqual(result, DataBrokerPrerequisitesStatus.invalidSystemPermission) + } + + func testCorrectStatus_thenReturnValidStatus() { + let result = DefaultDataBrokerPrerequisitesStatusVerifier(statusChecker: statusChecker).checkStatus() + XCTAssertEqual(result, DataBrokerPrerequisitesStatus.valid) + } +} + +private final class MockDBPLoginItemStatusChecker: DBPLoginItemStatusChecker { + var doesHavePermissionValue = true + var isInCorrectDirectoryValue = true + + func doesHaveNecessaryPermissions() -> Bool { + return doesHavePermissionValue + } + func isInCorrectDirectory() -> Bool { + return isInCorrectDirectoryValue + } + + func reset() { + doesHavePermissionValue = true + isInCorrectDirectoryValue = true + } +}