diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java index f7914d3d526..bc02e33e5a7 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java @@ -62,7 +62,7 @@ public class APIPublisherServiceImpl implements APIPublisherService { for (APIInfo apiInfo : apiList.getList()) { if (api.getName().equals(apiInfo.getName()) && api.getVersion().equals(apiInfo.getVersion())) { api = publisherClient.getApi().apisApiIdPut(apiInfo.getId(), api, CONTENT_TYPE, null, null); - if (CREATED_STATUS.equals(api.getStatus())) { + if (api != null && CREATED_STATUS.equals(api.getStatus())) { publisherClient.getApi().apisChangeLifecyclePost(PUBLISH_ACTION, api.getId(), null, null, null); } @@ -83,7 +83,9 @@ public class APIPublisherServiceImpl implements APIPublisherService { return false; } for (APIInfo existingApi : apiList.getList()) { - if (existingApi.getName().equals(api.getName()) && existingApi.getVersion().equals(api.getVersion())) { + if (existingApi.getName() != null && existingApi.getName().equals(api. + getName()) && existingApi.getVersion() != null && + existingApi.getVersion().equals(api.getVersion())) { return true; } } diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java index cf313fca214..5360caa68b5 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java @@ -19,17 +19,30 @@ package org.wso2.carbon.apimgt.webapp.publisher; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.mockito.Mockito; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; +import org.wso2.carbon.apimgt.integration.client.IntegrationClientServiceImpl; import org.wso2.carbon.apimgt.integration.client.OAuthRequestInterceptor; import org.wso2.carbon.apimgt.integration.client.model.OAuthApplication; +import org.wso2.carbon.apimgt.integration.client.publisher.PublisherClient; +import org.wso2.carbon.apimgt.integration.client.service.IntegrationClientService; +import org.wso2.carbon.apimgt.integration.generated.client.publisher.api.APIsApi; +import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.API; +import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.APIInfo; +import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.APIList; +import org.wso2.carbon.apimgt.webapp.publisher.config.WebappPublisherConfig; import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiScope; import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiUriTemplate; import org.wso2.carbon.apimgt.webapp.publisher.exception.APIManagerPublisherException; +import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder; +import org.wso2.carbon.apimgt.webapp.publisher.utils.Api; import java.lang.reflect.Field; import java.util.*; +import static org.mockito.Mockito.doReturn; + /** * This is the test class for {@link APIPublisherServiceImpl} */ @@ -37,23 +50,107 @@ public class APIPublisherServiceTest extends BaseAPIPublisherTest { private static final Log log = LogFactory.getLog(APIPublisherServiceTest.class); private APIPublisherServiceImpl apiPublisherService = new APIPublisherServiceImpl(); - private APIConfig apiConfig = new APIConfig(); @BeforeTest public void initialConfigs() throws Exception { - setApiConfigs(apiConfig); initializeOAuthApplication(); + WebappPublisherConfig.init(); } @Test(description = "Publishes an API | will fail if there are any exceptions") public void publishAPI() throws NoSuchFieldException, IllegalAccessException, APIManagerPublisherException { + APIConfig apiConfig = new APIConfig(); + setApiConfigs(apiConfig, "testAPI-0"); + apiPublisherService.publishAPI(apiConfig); + } + + @Test(description = "Testing for API status CREATED | will fail if there are any exceptions") + public void publishCreatedAPI() throws APIManagerPublisherException, NoSuchFieldException, + IllegalAccessException { + APIConfig apiConfig = new APIConfig(); + setApiConfigs(apiConfig, "testAPI-1"); + APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance(). + getClass(), Mockito.CALLS_REAL_METHODS); + IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl. + class, Mockito.CALLS_REAL_METHODS); + doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService(); + PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService(). + getPublisherClient(); + doReturn(publisherClient).when(integrationClientService).getPublisherClient(); + APIsApi apIsApi = Mockito.mock(Api.class, Mockito.CALLS_REAL_METHODS); + doReturn(apIsApi).when(publisherClient).getApi(); + API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS); + api.setStatus("CREATED"); + doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString()); apiPublisherService.publishAPI(apiConfig); } - private void setApiConfigs(APIConfig apiConfig) { - apiConfig.setName("Windows Device Management Administrative Service"); - apiConfig.setContext("/api/device-mgt/windows/v1.0/admin/devices"); + @Test(description = "createAPIListWithNoApi | will fail if there are any exceptions") + private void publishWithNoAPIListCreated() throws APIManagerPublisherException { + APIConfig apiConfig = new APIConfig(); + setApiConfigs(apiConfig, "testAPI-3"); + APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance(). + getClass(), Mockito.CALLS_REAL_METHODS); + IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl. + class, Mockito.CALLS_REAL_METHODS); + doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService(); + PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService(). + getPublisherClient(); + doReturn(publisherClient).when(integrationClientService).getPublisherClient(); + APIsApi apIsApi = Mockito.mock(Api.class, Mockito.CALLS_REAL_METHODS); + doReturn(apIsApi).when(publisherClient).getApi(); + API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS); + api.setStatus("CREATED"); + doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString()); + APIList apiList = Mockito.mock(APIList.class, Mockito.CALLS_REAL_METHODS); + APIInfo apiInfo = new APIInfo(); + List apiInfoList = new ArrayList<>(); + apiInfoList.add(apiInfo); + apiList.list(apiInfoList); + doReturn(apiList).when(apIsApi).apisGet(Mockito.anyInt(), Mockito.anyInt(), + Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); + doReturn(api).when(apIsApi).apisApiIdPut(Mockito.anyString(), Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); + apiPublisherService.publishAPI(apiConfig); + } + + @Test(description = "createAPIList | will fail if there are any exceptions") + private void publishWithAPIListCreated() throws APIManagerPublisherException { + APIConfig apiConfig = new APIConfig(); + setApiConfigs(apiConfig, "testAPI-2"); + APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance(). + getClass(), Mockito.CALLS_REAL_METHODS); + IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl. + class, Mockito.CALLS_REAL_METHODS); + doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService(); + PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService(). + getPublisherClient(); + doReturn(publisherClient).when(integrationClientService).getPublisherClient(); + APIsApi apIsApi = Mockito.mock(Api.class, Mockito.CALLS_REAL_METHODS); + doReturn(apIsApi).when(publisherClient).getApi(); + API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS); + api.setStatus("CREATED"); + doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString()); + APIList apiList = Mockito.mock(APIList.class, Mockito.CALLS_REAL_METHODS); + APIInfo apiInfo = new APIInfo(); + apiInfo.setName("testAPI-2"); + apiInfo.setVersion("1.0.0"); + apiInfo.setId("test-one"); + List apiInfoList = new ArrayList<>(); + apiInfoList.add(apiInfo); + apiList.list(apiInfoList); + doReturn(apiList).when(apIsApi).apisGet(Mockito.anyInt(), Mockito.anyInt(), + Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); + doReturn(api).when(apIsApi).apisApiIdPut(Mockito.anyString(), Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.anyString()); + apiConfig.setSharedWithAllTenants(false); + apiPublisherService.publishAPI(apiConfig); + } + + private void setApiConfigs(APIConfig apiConfig, String name) { + apiConfig.setName(name); + apiConfig.setContext("api/device-mgt/windows/v1.g0/admin/devices"); apiConfig.setOwner("admin"); apiConfig.setEndpoint("https://localhost:9443/api/device-mgt/windows/v1.0/admin/devices"); apiConfig.setVersion("1.0.0"); @@ -98,3 +195,4 @@ APIPublisherServiceTest extends BaseAPIPublisherTest { } } + diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/resources/carbon-home/repository/conf/etc/webapp-publisher-config.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/resources/carbon-home/repository/conf/etc/webapp-publisher-config.xml new file mode 100644 index 00000000000..6e03eb73bd6 --- /dev/null +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/resources/carbon-home/repository/conf/etc/webapp-publisher-config.xml @@ -0,0 +1,39 @@ + + + + + + + + https://${iot.core.host}:${iot.core.https.port} + + + true + + + true + + + + default + +