aboutsummaryrefslogtreecommitdiffstats
path: root/cps-rest
diff options
context:
space:
mode:
authorToineSiebelink <toine.siebelink@est.tech>2021-02-08 11:36:59 +0000
committerToineSiebelink <toine.siebelink@est.tech>2021-02-09 12:44:20 +0000
commit1f64d85f1cd85653a34b8656c67f4cc2565808e7 (patch)
tree60593135797b572362fecfe77062226720a67576 /cps-rest
parent4ec225ce071d68c02cbc2388847d416c268bfa40 (diff)
General groovy test improvements
- Use the power of Groovy (maps and collections) - Improve data sample readability - Split out Datanode get scenarios: Separate Leave test from children related tests Issue-ID: CPS-160 Signed-off-by: ToineSiebelink <toine.siebelink@est.tech> Change-Id: Ife40749525a931b23091b472680c233f012bc457
Diffstat (limited to 'cps-rest')
-rw-r--r--cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy73
1 files changed, 43 insertions, 30 deletions
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 727a16e958..a79b5f440d 100644
--- 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
@@ -25,7 +25,6 @@ import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
-import com.google.common.collect.ImmutableMap
import org.modelmapper.ModelMapper
import org.onap.cps.api.CpsAdminService
import org.onap.cps.api.CpsDataService
@@ -46,8 +45,6 @@ import spock.lang.Shared
import spock.lang.Specification
import spock.lang.Unroll
-import javax.annotation.PostConstruct
-
@WebMvcTest
class DataRestControllerSpec extends Specification {
@@ -69,67 +66,83 @@ class DataRestControllerSpec extends Specification {
@Value('${rest.api.cps-base-path}')
def basePath
- String dataNodeEndpoint
+ def dataNodeEndpoint
def dataspaceName = 'my_dataspace'
def anchorName = 'my_anchor'
@Shared
- static DataNode dataNodeNoChildren = new DataNodeBuilder().withXpath("/xpath")
- .withLeaves(ImmutableMap.of("leaf", "value")).build()
+ static DataNode dataNodeWithLeavesNoChildren = new DataNodeBuilder().withXpath('/xpath')
+ .withLeaves([leaf:'value', leafList:['leaveListElement1','leaveListElement2']]).build()
@Shared
- static DataNode dataNodeWithChild = new DataNodeBuilder().withXpath("/parent")
- .withChildDataNodes(Arrays.asList(
- new DataNodeBuilder().withXpath("/parent/child").build()
- )).build()
+ static DataNode dataNodeWithChild = new DataNodeBuilder().withXpath('/parent')
+ .withChildDataNodes([new DataNodeBuilder().withXpath("/parent/child").build()]).build()
- @PostConstruct
- def initEndpoints() {
+ def setup() {
dataNodeEndpoint = "$basePath/v1/dataspaces/$dataspaceName/anchors/$anchorName/nodes"
}
def 'Create a node.'() {
- given: 'an endpoint'
+ given: 'some json to create a data node'
def json = 'some json (this is not validated)'
- when: 'post is invoked'
+ when: 'post is invoked with datanode endpoint and json'
def response = mvc.perform(
post(dataNodeEndpoint).contentType(MediaType.APPLICATION_JSON).content(json)
).andReturn().response
- then: 'the java API is called with the correct parameters'
- 1 * mockCpsDataService.saveData(dataspaceName, anchorName, json)
+ then: 'a created response is returned'
response.status == HttpStatus.CREATED.value()
+ then: 'the java API was called with the correct parameters'
+ 1 * mockCpsDataService.saveData(dataspaceName, anchorName, json)
}
@Unroll
- def 'Get data node with #scenario.'() {
- given: 'the service returns data node #scenario'
- mockCpsDataService.getDataNode(dataspaceName, anchorName, xpath, fetchDescendantsOption) >> dataNode
+ def 'Get data node with leaves'() {
+ given: 'the service returns data node leaves'
+ def xpath = 'some xPath'
+ mockCpsDataService.getDataNode(dataspaceName, anchorName, xpath, OMIT_DESCENDANTS) >> dataNodeWithLeavesNoChildren
when: 'get request is performed through REST API'
def response = mvc.perform(
get(dataNodeEndpoint)
.param('cps-path', xpath)
- .param('include-descendants', includeDescendants)
).andReturn().response
- then: 'assert the success response returned'
+ then: 'a success response is returned'
+ response.status == HttpStatus.OK.value()
+ and: 'response contains expected leaf and value'
+ response.contentAsString.contains('"leaf":"value"')
+ and: 'response contains expected leaf-list and values'
+ response.contentAsString.contains('"leafList":["leaveListElement1","leaveListElement2"]')
+ }
+
+ @Unroll
+ def 'Get data node with #scenario.'() {
+ given: 'the service returns data node with #scenario'
+ def xpath = 'some xPath'
+ mockCpsDataService.getDataNode(dataspaceName, anchorName, xpath, expectedCpsDataServiceOption) >> dataNode
+ when: 'get request is performed through REST API'
+ def response = mvc.perform(get(dataNodeEndpoint)
+ .param('cps-path', xpath)
+ .param('include-descendants', urlOption))
+ .andReturn().response
+ then: 'a success response is returned'
response.status == HttpStatus.OK.value()
- and: 'response contains expected value'
- response.contentAsString.contains(checkString)
+ and: 'the response contains child is #expectChildInResponse'
+ response.contentAsString.contains('"child"') == expectChildInResponse
where:
- scenario | dataNode | xpath | includeDescendants | fetchDescendantsOption || checkString
- 'no descendants by default' | dataNodeNoChildren | '/xpath' | '' | OMIT_DESCENDANTS || '"leaf"'
- 'no descendant explicitly' | dataNodeNoChildren | '/xpath' | 'false' | OMIT_DESCENDANTS || '"leaf"'
- 'with descendants' | dataNodeWithChild | '/parent' | 'true' | INCLUDE_ALL_DESCENDANTS || '"child"'
+ scenario | dataNode | urlOption || expectedCpsDataServiceOption | expectChildInResponse
+ 'no descendants by default' | dataNodeWithLeavesNoChildren | '' || OMIT_DESCENDANTS | false
+ 'no descendant explicitly' | dataNodeWithLeavesNoChildren | 'false' || OMIT_DESCENDANTS | false
+ 'with descendants' | dataNodeWithChild | 'true' || INCLUDE_ALL_DESCENDANTS | true
}
@Unroll
def 'Get data node error scenario: #scenario.'() {
- given: 'the service returns throws an exception'
+ given: 'the service throws an exception'
mockCpsDataService.getDataNode(dataspaceName, anchorName, xpath, _) >> { throw exception }
when: 'get request is performed through REST API'
def response = mvc.perform(
get(dataNodeEndpoint).param("cps-path", xpath)
).andReturn().response
- then: 'assert the success response returned'
+ then: 'a success response is returned'
response.status == httpStatus.value()
where:
scenario | xpath | exception || httpStatus
@@ -138,4 +151,4 @@ class DataRestControllerSpec extends Specification {
'no data' | '/x-path' | new DataNodeNotFoundException('', '', '') || HttpStatus.NOT_FOUND
'empty path' | '' | new IllegalStateException() || HttpStatus.NOT_IMPLEMENTED
}
-} \ No newline at end of file
+}