From 6b359cd76dc6b78f2fa274435df7355cc3f4d7b5 Mon Sep 17 00:00:00 2001 From: kp-laura-sempere <46663952+kp-laura-sempere@users.noreply.github.com> Date: Mon, 8 Jul 2024 12:15:11 +0200 Subject: [PATCH] KM-4542: Update error thrown from failed login request (#50) --- .../Account/DefaultAccountProvider.swift | 2 +- .../Account/Domain/UseCases/LoginUseCase.swift | 17 +++++++++++------ .../Accounts/LoginUseCaseTests.swift | 15 ++++++++++----- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Sources/PIALibrary/Account/DefaultAccountProvider.swift b/Sources/PIALibrary/Account/DefaultAccountProvider.swift index 734e4a8e..158713b9 100644 --- a/Sources/PIALibrary/Account/DefaultAccountProvider.swift +++ b/Sources/PIALibrary/Account/DefaultAccountProvider.swift @@ -257,7 +257,7 @@ open class DefaultAccountProvider: AccountProvider, ConfigurationAccess, Databas loginUseCase.login(with: credentials) { error in DispatchQueue.main.async { - self.handleLoginResult(error: error, credentials: credentials, notificationToSend: notificationToSend, callback: callback) + self.handleLoginResult(error: error?.asClientError(), credentials: credentials, notificationToSend: notificationToSend, callback: callback) } } } diff --git a/Sources/PIALibrary/Account/Domain/UseCases/LoginUseCase.swift b/Sources/PIALibrary/Account/Domain/UseCases/LoginUseCase.swift index 5e6fccf0..b645db66 100644 --- a/Sources/PIALibrary/Account/Domain/UseCases/LoginUseCase.swift +++ b/Sources/PIALibrary/Account/Domain/UseCases/LoginUseCase.swift @@ -75,13 +75,14 @@ private extension LoginUseCase { guard let self else { return } - if let error { - completion(error) + if error != nil { + + completion(.unauthorized) } else if let dataResponse { let shouldSaveToken = configuration.path == .login self.handleDataResponse(dataResponse, shouldSaveTokenFromResponse: shouldSaveToken, completion: completion) } else { - completion(NetworkRequestError.allConnectionAttemptsFailed()) + completion(.unauthorized) } } } @@ -90,7 +91,7 @@ private extension LoginUseCase { if shouldSaveTokenFromResponse { guard let dataResponseContent = dataResponse.data else { - completion(NetworkRequestError.noDataContent) + completion(.unauthorized) return } saveAPIToken(from: dataResponseContent, completion: completion) @@ -105,11 +106,15 @@ private extension LoginUseCase { try apiTokenProvider.saveAPIToken(from: data) // Refresh the Vpn token after successfully login refreshVpnTokenUseCase() { error in - completion(error) + if error != nil { + completion(.unauthorized) + } else { + completion(nil) + } } } catch { - completion(NetworkRequestError.unableToSaveAPIToken) + completion(.unauthorized) } } } diff --git a/Tests/PIALibraryTests/Accounts/LoginUseCaseTests.swift b/Tests/PIALibraryTests/Accounts/LoginUseCaseTests.swift index 9fbbe3fb..0dd3151c 100644 --- a/Tests/PIALibraryTests/Accounts/LoginUseCaseTests.swift +++ b/Tests/PIALibraryTests/Accounts/LoginUseCaseTests.swift @@ -145,8 +145,9 @@ class LoginUseCaseTests: XCTestCase { // AND the Vpn token is NOT refreshed XCTAssertEqual(fixture.refreshVpnTokenUseCaseMock.callAsFunctionCalledAttempt, 0) - // AND an error is returned + // AND an 'unauthorized' error is returned XCTAssertNotNil(capturedError) + XCTAssertEqual(capturedError!, .unauthorized) } @@ -177,8 +178,9 @@ class LoginUseCaseTests: XCTestCase { // AND the Vpn token is NOT refreshed XCTAssertEqual(fixture.refreshVpnTokenUseCaseMock.callAsFunctionCalledAttempt, 0) - // AND an error is returned + // AND an 'unauthorized' error is returned XCTAssertNotNil(capturedError) + XCTAssertEqual(capturedError!, .unauthorized) } @@ -244,8 +246,9 @@ class LoginUseCaseTests: XCTestCase { // AND the Vpn token is NOT refreshed XCTAssertEqual(fixture.refreshVpnTokenUseCaseMock.callAsFunctionCalledAttempt, 0) - // AND an error is returned + // AND an 'unauthorized' error is returned XCTAssertNotNil(capturedError) + XCTAssertEqual(capturedError!, .unauthorized) } @@ -275,8 +278,9 @@ class LoginUseCaseTests: XCTestCase { // AND the Vpn token is NOT refreshed XCTAssertEqual(fixture.refreshVpnTokenUseCaseMock.callAsFunctionCalledAttempt, 0) - // AND an error is returned + // AND an 'unauthorized' error is returned XCTAssertNotNil(capturedError) + XCTAssertEqual(capturedError!, .unauthorized) } @@ -334,8 +338,9 @@ class LoginUseCaseTests: XCTestCase { XCTAssertEqual(fixture.networkClientMock.executeRequestCalledAttempt, 1) XCTAssertEqual(fixture.networkClientMock.executeRequestWithConfiguation?.path, RequestAPI.Path.loginLink) - // AND an error is returned + // AND an 'unauthorized' error is returned XCTAssertNotNil(capturedError) + XCTAssertEqual(capturedError!, .unauthorized) }