From 827b77acb9fb747434dc7a44bb7f132965dd1363 Mon Sep 17 00:00:00 2001 From: Christos Kaitatzis Date: Wed, 5 Feb 2025 13:11:23 +0200 Subject: [PATCH] change: correction in tests As the interactor responsible for qtsp and certificate functionality is now OptionsSelectionInteractor, TestOptionsSelectionInteractor will now contain the test cases placed at TestSelectQtspInteractor and TestSelectCertificateInteractor. View model tests commented out temporarily. Signed-off-by: Christos Kaitatzis --- .../controller/TestLocalizationController.kt | 2 +- .../TestOptionsSelectionInteractor.kt | 384 +++++++++++++++++ .../TestSelectCertificateInteractor.kt | 390 ------------------ .../interactor/TestSelectQtspInteractor.kt | 119 ------ .../interactor/TestSuccessInteractor.kt | 2 +- .../TestSelectCertificateViewModel.kt | 7 +- .../ui/select_qtsp/TestSelectQtspViewModel.kt | 8 +- .../ui/success/TestSuccessViewModel.kt | 3 +- 8 files changed, 397 insertions(+), 518 deletions(-) create mode 100644 rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestOptionsSelectionInteractor.kt delete mode 100644 rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectCertificateInteractor.kt delete mode 100644 rqes-ui-sdk/src/test/java/eu/europa/ec/eudi/rqesui/domain/interactor/TestSelectQtspInteractor.kt 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