diff options
author | DylanB95EST <dylan.byrne@est.tech> | 2021-11-02 17:25:18 +0000 |
---|---|---|
committer | DylanB95EST <dylan.byrne@est.tech> | 2021-11-02 17:25:23 +0000 |
commit | 30a59dda3869603b9f628c45364e63a3763d3925 (patch) | |
tree | 43943286fd3a32b2bd7ad32280bf3a61cbd5f24d /cps-rest | |
parent | 6fda688fa63ea7ccd450002fb94a18b07095bea9 (diff) |
Delete DataNode (xpath) for a given Anchor
Delete Datanode within CPS. Deprecates delete functionality of
/v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/list-nodes.
New api is backwards compatible with this API
Issue-ID: CPS-313
Change-Id: I110c4ab1446e8a1399a0d9bf89c0be614a9104df
Signed-off-by: DylanB95EST <dylan.byrne@est.tech>
Diffstat (limited to 'cps-rest')
3 files changed, 53 insertions, 0 deletions
diff --git a/cps-rest/docs/openapi/cpsData.yml b/cps-rest/docs/openapi/cpsData.yml index ca21df53db..2b65ae4400 100644 --- a/cps-rest/docs/openapi/cpsData.yml +++ b/cps-rest/docs/openapi/cpsData.yml @@ -103,6 +103,7 @@ listElementByDataspaceAndAnchor: delete: description: Delete one or all list element(s) for a given anchor and dataspace + deprecated: true tags: - cps-data summary: Delete one or all list element(s) @@ -177,6 +178,28 @@ nodesByDataspaceAndAnchor: '403': $ref: 'components.yml#/components/responses/Forbidden' + delete: + description: Delete a datanode for a given dataspace and anchor given a node xpath. + tags: + - cps-data + summary: Delete a data node + operationId: deleteDataNode + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/xpathInQuery' + - $ref: 'components.yml#/components/parameters/observedTimestampInQuery' + responses: + '204': + $ref: 'components.yml#/components/responses/NoContent' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + + put: description: Replace a node with descendants for a given dataspace, anchor and a parent node xpath tags: diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java index f29ead9e9f..e57fb3c8c6 100755 --- a/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java +++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/DataRestController.java @@ -60,6 +60,14 @@ public class DataRestController implements CpsDataApi { } @Override + public ResponseEntity<Void> deleteDataNode(final String dataspaceName, final String anchorName, + final String xpath, final String observedTimestamp) { + cpsDataService.deleteDataNode(dataspaceName, anchorName, xpath, + toOffsetDateTime(observedTimestamp)); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Override public ResponseEntity<String> addListElements(final String parentNodeXpath, final String dataspaceName, final String anchorName, final String jsonData, final String observedTimestamp) { cpsDataService.saveListElements(dataspaceName, anchorName, parentNodeXpath, jsonData, diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy index 06f2f5795f..2c288344c4 100755 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy @@ -342,4 +342,26 @@ class DataRestControllerSpec extends Specification { 'without observed-timestamp' | null || 1 | HttpStatus.NO_CONTENT 'with invalid observed-timestamp' | 'invalid' || 0 | HttpStatus.BAD_REQUEST } + + def 'Delete data node #scenario.'() { + given: 'data node xpath' + def dataNodeXpath = '/dataNodeXpath' + when: 'delete data node endpoint is invoked' + def deleteDataNodeRequest = delete( "$dataNodeBaseEndpoint/anchors/$anchorName/nodes") + .param('xpath', dataNodeXpath) + and: 'observed timestamp is added to the parameters' + if (observedTimestamp != null) + deleteDataNodeRequest.param('observed-timestamp', observedTimestamp) + def response = mvc.perform(deleteDataNodeRequest).andReturn().response + then: 'a successful response is returned' + response.status == expectedHttpStatus.value() + and: 'the api is called with the correct parameters' + expectedApiCount * mockCpsDataService.deleteDataNode(dataspaceName, anchorName, dataNodeXpath, + { it == DateTimeUtility.toOffsetDateTime(observedTimestamp) }) + where: + scenario | observedTimestamp || expectedApiCount | expectedHttpStatus + 'with observed timestamp' | '2021-03-03T23:59:59.999-0400' || 1 | HttpStatus.NO_CONTENT + 'without observed timestamp' | null || 1 | HttpStatus.NO_CONTENT + 'with invalid observed timestamp' | 'invalid' || 0 | HttpStatus.BAD_REQUEST + } } |