diff options
author | puthuparambil.aditya <aditya.puthuparambil@bell.ca> | 2022-02-14 10:56:35 +0000 |
---|---|---|
committer | Renu Kumari <renu.kumari@bell.ca> | 2022-02-17 17:19:09 +0000 |
commit | ebfa4077b2e462237301e93566fed6ef2f56674c (patch) | |
tree | ee235c331884988bd34d008cc9c7f15729b1c615 /cps-service/src | |
parent | a15c0e5b58f16c3ab4a7c7610ac8c4a191e5e051 (diff) |
Align JSON DataNode for Get and Post/Put API in CPS
Issue-ID: CPS-865
Signed-off-by: puthuparambil.aditya <aditya.puthuparambil@bell.ca>
Change-Id: I60b1f9c94e79bdd66d60fe6a68f5fc4adc718d35
Diffstat (limited to 'cps-service/src')
4 files changed, 41 insertions, 10 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java b/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java index e7b639d48e..1013c13b76 100644 --- a/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java +++ b/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java @@ -89,7 +89,7 @@ public class CpsDataUpdatedEventFactory { private Data createData(final DataNode dataNode) { final var data = new Data(); - DataMapUtils.toDataMap(dataNode).forEach(data::setAdditionalProperty); + DataMapUtils.toDataMapWithIdentifier(dataNode).forEach(data::setAdditionalProperty); return data; } diff --git a/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java b/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java index 71a95f1ca0..42719d9b3c 100644 --- a/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java +++ b/cps-service/src/main/java/org/onap/cps/utils/DataMapUtils.java @@ -37,12 +37,23 @@ import org.onap.cps.spi.model.DataNode; public class DataMapUtils { /** + * Converts DataNode structure into a map including the root node identifier for a JSON response. + * + * @param dataNode data node object + * @return a map representing same data with the root node identifier + */ + public static Map<String, Object> toDataMapWithIdentifier(final DataNode dataNode) { + return ImmutableMap.<String, Object>builder() + .put(getNodeIdentifier(dataNode.getXpath()), toDataMap(dataNode)) + .build(); + } + + /** * Converts DataNode structure into a map for a JSON response. * * @param dataNode data node object * @return a map representing same data */ - public static Map<String, Object> toDataMap(final DataNode dataNode) { return ImmutableMap.<String, Object>builder() .putAll(dataNode.getLeaves()) diff --git a/cps-service/src/test/groovy/org/onap/cps/notification/CpsDataUpdateEventFactorySpec.groovy b/cps-service/src/test/groovy/org/onap/cps/notification/CpsDataUpdateEventFactorySpec.groovy index 5b13fa516a..682197d517 100644 --- a/cps-service/src/test/groovy/org/onap/cps/notification/CpsDataUpdateEventFactorySpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/notification/CpsDataUpdateEventFactorySpec.groovy @@ -45,10 +45,10 @@ class CpsDataUpdateEventFactorySpec extends Specification { given: 'an anchor which has been updated' def anchor = new Anchor('my-anchorname', 'my-dataspace', 'my-schemaset-name') and: 'cps data service returns the data node details' - def xpath = '/' + def xpath = '/xpath' def dataNode = new DataNodeBuilder().withXpath(xpath).withLeaves(['leafName': 'leafValue']).build() mockCpsDataService.getDataNode( - 'my-dataspace', 'my-anchorname', xpath, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS) >> dataNode + 'my-dataspace', 'my-anchorname', '/', FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS) >> dataNode when: 'CPS data updated event is created' def cpsDataUpdatedEvent = objectUnderTest.createCpsDataUpdatedEvent(anchor, DateTimeUtility.toOffsetDateTime(inputObservedTimestamp), Operation.CREATE) @@ -72,7 +72,7 @@ class CpsDataUpdateEventFactorySpec extends Specification { assert dataspaceName == 'my-dataspace' assert schemaSetName == 'my-schemaset-name' assert operation == Content.Operation.CREATE - assert data == new Data().withAdditionalProperty('leafName', 'leafValue') + assert data == new Data().withAdditionalProperty('xpath', ['leafName': 'leafValue']) } where: scenario | inputObservedTimestamp diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy index 429ab40b90..90563c0c16 100644 --- a/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/utils/DataMapUtilsSpec.groovy @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2021 Pantheon.tech * Modifications Copyright (C) 2020 Nordix Foundation + * Modifications Copyright (C) 2022 Bell Canada. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,7 +43,10 @@ class DataMapUtilsSpec extends Specification { def 'Data node structure conversion to map.'() { when: 'data node structure is converted to a map' - Map result = DataMapUtils.toDataMap(dataNode) + def result = DataMapUtils.toDataMap(dataNode) + + then: 'root node identifier is null' + result.parent == null then: 'root node leaves are top level elements' result.parentLeaf == 'parentLeafValue' @@ -53,12 +57,28 @@ class DataMapUtilsSpec extends Specification { ['listElementLeaf': 'listElement2leafValue']) and: 'leaves for child element is populated under its node identifier' - Map childObjectData = result.'child-object' - childObjectData.childLeaf == 'childLeafValue' + result.'child-object'.childLeaf == 'childLeafValue' and: 'leaves for grandchild element is populated under its node identifier' - Map grandChildObjectData = childObjectData.'grand-child-object' - grandChildObjectData.grandChildLeaf == 'grandChildLeafValue' + result.'child-object'.'grand-child-object'.grandChildLeaf == 'grandChildLeafValue' } + def 'Data node structure conversion to map with root node identifier.'() { + when: 'data node structure is converted to a map with root node identifier' + def result = DataMapUtils.toDataMapWithIdentifier(dataNode) + + then: 'root node identifier is not null' + result.parent != null + + then: 'root node leaves are populated under its node identifier' + def parentNode = result.parent + parentNode.parentLeaf == 'parentLeafValue' + parentNode.parentLeafList == ['parentLeafListEntry1','parentLeafListEntry2'] + + and: 'leaves for child element is populated under its node identifier' + parentNode.'child-object'.childLeaf == 'childLeafValue' + + and: 'leaves for grandchild element is populated under its node identifier' + parentNode.'child-object'.'grand-child-object'.grandChildLeaf == 'grandChildLeafValue' + } } |