Handle 201 and 422 status codes

SDC activitySpec API returns 201 for success and 422 when already exists

Issue-ID: SO-1996
Signed-off-by: Kuleshov, Elena <evn@att.com>
Change-Id: I75837b75cbd24f4ccfb97a07e91219b3b61453f6
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/activity/ActivitySpecsActions.java b/asdc-controller/src/main/java/org/onap/so/asdc/activity/ActivitySpecsActions.java
index c80e84b..619d894 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/activity/ActivitySpecsActions.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/activity/ActivitySpecsActions.java
@@ -67,7 +67,9 @@
             Response response = httpClient.post(payload);
 
             int statusCode = response.getStatus();
-            if (statusCode != HttpStatus.SC_OK) {
+            if (statusCode == HttpStatus.SC_UNPROCESSABLE_ENTITY) {
+                logger.warn("{} {} {}", "ActivitySpec", activitySpec.getName(), "already exists in SDC");
+            } else if (statusCode != HttpStatus.SC_OK && statusCode != HttpStatus.SC_CREATED) {
                 logger.warn("{} {} {}", "Error creating activity spec", activitySpec.getName(), statusCode);
             } else {
                 if (response.getEntity() != null) {
@@ -108,7 +110,9 @@
 
             int statusCode = response.getStatus();
 
-            if (statusCode != HttpStatus.SC_OK) {
+            if (statusCode == HttpStatus.SC_UNPROCESSABLE_ENTITY) {
+                logger.warn("{} {} {}", "ActivitySpec with id", activitySpecId, "is already certified in SDC");
+            } else if (statusCode != HttpStatus.SC_OK) {
                 logger.warn("{} {} {}", "Error certifying activity", activitySpecId, statusCode);
             } else {
                 certificationResult = true;
diff --git a/asdc-controller/src/test/java/org/onap/asdc/activity/ActivitySpecsActionsTest.java b/asdc-controller/src/test/java/org/onap/asdc/activity/ActivitySpecsActionsTest.java
index 4381209..7de35b5 100644
--- a/asdc-controller/src/test/java/org/onap/asdc/activity/ActivitySpecsActionsTest.java
+++ b/asdc-controller/src/test/java/org/onap/asdc/activity/ActivitySpecsActionsTest.java
@@ -56,6 +56,44 @@
     }
 
     @Test
+    public void CreateActivitySpecReturnsCreated_Test() throws Exception {
+        String HOSTNAME = createURLWithPort("");
+
+        ActivitySpec activitySpec = new ActivitySpec();
+        activitySpec.setName("testActivitySpec");
+        activitySpec.setDescription("Test Activity Spec");
+        ActivitySpecCreateResponse activitySpecCreateResponse = new ActivitySpecCreateResponse();
+        activitySpecCreateResponse.setId("testActivityId");
+        ObjectMapper mapper = new ObjectMapper();
+        String body = mapper.writeValueAsString(activitySpecCreateResponse);
+        wireMockServer.stubFor(post(urlPathMatching("/v1.0/activity-spec"))
+                .willReturn(aResponse().withHeader("Content-Type", "application/json")
+                        .withStatus(org.springframework.http.HttpStatus.CREATED.value()).withBody(body)));
+
+        String activitySpecId = activitySpecsActions.createActivitySpec(HOSTNAME, activitySpec);
+        assertEquals("testActivityId", activitySpecId);
+    }
+
+    @Test
+    public void CreateActivitySpecReturnsExists_Test() throws Exception {
+        String HOSTNAME = createURLWithPort("");
+
+        ActivitySpec activitySpec = new ActivitySpec();
+        activitySpec.setName("testActivitySpec");
+        activitySpec.setDescription("Test Activity Spec");
+        ActivitySpecCreateResponse activitySpecCreateResponse = new ActivitySpecCreateResponse();
+        activitySpecCreateResponse.setId("testActivityId");
+        ObjectMapper mapper = new ObjectMapper();
+        String body = mapper.writeValueAsString(activitySpecCreateResponse);
+        wireMockServer.stubFor(post(urlPathMatching("/v1.0/activity-spec"))
+                .willReturn(aResponse().withHeader("Content-Type", "application/json")
+                        .withStatus(org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY.value()).withBody(body)));
+
+        String activitySpecId = activitySpecsActions.createActivitySpec(HOSTNAME, activitySpec);
+        assertEquals(null, activitySpecId);
+    }
+
+    @Test
     public void CertifyActivitySpec_Test() throws Exception {
         String HOSTNAME = createURLWithPort("");
 
@@ -70,6 +108,21 @@
         assertTrue(certificationResult);
     }
 
+    @Test
+    public void CertifyActivitySpecReturnsExists_Test() throws Exception {
+        String HOSTNAME = createURLWithPort("");
+
+        String activitySpecId = "testActivitySpec";
+        String urlPath = "/v1.0/activity-spec/testActivitySpec/versions/latest/actions";
+
+        wireMockServer.stubFor(
+                put(urlPathMatching(urlPath)).willReturn(aResponse().withHeader("Content-Type", "application/json")
+                        .withStatus(org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY.value())));
+
+        boolean certificationResult = activitySpecsActions.certifyActivitySpec(HOSTNAME, activitySpecId);
+        assertFalse(certificationResult);
+    }
+
     private String createURLWithPort(String uri) {
         return "http://localhost:" + wireMockPort + uri;
     }