diff --git a/NetworkShareMounterTests/Info.plist b/NetworkShareMounterTests/Info.plist deleted file mode 100644 index fb402aae230c3e7abbd688af0e4871fe3777e2c5..0000000000000000000000000000000000000000 --- a/NetworkShareMounterTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>$(DEVELOPMENT_LANGUAGE)</string> - <key>CFBundleExecutable</key> - <string>$(EXECUTABLE_NAME)</string> - <key>CFBundleIdentifier</key> - <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>$(PRODUCT_NAME)</string> - <key>CFBundlePackageType</key> - <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleVersion</key> - <string>1</string> -</dict> -</plist> diff --git a/NetworkShareMounterTests/ManagerTests/KeychainManagerMockTests.swift b/NetworkShareMounterTests/ManagerTests/KeychainManagerMockTests.swift deleted file mode 100644 index 7288bc44c94d982abffd794bce6916db57cc2199..0000000000000000000000000000000000000000 --- a/NetworkShareMounterTests/ManagerTests/KeychainManagerMockTests.swift +++ /dev/null @@ -1,151 +0,0 @@ -import XCTest -@testable import Network_Share_Mounter - -final class KeychainManagerMockTests: XCTestCase { - - // Test with mocked KeychainManager to avoid real keychain access - class KeychainManagerMock: KeychainManager { - var savedCredentials: [String: [String: String]] = [:] - var makeQueryCalled = false - var shouldThrowOnMakeQuery = false - var shouldThrowOnSave = false - var shouldThrowOnRetrieve = false - - override func makeQuery(share shareURL: URL, username: String, service: String? = nil, accessGroup: String? = nil, comment: String? = nil) throws -> [String: Any] { - makeQueryCalled = true - - if shouldThrowOnMakeQuery { - throw KeychainError.malformedShare - } - - return ["mockKey": "mockValue"] - } - - override func makeQuery(username: String, service: String = Defaults.keyChainService, accessGroup: String? = nil, label: String? = nil, comment: String? = nil) throws -> [String: Any] { - makeQueryCalled = true - - if shouldThrowOnMakeQuery { - throw KeychainError.malformedShare - } - - return ["mockKey": "mockValue"] - } - - override func saveCredential(forShare share: URL, withUsername username: String, andPassword password: String, withLabel label: String? = Defaults.keyChainService, accessGroup: String? = Defaults.keyChainAccessGroup, comment: String? = nil) throws { - if shouldThrowOnSave { - throw KeychainError.undefinedError - } - - let key = "\(share.absoluteString)|\(username)" - savedCredentials[key] = ["username": username, "password": password] - } - - override func saveCredential(forUsername username: String, andPassword password: String, withService service: String = Defaults.keyChainService, andLabel label: String? = nil, accessGroup: String? = nil, comment: String? = nil) throws { - if shouldThrowOnSave { - throw KeychainError.undefinedError - } - - let key = "\(service)|\(username)" - savedCredentials[key] = ["username": username, "password": password] - } - - override func retrievePassword(forShare share: URL, withUsername username: String) throws -> String? { - if shouldThrowOnRetrieve { - throw KeychainError.errorRetrievingPassword - } - - let key = "\(share.absoluteString)|\(username)" - return savedCredentials[key]?["password"] - } - - override func retrievePassword(forUsername username: String, andService service: String = Defaults.keyChainService, accessGroup: String? = nil) throws -> String? { - if shouldThrowOnRetrieve { - throw KeychainError.errorRetrievingPassword - } - - let key = "\(service)|\(username)" - return savedCredentials[key]?["password"] - } - - override func removeCredential(forShare share: URL, withUsername username: String) throws { - let key = "\(share.absoluteString)|\(username)" - savedCredentials.removeValue(forKey: key) - } - - override func removeCredential(forUsername username: String, andService service: String = Defaults.keyChainService, accessGroup: String = Defaults.keyChainAccessGroup) throws { - let key = "\(service)|\(username)" - savedCredentials.removeValue(forKey: key) - } - } - - var mockKeychainManager: KeychainManagerMock! - - override func setUpWithError() throws { - mockKeychainManager = KeychainManagerMock() - } - - override func tearDownWithError() throws { - mockKeychainManager = nil - } - - // MARK: - Tests with Mocks - - func testSaveAndRetrieveWithMock() throws { - let testURL = URL(string: "smb://testserver.example.com/testshare")! - let testUsername = "testuser" - let testPassword = "testpassword" - - // Save credential - try mockKeychainManager.saveCredential(forShare: testURL, withUsername: testUsername, andPassword: testPassword) - - // Retrieve and verify - let retrievedPassword = try mockKeychainManager.retrievePassword(forShare: testURL, withUsername: testUsername) - XCTAssertEqual(retrievedPassword, testPassword) - } - - func testErrorHandlingWithMock() throws { - let testURL = URL(string: "smb://testserver.example.com/testshare")! - let testUsername = "testuser" - - // Set mock to throw on retrieve - mockKeychainManager.shouldThrowOnRetrieve = true - - XCTAssertThrowsError(try mockKeychainManager.retrievePassword(forShare: testURL, withUsername: testUsername)) { error in - XCTAssertEqual(error as? KeychainError, KeychainError.errorRetrievingPassword) - } - } - - func testRemoveCredentialWithMock() throws { - let testURL = URL(string: "smb://testserver.example.com/testshare")! - let testUsername = "testuser" - let testPassword = "testpassword" - - // Save credential - try mockKeychainManager.saveCredential(forShare: testURL, withUsername: testUsername, andPassword: testPassword) - - // Verify it exists - XCTAssertNotNil(try mockKeychainManager.retrievePassword(forShare: testURL, withUsername: testUsername)) - - // Remove credential - try mockKeychainManager.removeCredential(forShare: testURL, withUsername: testUsername) - - // Verify it's gone - XCTAssertNil(try mockKeychainManager.retrievePassword(forShare: testURL, withUsername: testUsername)) - } - - func testMultipleCredentialsWithMock() throws { - let testURL1 = URL(string: "smb://server1.example.com/share1")! - let testURL2 = URL(string: "smb://server2.example.com/share2")! - let testUsername = "testuser" - let testPassword1 = "password1" - let testPassword2 = "password2" - - // Save credentials - try mockKeychainManager.saveCredential(forShare: testURL1, withUsername: testUsername, andPassword: testPassword1) - try mockKeychainManager.saveCredential(forShare: testURL2, withUsername: testUsername, andPassword: testPassword2) - - // Verify both exist with correct values - XCTAssertEqual(try mockKeychainManager.retrievePassword(forShare: testURL1, withUsername: testUsername), testPassword1) - XCTAssertEqual(try mockKeychainManager.retrievePassword(forShare: testURL2, withUsername: testUsername), testPassword2) - } -} \ No newline at end of file diff --git a/NetworkShareMounterTests/ManagerTests/KeychainManagerTests.swift b/NetworkShareMounterTests/ManagerTests/KeychainManagerTests.swift deleted file mode 100644 index 20f4943bf8e88d653af5d2a4269c6ba469f81294..0000000000000000000000000000000000000000 --- a/NetworkShareMounterTests/ManagerTests/KeychainManagerTests.swift +++ /dev/null @@ -1,144 +0,0 @@ -import XCTest -@testable import Network_Share_Mounter - -final class KeychainManagerTests: XCTestCase { - - var keychainManager: KeychainManager! - - // Test constants - let testShareURL = URL(string: "smb://testserver.example.com/testshare")! - let testUsername = "testuser" - let testPassword = "testpassword" - let testService = "de.fau.rrze.NetworkShareMounter.UNITTEST" - - override func setUpWithError() throws { - keychainManager = KeychainManager() - // Clean up any test data from previous test runs - try? keychainManager.removeCredential(forShare: testShareURL, withUsername: testUsername) - try? keychainManager.removeCredential(forUsername: testUsername, andService: testService) - } - - override func tearDownWithError() throws { - // Clean up after tests - try? keychainManager.removeCredential(forShare: testShareURL, withUsername: testUsername) - try? keychainManager.removeCredential(forUsername: testUsername, andService: testService) - keychainManager = nil - } - - // MARK: - Query Generation Tests - - func testMakeQueryForShare() throws { - let query = try keychainManager.makeQuery(share: testShareURL, username: testUsername) - - XCTAssertEqual(query[kSecClass as String] as? String, kSecClassInternetPassword as String) - XCTAssertEqual(query[kSecAttrAccount as String] as? String, testUsername) - XCTAssertEqual(query[kSecAttrServer as String] as? String, testShareURL.host) - XCTAssertEqual(query[kSecAttrPath as String] as? String, testShareURL.lastPathComponent) - } - - func testMakeQueryForUsername() throws { - let query = try keychainManager.makeQuery(username: testUsername, service: testService) - - XCTAssertEqual(query[kSecClass as String] as? String, kSecClassGenericPassword as String) - XCTAssertEqual(query[kSecAttrAccount as String] as? String, testUsername) - XCTAssertEqual(query[kSecAttrService as String] as? String, testService) - } - - func testMakeQueryWithMalformedURL() throws { - let invalidURL = URL(string: "smb:")! - - XCTAssertThrowsError(try keychainManager.makeQuery(share: invalidURL, username: testUsername)) { error in - XCTAssertEqual(error as? KeychainError, KeychainError.malformedShare) - } - } - - // MARK: - Credential Storage and Retrieval Tests - - func testSaveAndRetrieveShareCredential() throws { - // Save credential - try keychainManager.saveCredential(forShare: testShareURL, withUsername: testUsername, andPassword: testPassword) - - // Retrieve and verify - let retrievedPassword = try keychainManager.retrievePassword(forShare: testShareURL, withUsername: testUsername) - XCTAssertEqual(retrievedPassword, testPassword) - } - - func testSaveAndRetrieveUsernameCredential() throws { - // Save credential - try keychainManager.saveCredential(forUsername: testUsername, andPassword: testPassword, withService: testService) - - // Retrieve and verify - let retrievedPassword = try keychainManager.retrievePassword(forUsername: testUsername, andService: testService) - XCTAssertEqual(retrievedPassword, testPassword) - } - - func testOverwriteExistingCredential() throws { - // Save initial credential - try keychainManager.saveCredential(forShare: testShareURL, withUsername: testUsername, andPassword: testPassword) - - // Overwrite with new password - let newPassword = "newpassword" - try keychainManager.saveCredential(forShare: testShareURL, withUsername: testUsername, andPassword: newPassword) - - // Verify new password is stored - let retrievedPassword = try keychainManager.retrievePassword(forShare: testShareURL, withUsername: testUsername) - XCTAssertEqual(retrievedPassword, newPassword) - } - - // MARK: - Credential Removal Tests - - func testRemoveShareCredential() throws { - // Save credential - try keychainManager.saveCredential(forShare: testShareURL, withUsername: testUsername, andPassword: testPassword) - - // Verify it exists - XCTAssertNoThrow(try keychainManager.retrievePassword(forShare: testShareURL, withUsername: testUsername)) - - // Remove credential - try keychainManager.removeCredential(forShare: testShareURL, withUsername: testUsername) - - // Verify it's gone - should throw error - XCTAssertThrowsError(try keychainManager.retrievePassword(forShare: testShareURL, withUsername: testUsername)) - } - - func testRemoveUsernameCredential() throws { - // Save credential - try keychainManager.saveCredential(forUsername: testUsername, andPassword: testPassword, withService: testService) - - // Verify it exists - XCTAssertNoThrow(try keychainManager.retrievePassword(forUsername: testUsername, andService: testService)) - - // Remove credential - try keychainManager.removeCredential(forUsername: testUsername, andService: testService) - - // Verify it's gone - should throw error - XCTAssertThrowsError(try keychainManager.retrievePassword(forUsername: testUsername, andService: testService)) - } - - func testRemoveNonExistentCredential() throws { - // Should not throw when trying to remove non-existent credential - XCTAssertNoThrow(try keychainManager.removeCredential(forShare: testShareURL, withUsername: "nonexistentuser")) - } - - // MARK: - Error Handling Tests - - func testInvalidPasswordEncoding() throws { - // Creating a string that can't be encoded in UTF-8 is difficult in Swift, - // as String is already UTF-8 compatible. This is more a conceptual test. - // In a real scenario, we'd need to create a mock or subclass to test this. - - // For now, we'll just verify the error path exists in the code - let mockManager = MockKeychainManager() - XCTAssertThrowsError(try mockManager.simulateEncodingFailure()) { error in - XCTAssertEqual(error as? KeychainError, KeychainError.unexpectedPasswordData) - } - } -} - -// Mock class for testing error conditions -class MockKeychainManager: KeychainManager { - func simulateEncodingFailure() throws { - // Simulate the code path where password encoding fails - throw KeychainError.unexpectedPasswordData - } -} \ No newline at end of file