From 1f7159bee0362b72ed0b79e70125b6fc7f9d334b Mon Sep 17 00:00:00 2001 From: Hasini Samarathunga Date: Tue, 25 Feb 2025 10:13:42 +0530 Subject: [PATCH] Add unit test for fragment application pre deletion listener --- .../FragmentApplicationMgtListenerTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/components/org.wso2.carbon.identity.organization.management.application/src/test/java/org/wso2/carbon/identity/organization/management/application/listener/FragmentApplicationMgtListenerTest.java b/components/org.wso2.carbon.identity.organization.management.application/src/test/java/org/wso2/carbon/identity/organization/management/application/listener/FragmentApplicationMgtListenerTest.java index 0c0e58355..e5b540b3f 100644 --- a/components/org.wso2.carbon.identity.organization.management.application/src/test/java/org/wso2/carbon/identity/organization/management/application/listener/FragmentApplicationMgtListenerTest.java +++ b/components/org.wso2.carbon.identity.organization.management.application/src/test/java/org/wso2/carbon/identity/organization/management/application/listener/FragmentApplicationMgtListenerTest.java @@ -42,6 +42,7 @@ import org.wso2.carbon.identity.organization.management.application.dao.OrgApplicationMgtDAO; import org.wso2.carbon.identity.organization.management.application.internal.OrgApplicationMgtDataHolder; import org.wso2.carbon.identity.organization.management.application.model.MainApplicationDO; +import org.wso2.carbon.identity.organization.management.application.model.SharedApplicationDO; import org.wso2.carbon.identity.organization.management.service.OrganizationManager; import org.wso2.carbon.identity.organization.management.service.exception.OrganizationManagementException; import org.wso2.carbon.identity.organization.management.service.util.OrganizationManagementUtil; @@ -74,6 +75,9 @@ public class FragmentApplicationMgtListenerTest { @Mock private ApplicationManagementService applicationManagementService; + @Mock + private SharedApplicationDO sharedApplicationDO; + @InjectMocks private FragmentApplicationMgtListener fragmentApplicationMgtListener; @@ -96,6 +100,7 @@ public void setUp() { MockitoAnnotations.openMocks(this); serviceProvider = mock(ServiceProvider.class); + sharedApplicationDO = mock(SharedApplicationDO.class); OrgApplicationMgtDataHolder.getInstance().setOrganizationManager(organizationManager); OrgApplicationMgtDataHolder.getInstance().setOrgApplicationMgtDAO(orgApplicationMgtDAO); OrgApplicationMgtDataHolder.getInstance().setApplicationManagementService(applicationManagementService); @@ -252,6 +257,46 @@ public void testSharedAppNameModificationNotAllowed(String isSharedApp, boolean } } + @DataProvider(name = "testFragmentApplicationPreDeletionDataProvider") + public Object[][] testFragmentApplicationPreDeletionDataProvider() { + + return new Object[][]{ + {TRUE}, {FALSE} + }; + } + + @Test(dataProvider = "testFragmentApplicationPreDeletionDataProvider") + public void testFragmentApplicationPreDeletion(String isFragmentApplication) + throws IdentityApplicationManagementException, OrganizationManagementException { + + ServiceProviderProperty[] spProperties = new ServiceProviderProperty[]{ + mockServiceProviderProperty(IS_FRAGMENT_APP, isFragmentApplication) + }; + when(serviceProvider.getSpProperties()).thenReturn(spProperties); + when(applicationManagementService.getServiceProvider(applicationName, tenantDomain)) + .thenReturn(serviceProvider); + + if (Boolean.parseBoolean(isFragmentApplication)) { + when(serviceProvider.getApplicationID()).thenReturn(1); + when(serviceProvider.getApplicationResourceId()).thenReturn(applicationResourceID); + when(orgApplicationMgtDAO.getSharedApplication(1, tenantDomain)) + .thenReturn(Optional.ofNullable(sharedApplicationDO)); + + IdentityApplicationManagementClientException thrownException = + Assert.expectThrows(IdentityApplicationManagementClientException.class, + () -> fragmentApplicationMgtListener + .doPreDeleteApplication(applicationName, tenantDomain, userName)); + + assertEquals(String.format("Cannot delete fragment application with resource id: %s. " + + "Delete is allowed only when the main application is deleted, or its sharing is revoked.", + applicationResourceID), thrownException.getMessage()); + } else { + boolean result = fragmentApplicationMgtListener + .doPreDeleteApplication(applicationName, tenantDomain, userName); + assertTrue(result); + } + } + private void mockClaimConfig(ServiceProvider mainApplication) { ClaimConfig claimConfig = mock(ClaimConfig.class);