Fix for ONOS-5566:Issue With Region POST-DELETE REST API:Incorporated Comments

Change-Id: Id14480f26e02b87fab3e3c6a0b9f111d9477c3ac
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
index c17683c..cc6444a 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
@@ -193,11 +193,13 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response addDevices(@PathParam("regionId") String regionId,
                                InputStream stream) {
-        final RegionId rid = RegionId.regionId(regionId);
+        RegionId rid = RegionId.regionId(regionId);
+        Region region = nullIsNotFound(regionService.getRegion(rid),
+                REGION_NOT_FOUND + rid);
 
         URI location;
         try {
-            regionAdminService.addDevices(rid, extractDeviceIds(stream));
+            regionAdminService.addDevices(region.id(), extractDeviceIds(stream));
             location = new URI(rid.id());
         } catch (IOException | URISyntaxException e) {
             throw new IllegalArgumentException(e);
@@ -219,7 +221,9 @@
     @Consumes(MediaType.APPLICATION_JSON)
     public Response removeDevices(@PathParam("regionId") String regionId,
                                   InputStream stream) {
-        final RegionId rid = RegionId.regionId(regionId);
+        RegionId rid = RegionId.regionId(regionId);
+        Region region = nullIsNotFound(regionService.getRegion(rid),
+                REGION_NOT_FOUND + rid);
 
         try {
             regionAdminService.removeDevices(rid, extractDeviceIds(stream));
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java
index 574f7e0..a00edc8 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java
@@ -422,6 +422,26 @@
     }
 
     /**
+     * Tests creating a flow with POST.
+     */
+    @Test
+    public void testAddDevicesPostWithoutRegion() {
+        expect(mockRegionService.getRegion(anyObject())).andReturn(null).anyTimes();
+        replay(mockRegionService);
+
+        WebTarget wt = target();
+        InputStream jsonStream = RegionsResourceTest.class
+                .getResourceAsStream("region-deviceIds.json");
+
+        Response response = wt.path("regions/" + region1.id() + "/devices")
+                .request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
+        assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NOT_FOUND));
+
+        verify(mockRegionService);
+    }
+
+    /**
      * Tests adding a set of devices in region with POST.
      */
     @Test
@@ -430,12 +450,14 @@
         expectLastCall();
         replay(mockRegionAdminService);
 
+        expect(mockRegionService.getRegion(anyObject())).andReturn(region1).anyTimes();
+        replay(mockRegionService);
+
         WebTarget wt = target();
         InputStream jsonStream = RegionsResourceTest.class
                 .getResourceAsStream("region-deviceIds.json");
 
-        Response response = wt.path("regions/" +
-                region1.id().toString() + "/devices")
+        Response response = wt.path("regions/" + region1.id().toString() + "/devices")
                 .request(MediaType.APPLICATION_JSON_TYPE)
                 .post(Entity.json(jsonStream));
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_CREATED));
@@ -452,6 +474,8 @@
         expectLastCall();
         replay(mockRegionAdminService);
 
+        expect(mockRegionService.getRegion(anyObject())).andReturn(region1).anyTimes();
+        replay(mockRegionService);
 
         WebTarget wt = target()
                 .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
@@ -459,8 +483,7 @@
                 .getResourceAsStream("region-deviceIds.json");
 
         // FIXME: need to consider whether to use jsonStream for entry deletion
-        Response response = wt.path("regions/" +
-                region1.id().toString() + "/devices")
+        Response response = wt.path("regions/" + region1.id().toString() + "/devices")
                 .request().method("DELETE", Entity.json(jsonStream));
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NO_CONTENT));
         verify(mockRegionAdminService);