Merge "patch operation for ncmp running"
diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml
index d9bd49a..e63f9c0 100644
--- a/cps-ncmp-rest/docs/openapi/components.yaml
+++ b/cps-ncmp-rest/docs/openapi/components.yaml
@@ -151,6 +151,50 @@
                 - authors:
                     - Philip Pullman
 
+    dataSamplePatchRequest:
+      summary: Sample patch request
+      description: Sample patch request body
+      value:
+        ietf-restconf:yang-patch:
+          patch-id: patch-1
+          edit:
+            - edit-id: edit1
+              operation: merge
+              target: /
+              value:
+                test:bookstore:
+                  bookstore-name: Chapters
+                  categories:
+                    - code: '01'
+                      name: Science
+                      books:
+                        - authors:
+                            - Author1
+                            - Author2
+                    - code: '02'
+                      name: Arts
+                      books:
+                        - authors:
+                            - Author3
+            - edit-id: edit2
+              operation: merge
+              target: /
+              value:
+                test:bookstore:
+                  bookstore-name: Novels
+                  categories:
+                    - code: '03'
+                      name: History
+                      books:
+                        - authors:
+                            - Iain M. Banks
+                            - Ursula K. Le Guin
+                    - code: '04'
+                      name: Fiction
+                      books:
+                        - authors:
+                            - Philip Pullman
+
     dataSampleResponse:
         summary: Sample response
         description: Sample response for selecting 'sample 1'.
diff --git a/cps-ncmp-rest/docs/openapi/ncmp.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml
index 71b4f1c..d80ec65 100755
--- a/cps-ncmp-rest/docs/openapi/ncmp.yml
+++ b/cps-ncmp-rest/docs/openapi/ncmp.yml
@@ -165,12 +165,12 @@
     requestBody:
       required: true
       content:
-        application/json:
+        '*/*':
           schema:
             type: object
           examples:
             dataSampleRequest:
-              $ref: 'components.yaml#/components/examples/dataSampleRequest'
+              $ref: 'components.yaml#/components/examples/dataSamplePatchRequest'
     responses:
       200:
         $ref: 'components.yaml#/components/responses/Ok'
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
index a97852f..f2f43c9 100755
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
@@ -118,9 +118,9 @@
     public ResponseEntity<Object> patchResourceDataRunningForCmHandle(final String resourceIdentifier,
         final String cmHandle,
         final Object requestBody, final String contentType) {
-        networkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle(cmHandle,
+        final Object responseObject = networkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle(cmHandle,
             resourceIdentifier, PATCH, GSON.toJson(requestBody), contentType);
-        return new ResponseEntity<>(HttpStatus.OK);
+        return ResponseEntity.ok(responseObject);
     }
 
     /**
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java
index dddf089..5d2ab53 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java
@@ -78,8 +78,9 @@
      * @param operation required operation
      * @param requestBody request body to create resource
      * @param contentType content type in body
+     * @return {@code Object} return data
      */
-    void writeResourceDataPassThroughRunningForCmHandle(String cmHandle,
+    Object writeResourceDataPassThroughRunningForCmHandle(String cmHandle,
                                                         String resourceIdentifier,
                                                         OperationEnum operation,
                                                         String requestBody,
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
index eeb004a..240d6b5 100755
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
@@ -142,12 +142,12 @@
     }
 
     @Override
-    public void writeResourceDataPassThroughRunningForCmHandle(final String cmHandle,
+    public Object writeResourceDataPassThroughRunningForCmHandle(final String cmHandle,
                                                                final String resourceIdentifier,
                                                                final OperationEnum operation,
                                                                final String requestData,
                                                                final String dataType) {
-        handleResponse(
+        return handleResponse(
             dmiDataOperations.writeResourceDataPassThroughRunningFromDmi(
                 cmHandle, resourceIdentifier, operation, requestData, dataType),
             "Not able to " + operation + " resource data.");
diff --git a/csit/data/bookstorePatchExample.json b/csit/data/bookstorePatchExample.json
new file mode 100644
index 0000000..039ea4b
--- /dev/null
+++ b/csit/data/bookstorePatchExample.json
@@ -0,0 +1,59 @@
+{
+  "ietf-restconf:yang-patch":{
+    "patch-id":"patch-1",
+    "edit":[
+      {
+        "edit-id":"edit1",
+        "operation":"merge",
+        "target":"/",
+        "value":{
+          "bookstore": {
+            "categories": [
+              {
+                "code": "100",
+                "books": [
+                  {
+                    "title": "A new book in a new category",
+                    "pub_year": "2019",
+                    "authors": [
+                      "Rahul"
+                    ],
+                    "lang": "English",
+                    "price": "2011"
+                  }
+                ],
+                "name": "Category100"
+              }
+            ]
+          }
+        }
+      },
+      {
+        "edit-id":"edit2",
+        "operation":"merge",
+        "target":"/",
+        "value":{
+          "bookstore": {
+            "categories": [
+              {
+                "code": "02",
+                "name": "Horror",
+                "books": [
+                  {
+                    "title": "A New book in existing category",
+                    "lang": "English",
+                    "authors": [
+                      "Joe & Rahul"
+                    ],
+                    "pub_year": "2003",
+                    "price": "2000"
+                  }
+                ]
+              }
+            ]
+          }
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/csit/tests/ncmp-passthrough/ncmp-passthrough.robot b/csit/tests/ncmp-passthrough/ncmp-passthrough.robot
index 36350ad..1d977b9 100644
--- a/csit/tests/ncmp-passthrough/ncmp-passthrough.robot
+++ b/csit/tests/ncmp-passthrough/ncmp-passthrough.robot
@@ -116,3 +116,24 @@
             Should Be Equal As Strings              "${item['name']}"  "Horror"
         END
     END
+
+Patch will add new category with new book and add a new book to an existing category
+    ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore
+    ${headers}=          Create Dictionary  Content-Type=application/yang.patch+json   Authorization=${auth}
+    ${jsonData}=         Get Binary File    ${DATADIR}${/}bookstorePatchExample.json
+    ${response}=         PATCH On Session   CPS_URL   ${uri}   headers=${headers}   data=${jsonData}
+    Should Be Equal As Strings              ${response.status_code}   200
+    ${verifyUri}=       Set Variable        ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=100
+    ${verifyHeaders}=    Create Dictionary  Authorization=${auth}
+    ${verifyResponse}=   Get On Session     CPS_URL   ${verifyUri}   headers=${verifyHeaders}
+    ${responseJson}=    Set Variable        ${verifyResponse.json()}
+    Should Be Equal As Strings              ${verifyResponse.status_code}   200
+    FOR   ${item}   IN  @{responseJson['stores:categories']}
+        IF   "${item['code']}" == "100"
+            Should Be Equal As Strings              "${item['name']}"  "Category100"
+        END
+    END
+    ${verifyUri}=       Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=02/books=A%20New%20book%20in%20existing%20category
+    ${verifyResponse}=  Get On Session     CPS_URL   ${verifyUri}   headers=${verifyHeaders}
+    ${responseJson}=    Set Variable       ${verifyResponse.json()}
+    Should Be Equal As Strings             ${verifyResponse.status_code}   200
\ No newline at end of file