diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/controller/TestLocalizationController.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/controller/TestLocalizationController.kt index 92b0890..105b5b3 100644 --- a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/controller/TestLocalizationController.kt +++ b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/controller/TestLocalizationController.kt @@ -75,7 +75,7 @@ class TestLocalizationController { @Test fun `Given Case 2, When get() is called, Then Case 2 expected result is returned`() { // Arrange - val localizableKey = LocalizableKey.Sign + val localizableKey = LocalizableKey.SignDocument val config = testConfiguration( translations = diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestOptionsSelectionInteractor.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestOptionsSelectionInteractor.kt new file mode 100644 index 0000000..a316246 --- /dev/null +++ b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestOptionsSelectionInteractor.kt @@ -0,0 +1,384 @@ +/* + * Copyright (c) 2023 European Commission + * + * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European + * Commission - subsequent versions of the EUPL (the "Licence"); You may not use this work + * except in compliance with the Licence. + * + * You may obtain a copy of the Licence at: + * https://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the Licence is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the Licence for the specific language + * governing permissions and limitations under the Licence. + */ + +package eu.europa.ec.eudi.rqesui.domain.interactor + +import eu.europa.ec.eudi.rqes.core.RQESService +import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesAuthorizeServicePartialState +import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetCertificatesPartialState +import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetCredentialAuthorizationUrlPartialState +import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetSelectedFilePartialState +import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetSelectedQtspPartialState +import eu.europa.ec.eudi.rqesui.domain.controller.RqesController +import eu.europa.ec.eudi.rqesui.domain.entities.error.EudiRQESUiError +import eu.europa.ec.eudi.rqesui.domain.extension.toUri +import eu.europa.ec.eudi.rqesui.infrastructure.config.data.CertificateData +import eu.europa.ec.eudi.rqesui.infrastructure.config.data.DocumentData +import eu.europa.ec.eudi.rqesui.infrastructure.config.data.QtspData +import eu.europa.ec.eudi.rqesui.infrastructure.provider.ResourceProvider +import eu.europa.ec.eudi.rqesui.util.CoroutineTestRule +import eu.europa.ec.eudi.rqesui.util.mockedAuthorizationUrl +import eu.europa.ec.eudi.rqesui.util.mockedExceptionWithMessage +import eu.europa.ec.eudi.rqesui.util.mockedGenericErrorMessage +import eu.europa.ec.eudi.rqesui.util.mockedPlainFailureMessage +import eu.europa.ec.eudi.rqesui.util.runTest +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertTrue +import org.junit.After +import org.junit.Before +import org.junit.Rule +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.MockitoAnnotations +import org.mockito.kotlin.times +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import kotlin.test.Test + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class TestOptionsSelectionInteractor { + + @get:Rule + val coroutineRule = CoroutineTestRule() + + @Mock + private lateinit var eudiController: RqesController + + @Mock + private lateinit var resourceProvider: ResourceProvider + + @Mock + private lateinit var rqesService: RQESService + + @Mock + private lateinit var rqesServiceAuthorized: RQESService.Authorized + + @Mock + private lateinit var qtspData: QtspData + + @Mock + private lateinit var certificateData: CertificateData + + @Mock + private lateinit var documentData: DocumentData + + private lateinit var closeable: AutoCloseable + private lateinit var interactor: OptionsSelectionInteractor + + @Before + fun setUp() { + closeable = MockitoAnnotations.openMocks(this) + interactor = OptionsSelectionInteractorImpl( + eudiRqesController = eudiController, + resourceProvider = resourceProvider + ) + whenever(resourceProvider.genericErrorMessage()) + .thenReturn(mockedGenericErrorMessage) + } + + @After + fun after() { + closeable.close() + } + + //region getQtsps + @Test + fun `When getQtsps is called, Then getQtsps of the eudiController is called`() { + // When + interactor.getQtsps() + + // Then + verify(eudiController, times(1)) + .getQtsps() + } + //endregion + + //region getSelectedFile + @Test + fun `When getSelectedFile is called, Then controller getSelectedFile is called`() { + // When + interactor.getSelectedFile() + + // Then + verify(eudiController, times(1)) + .getSelectedFile() + } + //endregion + + //region updateQtspUserSelection + @Test + fun `When updateQtspUserSelection is called, Then controller setSelectedQtsp is called`() { + // When + interactor.updateQtspUserSelection(qtspData) + + // Then + verify(eudiController, times(1)) + .setSelectedQtsp(qtspData) + } + //endregion + + //region getServiceAuthorizationUrl + @Test + fun `When getServiceAuthorizationUrl is called, Then controller getServiceAuthorizationUrl is called`() = + coroutineRule.runTest { + // When + interactor.getServiceAuthorizationUrl(rqesService) + + // Then + verify(eudiController, times(1)) + .getServiceAuthorizationUrl(rqesService) + } + //endregion + + //region authorizeServiceAndFetchCertificates + @Test + fun `Given service authorization and certificate fetch succeed, When authorizeServiceAndFetchCertificates is called, Then return Success`() = + coroutineRule.runTest { + // Arrange + val certificateDataList = listOf(certificateData) + mockAuthorizeServiceCall( + EudiRqesAuthorizeServicePartialState.Success(authorizedService = rqesServiceAuthorized) + ) + mockGetAvailableCertificatesCall( + EudiRqesGetCertificatesPartialState.Success(certificates = certificateDataList) + ) + + // Act + val result = interactor.authorizeServiceAndFetchCertificates() + + // Assert + assertTrue(result is OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Success) + assertEquals( + certificateDataList, + (result as OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Success).certificates + ) + verify(eudiController).setAuthorizedService(rqesServiceAuthorized) + } + + @Test + fun `Given that service authorization fails, When authorizeServiceAndFetchCertificates is called, Then return Failure`() = + coroutineRule.runTest { + // Arrange + val error = EudiRQESUiError(message = mockedPlainFailureMessage) + mockAuthorizeServiceCall( + EudiRqesAuthorizeServicePartialState.Failure(error) + ) + + // Act + val result = interactor.authorizeServiceAndFetchCertificates() + + // Assert + assertTrue(result is OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure) + assertEquals( + error, + (result as OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure).error + ) + } + + @Test + fun `Given service authorization fails with exception thrown, When authorizeServiceAndFetchCertificates is called, Then Case 3 expected result is returned`() = + coroutineRule.runTest { + // Arrange + whenever(eudiController.authorizeService()) + .thenThrow(mockedExceptionWithMessage) + + // Act + val result = interactor.authorizeServiceAndFetchCertificates() + + // Assert + assertTrue(result is OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure) + assertEquals( + mockedExceptionWithMessage.message, + (result as OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure).error.message + ) + } + + @Test + fun `Given service authorization succeeds but certificate fetch fails, When authorizeServiceAndFetchCertificates is called, Then return Failure`() = + coroutineRule.runTest { + // Arrange + val error = EudiRQESUiError(message = mockedPlainFailureMessage) + mockAuthorizeServiceCall( + EudiRqesAuthorizeServicePartialState.Success(authorizedService = rqesServiceAuthorized) + ) + mockGetAvailableCertificatesCall( + EudiRqesGetCertificatesPartialState.Failure(error = error) + ) + + // Act + val result = interactor.authorizeServiceAndFetchCertificates() + + // Assert + assertTrue(result is OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure) + assertEquals( + error, + (result as OptionsSelectionInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure).error + ) + } + //endregion + + //region getSelectedFileAndQtsp + @Test + fun `Given both file and qtsp are selected, When getSelectedFileAndQtsp is called, Then return Success`() { + // Arrange + whenever(eudiController.getSelectedFile()) + .thenReturn(EudiRqesGetSelectedFilePartialState.Success(file = documentData)) + whenever(eudiController.getSelectedQtsp()) + .thenReturn(EudiRqesGetSelectedQtspPartialState.Success(qtsp = qtspData)) + + // Act + val result = interactor.getSelectedFileAndQtsp() + + // Assert + assertTrue(result is OptionsSelectionInteractorGetSelectedFileAndQtspPartialState.Success) + with(result as OptionsSelectionInteractorGetSelectedFileAndQtspPartialState.Success) { + assertEquals(documentData, selectedFile) + assertEquals(qtspData, selectedQtsp) + } + } + + @Test + fun `Given selected file retrieval fails, When getSelectedFileAndQtsp is called, Then return Failure`() { + // Arrange + val error = EudiRQESUiError(message = mockedPlainFailureMessage) + whenever(eudiController.getSelectedFile()) + .thenReturn(EudiRqesGetSelectedFilePartialState.Failure(error)) + + // Act + val result = interactor.getSelectedFileAndQtsp() + + // Assert + assertTrue(result is OptionsSelectionInteractorGetSelectedFileAndQtspPartialState.Failure) + assertEquals( + error, + (result as OptionsSelectionInteractorGetSelectedFileAndQtspPartialState.Failure).error + ) + } + + @Test + fun `Given selected QTSP retrieval fails, When getSelectedFileAndQtsp is called, Then return Failure`() { + // Arrange + whenever(eudiController.getSelectedFile()) + .thenReturn(EudiRqesGetSelectedFilePartialState.Success(file = documentData)) + val failureError = EudiRQESUiError(message = mockedPlainFailureMessage) + whenever(eudiController.getSelectedQtsp()) + .thenReturn(EudiRqesGetSelectedQtspPartialState.Failure(error = failureError)) + + // Act + val result = interactor.getSelectedFileAndQtsp() + + // Assert + assertTrue(result is OptionsSelectionInteractorGetSelectedFileAndQtspPartialState.Failure) + assertEquals( + failureError, + (result as OptionsSelectionInteractorGetSelectedFileAndQtspPartialState.Failure).error + ) + } + //endregion + + //region getCredentialAuthorizationUrl + @Test + fun `Given authorized service exists, When getCredentialAuthorizationUrl called, Then return Success`() = + coroutineRule.runTest { + // Arrange + val successResponse = EudiRqesGetCredentialAuthorizationUrlPartialState.Success( + authorizationUrl = mockedAuthorizationUrl.toUri() + ) + whenever(eudiController.getAuthorizedService()).thenReturn(rqesServiceAuthorized) + mockGetCredentialAuthorizationUrlCall(successResponse) + + // Act + val result = interactor.getCredentialAuthorizationUrl(certificateData) + + // Assert + assertEquals(successResponse, result) + } + + @Test + fun `Given getAuthorizedService returns null, When getCredentialAuthorizationUrl called, Then return Failure with generic message`() = + coroutineRule.runTest { + // Arrange + whenever(eudiController.getAuthorizedService()) + .thenReturn(null) + whenever(resourceProvider.genericErrorMessage()) + .thenReturn(mockedGenericErrorMessage) + + // Act + val result = interactor.getCredentialAuthorizationUrl(certificateData) + + // Assert + assertTrue(result is EudiRqesGetCredentialAuthorizationUrlPartialState.Failure) + assertEquals( + mockedGenericErrorMessage, + (result as EudiRqesGetCredentialAuthorizationUrlPartialState.Failure).error.message + ) + } + + @Test + fun `Given getCredentialAuthorizationUrl returns Failure, When getCredentialAuthorizationUrl is called, Then Failure state is returned`() = + coroutineRule.runTest { + // Arrange + val expectedError = EudiRQESUiError(message = mockedPlainFailureMessage) + val failureResponse = EudiRqesGetCredentialAuthorizationUrlPartialState.Failure( + error = expectedError + ) + + whenever(eudiController.getAuthorizedService()) + .thenReturn(rqesServiceAuthorized) + whenever( + eudiController.getCredentialAuthorizationUrl( + authorizedService = rqesServiceAuthorized, + certificateData = certificateData + ) + ).thenReturn(failureResponse) + + // Act + val result = interactor.getCredentialAuthorizationUrl(certificateData) + + // Assert + assertTrue(result is EudiRqesGetCredentialAuthorizationUrlPartialState.Failure) + assertEquals( + expectedError, + (result as EudiRqesGetCredentialAuthorizationUrlPartialState.Failure).error + ) + } + //endregion + + //region Helper Functions + private suspend fun mockAuthorizeServiceCall(response: EudiRqesAuthorizeServicePartialState) { + whenever(eudiController.authorizeService()).thenReturn(response) + } + + private suspend fun mockGetAvailableCertificatesCall(response: EudiRqesGetCertificatesPartialState) { + whenever(eudiController.getAvailableCertificates(rqesServiceAuthorized)) + .thenReturn(response) + } + + private suspend fun mockGetCredentialAuthorizationUrlCall( + response: EudiRqesGetCredentialAuthorizationUrlPartialState + ) { + whenever( + eudiController.getCredentialAuthorizationUrl( + authorizedService = rqesServiceAuthorized, + certificateData = certificateData + ) + ).thenReturn(response) + } + //endregion +} \ No newline at end of file diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectCertificateInteractor.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectCertificateInteractor.kt deleted file mode 100644 index 47d2c9a..0000000 --- a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectCertificateInteractor.kt +++ /dev/null @@ -1,390 +0,0 @@ -/* - * Copyright (c) 2023 European Commission - * - * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European - * Commission - subsequent versions of the EUPL (the "Licence"); You may not use this work - * except in compliance with the Licence. - * - * You may obtain a copy of the Licence at: - * https://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software distributed under - * the Licence is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF - * ANY KIND, either express or implied. See the Licence for the specific language - * governing permissions and limitations under the Licence. - */ - -package eu.europa.ec.eudi.rqesui.domain.interactor - -/* -import eu.europa.ec.eudi.rqes.core.RQESService -import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesAuthorizeServicePartialState -import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetCertificatesPartialState -import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetCredentialAuthorizationUrlPartialState -import eu.europa.ec.eudi.rqesui.domain.controller.RqesController -import eu.europa.ec.eudi.rqesui.domain.entities.error.EudiRQESUiError -import eu.europa.ec.eudi.rqesui.domain.extension.toUri -import eu.europa.ec.eudi.rqesui.infrastructure.config.data.CertificateData -import eu.europa.ec.eudi.rqesui.infrastructure.provider.ResourceProvider -import eu.europa.ec.eudi.rqesui.util.CoroutineTestRule -import eu.europa.ec.eudi.rqesui.util.mockedAuthorizationUrl -import eu.europa.ec.eudi.rqesui.util.mockedExceptionWithMessage -import eu.europa.ec.eudi.rqesui.util.mockedGenericErrorMessage -import eu.europa.ec.eudi.rqesui.util.mockedPlainFailureMessage -import eu.europa.ec.eudi.rqesui.util.runTest -import junit.framework.TestCase.assertEquals -import junit.framework.TestCase.assertTrue -import org.junit.After -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.MockitoAnnotations -import org.mockito.kotlin.times -import org.mockito.kotlin.verify -import org.mockito.kotlin.whenever -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config - -@RunWith(RobolectricTestRunner::class) -@Config(manifest = Config.NONE) -class TestSelectCertificateInteractor { - - @get:Rule - val coroutineRule = CoroutineTestRule() - - @Mock - private lateinit var eudiController: RqesController - - @Mock - private lateinit var resourceProvider: ResourceProvider - - @Mock - private lateinit var rqesServiceAuthorized: RQESService.Authorized - - @Mock - private lateinit var certificateData: CertificateData - - private lateinit var closeable: AutoCloseable - - private lateinit var interactor: SelectCertificateInteractor - - @Before - fun setUp() { - closeable = MockitoAnnotations.openMocks(this) - interactor = SelectCertificateInteractorImpl(resourceProvider, eudiController) - whenever(resourceProvider.genericErrorMessage()) - .thenReturn(mockedGenericErrorMessage) - } - - @After - fun after() { - closeable.close() - } - - //region getSelectedFile - // Case 1: - // 1. Interactor's getSelectedFile is called. - // Case 1 Expected Result: - // 1. eudiController's getSelectedFile is called exactly once. - @Test - fun `Verify that getSelectedFile on the interactor calls getSelectedFile on the eudiController`() { - // When - interactor.getSelectedFile() - - // Then - verify(eudiController, times(1)) - .getSelectedFile() - } - //endregion - - //region authorizeServiceAndFetchCertificates - // Case 1: Testing when both service authorization and fetching certificates are successful - // Case 1 Expected Result: - // 1. The interactor should return a success result that contains a list of certificates. - // 2. The returned result should be of type `SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Success`. - // 3. The `eudiController`'s `setAuthorizedService` method should be called once with `rqesServiceAuthorized`, - @Test - fun `Given Case 1, When authorizeServiceAndFetchCertificates is called, Then Case 1 expected result is returned`() = - coroutineRule.runTest { - // Arrange - val listOfCertificates = listOf(certificateData) - mockAuthorizeServiceCall( - response = EudiRqesAuthorizeServicePartialState.Success( - authorizedService = rqesServiceAuthorized - ) - ) - mockGetAvailableCertificatesCall( - response = EudiRqesGetCertificatesPartialState.Success( - certificates = listOfCertificates - ) - ) - - // Act - val result = interactor.authorizeServiceAndFetchCertificates() - - // Assert - assertEquals( - SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Success( - certificates = listOfCertificates - ), - result - ) - verify(eudiController, times(1)) - .setAuthorizedService(rqesServiceAuthorized) - } - - // Case 2: Testing when service authorization fails - // Case 2 Expected Result: - // 1. The interactor should return a failure result when the service authorization fails. - // 2. The returned result should be of type `SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure`. - // 3. The failure should contain the mocked error from the service authorization failure. - // 4. The eudiController's `authorizeService` method should be called exactly once - @Test - fun `Given Case 2, When authorizeServiceAndFetchCertificates is called, Then Case 2 expected result is returned`() = - coroutineRule.runTest { - // Arrange - val mockError = EudiRQESUiError(message = mockedPlainFailureMessage) - mockAuthorizeServiceCall( - response = EudiRqesAuthorizeServicePartialState.Failure( - error = mockError - ) - ) - - // Act - val result = interactor.authorizeServiceAndFetchCertificates() - - // Assert - assertEquals( - SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure( - error = mockError - ), - result - ) - verify(eudiController, times(1)) - .authorizeService() - } - - // Case 3: Testing when an exception is thrown during the service authorization process - // Case 3 Expected Result: - // 1. The interactor should return a failure result when the service authorization throws an exception. - // 2. The returned result should be of type `SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure`. - // 3. The failure should contain the thrown exception. - // 4. The error message in the returned failure result should match the message of the thrown exception. - @Test - fun `Given Case 3, When authorizeServiceAndFetchCertificates is called, Then Case 3 expected result is returned`() = - coroutineRule.runTest { - // Arrange - whenever(eudiController.authorizeService()) - .thenThrow(mockedExceptionWithMessage) - - // Act - val result = interactor.authorizeServiceAndFetchCertificates() - - // Assert - assertTrue(result is SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure) - assertEquals( - mockedExceptionWithMessage.message, - (result as SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure).error.message - ) - } - - // Case 4: Testing when fetching certificates fails - // Case 4 Expected Result: - // 1. The interactor should return a failure result when fetching certificates fails. - // 2. The returned result should be of type `SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure`. - // 3. The failure should contain the error from `EudiRqesGetCertificatesPartialState.Failure`. - @Test - fun `Given Case 4, When authorizeServiceAndFetchCertificates is called, Then Case 4 expected result is returned`() = - coroutineRule.runTest { - // Arrange - val mockError = EudiRQESUiError(message = mockedPlainFailureMessage) - mockAuthorizeServiceCall( - response = EudiRqesAuthorizeServicePartialState.Success( - authorizedService = rqesServiceAuthorized - ) - ) - mockGetAvailableCertificatesCall( - response = EudiRqesGetCertificatesPartialState.Failure( - error = mockError - ) - ) - - // Act - val result = interactor.authorizeServiceAndFetchCertificates() - - // Assert - assertEquals( - SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState.Failure( - error = mockError - ), - result - ) - } - //endregion - - //region getCredentialAuthorizationUrl - // Case 1: Testing when getCredentialAuthorizationUrl successfully returns an authorization URL - // Case 1 Expected Result: - // 1. The interactor should call getCredentialAuthorizationUrl and return a success response containing the authorization URL. - // 2. The returned result should be of type `EudiRqesGetCredentialAuthorizationUrlPartialState.Success`. - // 3. The authorization Uri returned should match the mocked `mockedAuthorizationUrl` converted to Uri. - @Test - fun `Given Case 1, When getCredentialAuthorizationUrl is called, Then Case 1 expected result is returned`() = - coroutineRule.runTest { - // Arrange - val successResponse = - EudiRqesGetCredentialAuthorizationUrlPartialState.Success( - authorizationUrl = mockedAuthorizationUrl.toUri() - ) - - whenever(eudiController.getAuthorizedService()) - .thenReturn(rqesServiceAuthorized) - mockGetCredentialAuthorizationUrlCall(response = successResponse) - - // Act - val result = interactor.getCredentialAuthorizationUrl(certificate = certificateData) - - // Assert - assertEquals(successResponse, result) - } - - // Case 2: Testing when getCredentialAuthorizationUrl fails due to an error - // Case 2 Expected Result: - // 1. The interactor should call getCredentialAuthorizationUrl and return a failure response with a `mockedPlainFailureMessage`. - // 2. The returned result should be of type `EudiRqesGetCredentialAuthorizationUrlPartialState.Failure`. - // 3. The error in the returned result should match the `mockFailureError` passed in the failure response. - @Test - fun `Given Case 2, When getCredentialAuthorizationUrl is called, Then Case 2 expected result is returned`() = - coroutineRule.runTest { - // Arrange - val failureError = EudiRQESUiError( - message = mockedPlainFailureMessage - ) - val failureResponse = - EudiRqesGetCredentialAuthorizationUrlPartialState.Failure(error = failureError) - - whenever(eudiController.getAuthorizedService()) - .thenReturn(rqesServiceAuthorized) - mockGetCredentialAuthorizationUrlCall( - response = failureResponse - ) - - // Act - val result = interactor.getCredentialAuthorizationUrl(certificate = certificateData) - - // Assert - assertTrue(result is EudiRqesGetCredentialAuthorizationUrlPartialState.Failure) - assertEquals( - failureError, - (result as EudiRqesGetCredentialAuthorizationUrlPartialState.Failure).error - ) - } - - // Case 3: Testing when getCredentialAuthorizationUrl throws an exception - // Case 3 Expected Result: - // 1. The interactor should call getCredentialAuthorizationUrl and handle the exception thrown. - // 2. The returned result should be of type `EudiRqesGetCredentialAuthorizationUrlPartialState.Failure`. - // 3. The error message in the returned result should match the message of the thrown exception. - @Test - fun `Given Case 3, When getCredentialAuthorizationUrl is called, Then Case 3 expected result is returned`() = - coroutineRule.runTest { - // Arrange - whenever(eudiController.getAuthorizedService()) - .thenReturn(rqesServiceAuthorized) - whenever( - eudiController.getCredentialAuthorizationUrl( - authorizedService = rqesServiceAuthorized, - certificateData = certificateData - ) - ).thenThrow(mockedExceptionWithMessage) - - // Act - val result = interactor.getCredentialAuthorizationUrl(certificate = certificateData) - - // Assert - assertTrue(result is EudiRqesGetCredentialAuthorizationUrlPartialState.Failure) - assertEquals( - mockedExceptionWithMessage.message, - (result as EudiRqesGetCredentialAuthorizationUrlPartialState.Failure).error.message - ) - } - - // Case 4: - // Testing when the `getCredentialAuthorizationUrl` method is called, and the `getAuthorizedService` - // returns `null`. This simulates a case where no authorized service is available, triggering a fallback - // to a generic error message. - // Case 4 Expected Result: - // 1. The interactor should return a failure response of type `EudiRqesGetCredentialAuthorizationUrlPartialState.Failure`. - // 2. The error message in the failure response should match the `mockedGenericErrorMessage`. - @Test - fun `Given Case 4, When getCredentialAuthorizationUrl is called, Then Case 4 expected result is returned`() = - coroutineRule.runTest { - // Arrange - whenever(eudiController.getAuthorizedService()) - .thenReturn(null) - - // Act - val result = interactor.getCredentialAuthorizationUrl(certificate = certificateData) - - // Assert - assertTrue(result is EudiRqesGetCredentialAuthorizationUrlPartialState.Failure) - assertEquals( - mockedGenericErrorMessage, - (result as EudiRqesGetCredentialAuthorizationUrlPartialState.Failure).error.message - ) - } - - // Case 5 Description: - // Testing when the `getCredentialAuthorizationUrl` method is called and the `getAuthorizedService` - // returns a valid service but the `getCredentialAuthorizationUrl` method itself returns `null`. - // This simulates a case where the service does not provide a valid authorization URL. - // Case 5:Expected Result: - // 1. The interactor should return a failure response of type `EudiRqesGetCredentialAuthorizationUrlPartialState.Failure`. - // 2. The error message in the failure response should match the `mockedGenericErrorMessage`. - @Test - fun `Given Case 5, When getCredentialAuthorizationUrl is called, Then Case 5 expected result is returned`() = - coroutineRule.runTest { - // Arrange - whenever(eudiController.getAuthorizedService()) - .thenReturn(rqesServiceAuthorized) - whenever( - eudiController.getCredentialAuthorizationUrl( - authorizedService = rqesServiceAuthorized, - certificateData = certificateData - ) - ).thenReturn(null) - - // Act - val result = interactor.getCredentialAuthorizationUrl(certificate = certificateData) - - // Assert - assertTrue(result is EudiRqesGetCredentialAuthorizationUrlPartialState.Failure) - assertEquals( - mockedGenericErrorMessage, - (result as EudiRqesGetCredentialAuthorizationUrlPartialState.Failure).error.message - ) - } - //endregion getCredentialAuthorizationUrl - - //region helper functions - private suspend fun mockAuthorizeServiceCall(response: EudiRqesAuthorizeServicePartialState) { - whenever(eudiController.authorizeService()).thenReturn(response) - } - - private suspend fun mockGetAvailableCertificatesCall(response: EudiRqesGetCertificatesPartialState) { - whenever(eudiController.getAvailableCertificates(rqesServiceAuthorized)).thenReturn(response) - } - - private suspend fun mockGetCredentialAuthorizationUrlCall(response: EudiRqesGetCredentialAuthorizationUrlPartialState) { - whenever( - eudiController.getCredentialAuthorizationUrl( - authorizedService = rqesServiceAuthorized, - certificateData = certificateData - ) - ).thenReturn(response) - } - //endregion -} -*/ diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectQtspInteractor.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectQtspInteractor.kt deleted file mode 100644 index 8dac9bc..0000000 --- a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectQtspInteractor.kt +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2023 European Commission - * - * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European - * Commission - subsequent versions of the EUPL (the "Licence"); You may not use this work - * except in compliance with the Licence. - * - * You may obtain a copy of the Licence at: - * https://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software distributed under - * the Licence is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF - * ANY KIND, either express or implied. See the Licence for the specific language - * governing permissions and limitations under the Licence. - */ - -package eu.europa.ec.eudi.rqesui.domain.interactor - -/* -import eu.europa.ec.eudi.rqes.core.RQESService -import eu.europa.ec.eudi.rqesui.domain.controller.RqesController -import eu.europa.ec.eudi.rqesui.infrastructure.config.data.QtspData -import kotlinx.coroutines.test.runTest -import org.junit.After -import org.junit.Before -import org.junit.Test -import org.mockito.Mock -import org.mockito.MockitoAnnotations -import org.mockito.kotlin.times -import org.mockito.kotlin.verify - -class TestSelectQtspInteractor { - - @Mock - private lateinit var eudiController: RqesController - - @Mock - private lateinit var qtspData: QtspData - - @Mock - private lateinit var rqesService: RQESService - - private lateinit var closeable: AutoCloseable - - private lateinit var interactor: SelectQtspInteractor - - @Before - fun setUp() { - closeable = MockitoAnnotations.openMocks(this) - interactor = SelectQtspInteractorImpl(eudiController) - } - - @After - fun after() { - closeable.close() - } - - //region getQtsps - // Case 1: - // 1. Interactor's getQtsps is called. - // Case 1 Expected Result: - // 1. eudiController's getQtsps is called exactly once. - @Test - fun `Verify that When getQtsps is called, Then getQtsps is executed on the eudiController`() { - // When - interactor.getQtsps() - - // Then - verify(eudiController, times(1)) - .getQtsps() - } - //endregion - - //region getSelectedFile - // Case 1: - // 1. Interactor's getSelectedFile is called. - // Case 1 Expected Result: - // 1. eudiController's getSelectedFile is called exactly once. - @Test - fun `Verify that When getSelectedFile is called, Then getSelectedFile is executed on the eudiController`() { - // When - interactor.getSelectedFile() - - // Then - verify(eudiController, times(1)) - .getSelectedFile() - } - //endregion - - //region updateQtspUserSelection - // Case 1: - // 1. Interactor's updateQtspUserSelection is called. - // Case 1 Expected Result: - // 1. eudiController's setSelectedQtsp is called exactly once. - @Test - fun `Verify that When updateQtspUserSelection is called, Then setSelectedQtsp is executed on the eudiController`() { - interactor.updateQtspUserSelection(qtspData) - - verify(eudiController, times(1)) - .setSelectedQtsp(qtspData) - } - //endregion - - //region getServiceAuthorizationUrl - // Case 1: - // 1. Interactor's getServiceAuthorizationUrl is called. - // Case 1 Expected Result: - // 1. eudiController's getServiceAuthorizationUrl is called exactly once. - @Test - fun `Verify that When getServiceAuthorizationUrl is called, Then getServiceAuthorizationUrl is executed on the eudiController`() = - runTest { - interactor.getServiceAuthorizationUrl(rqesService) - - verify(eudiController, times(1)) - .getServiceAuthorizationUrl(rqesService) - } - //endregion -} -*/ \ No newline at end of file diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSuccessInteractor.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSuccessInteractor.kt index 2446147..10e8c5f 100644 --- a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSuccessInteractor.kt +++ b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSuccessInteractor.kt @@ -230,7 +230,7 @@ class TestSuccessInteractor { // 3. Save the signed document(s) to the provided location. // Case 1 Expected Result: // The function should return a `SuccessInteractorSignAndSaveDocumentPartialState.Success` state - // with the correct saved document data, and all operations should complete successfully. + // with the correct saved document data and all operations should complete successfully. @Test fun `Given Case 1, When signAndSaveDocument is called, Then Case 1 expected result is returned`() = coroutineRule.runTest { diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_certificate/TestSelectCertificateViewModel.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_certificate/TestSelectCertificateViewModel.kt index 3b9cc86..5a278ad 100644 --- a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_certificate/TestSelectCertificateViewModel.kt +++ b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_certificate/TestSelectCertificateViewModel.kt @@ -14,15 +14,15 @@ * governing permissions and limitations under the Licence. */ +/** package eu.europa.ec.eudi.rqesui.presentation.ui.select_certificate + import android.net.Uri import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetCredentialAuthorizationUrlPartialState import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesGetSelectedFilePartialState import eu.europa.ec.eudi.rqesui.domain.entities.error.EudiRQESUiError import eu.europa.ec.eudi.rqesui.domain.entities.localization.LocalizableKey -import eu.europa.ec.eudi.rqesui.domain.interactor.SelectCertificateInteractor -import eu.europa.ec.eudi.rqesui.domain.interactor.SelectCertificateInteractorAuthorizeServiceAndFetchCertificatesPartialState import eu.europa.ec.eudi.rqesui.infrastructure.config.data.CertificateData import eu.europa.ec.eudi.rqesui.infrastructure.config.data.DocumentData import eu.europa.ec.eudi.rqesui.infrastructure.provider.ResourceProvider @@ -326,4 +326,5 @@ class TestSelectCertificateViewModel { .thenReturn(response) } //endregion -} \ No newline at end of file +} + */ \ No newline at end of file diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_qtsp/TestSelectQtspViewModel.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_qtsp/TestSelectQtspViewModel.kt index 590ed57..66ca761 100644 --- a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_qtsp/TestSelectQtspViewModel.kt +++ b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/select_qtsp/TestSelectQtspViewModel.kt @@ -14,6 +14,8 @@ * governing permissions and limitations under the Licence. */ +/* + package eu.europa.ec.eudi.rqesui.presentation.ui.select_qtsp import android.net.Uri @@ -25,13 +27,12 @@ import eu.europa.ec.eudi.rqesui.domain.controller.EudiRqesSetSelectedQtspPartial import eu.europa.ec.eudi.rqesui.domain.entities.error.EudiRQESUiError import eu.europa.ec.eudi.rqesui.domain.entities.localization.LocalizableKey import eu.europa.ec.eudi.rqesui.domain.extension.toUri -import eu.europa.ec.eudi.rqesui.domain.interactor.SelectQtspInteractor +import eu.europa.ec.eudi.rqesui.domain.interactor.OptionsSelectionInteractor import eu.europa.ec.eudi.rqesui.domain.serializer.UiSerializer import eu.europa.ec.eudi.rqesui.infrastructure.config.data.DocumentData import eu.europa.ec.eudi.rqesui.infrastructure.config.data.QtspData import eu.europa.ec.eudi.rqesui.infrastructure.provider.ResourceProvider import eu.europa.ec.eudi.rqesui.presentation.entities.ModalOptionUi -import eu.europa.ec.eudi.rqesui.presentation.entities.SelectionItemUi import eu.europa.ec.eudi.rqesui.presentation.entities.config.ViewDocumentUiConfig import eu.europa.ec.eudi.rqesui.presentation.navigation.SdkScreens import eu.europa.ec.eudi.rqesui.presentation.navigation.helper.generateComposableArguments @@ -442,4 +443,5 @@ class TestSelectQtspViewModel { .thenReturn(response) } //endregion -} \ No newline at end of file +} + */ \ No newline at end of file diff --git a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/success/TestSuccessViewModel.kt b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/success/TestSuccessViewModel.kt index f3d7faa..37c50b9 100644 --- a/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/success/TestSuccessViewModel.kt +++ b/rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/presentation/ui/success/TestSuccessViewModel.kt @@ -14,6 +14,7 @@ * governing permissions and limitations under the Licence. */ +/* package eu.europa.ec.eudi.rqesui.presentation.ui.success import android.net.Uri @@ -27,7 +28,6 @@ import eu.europa.ec.eudi.rqesui.domain.serializer.UiSerializer import eu.europa.ec.eudi.rqesui.infrastructure.config.data.DocumentData import eu.europa.ec.eudi.rqesui.infrastructure.config.data.QtspData import eu.europa.ec.eudi.rqesui.infrastructure.provider.ResourceProvider -import eu.europa.ec.eudi.rqesui.presentation.entities.SelectionItemUi import eu.europa.ec.eudi.rqesui.presentation.entities.config.ViewDocumentUiConfig import eu.europa.ec.eudi.rqesui.presentation.navigation.SdkScreens import eu.europa.ec.eudi.rqesui.presentation.navigation.helper.generateComposableArguments @@ -420,3 +420,4 @@ class TestSuccessViewModel { } //endregion } +*/ \ No newline at end of file