Merge "Support pagination in query across all anchors(ep4)"
authorLuke Gleeson <luke.gleeson@est.tech>
Thu, 3 Aug 2023 13:13:47 +0000 (13:13 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 3 Aug 2023 13:13:47 +0000 (13:13 +0000)
1  2 
cps-rest/docs/openapi/components.yml
cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy
cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java
cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
docs/api/swagger/cps/openapi.yaml
integration-test/src/test/groovy/org/onap/cps/integration/functional/CpsDataServiceIntegrationSpec.groovy

Simple merge
  
  package org.onap.cps.rest.controller
  
+ import org.onap.cps.spi.PaginationOption
  import org.onap.cps.utils.PrefixResolver
  
 +import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY
  import static org.onap.cps.spi.FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS
  import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS
  import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
@@@ -144,6 -147,40 +152,41 @@@ class QueryRestControllerSpec extends S
              'no descendants by default' | ''                             || OMIT_DESCENDANTS
              'no descendant explicitly'  | 'none'                         || OMIT_DESCENDANTS
              'descendants'               | 'all'                          || INCLUDE_ALL_DESCENDANTS
 +            'direct children'           | 'direct'                       || DIRECT_CHILDREN_ONLY
      }
+     def 'Query data node by cps path for the given dataspace across all anchors with pagination #scenario.'() {
+         given: 'service method returns a list containing a data node from different anchors'
+         def dataNode1 = new DataNodeBuilder().withXpath('/xpath')
+                 .withAnchor('my_anchor')
+                 .withLeaves([leaf: 'value', leafList: ['leaveListElement1', 'leaveListElement2']]).build()
+         def dataNode2 = new DataNodeBuilder().withXpath('/xpath')
+                 .withAnchor('my_anchor_2')
+                 .withLeaves([leaf: 'value', leafList: ['leaveListElement3', 'leaveListElement4']]).build()
+         and: 'the query endpoint'
+             def dataspaceName = 'my_dataspace'
+             def cpsPath = 'some/cps/path'
+             def dataNodeEndpoint = "$basePath/v2/dataspaces/$dataspaceName/nodes/query"
+             mockCpsQueryService.queryDataNodesAcrossAnchors(dataspaceName, cpsPath,
+                 INCLUDE_ALL_DESCENDANTS, new PaginationOption(pageIndex,pageSize)) >> [dataNode1, dataNode2]
+             mockCpsQueryService.countAnchorsForDataspaceAndCpsPath(dataspaceName, cpsPath) >> totalAnchors
+         when: 'query data nodes API is invoked'
+             def response =
+                 mvc.perform(
+                         get(dataNodeEndpoint)
+                                 .param('cps-path', cpsPath)
+                                 .param('descendants', "all")
+                                 .param('pageIndex', String.valueOf(pageIndex))
+                                 .param('pageSize', String.valueOf(pageSize)))
+                         .andReturn().response
+         then: 'the response contains the the datanode in json format'
+             assert response.status == HttpStatus.OK.value()
+             assert Integer.valueOf(response.getHeaderValue("total-pages")) == expectedPageSize
+             assert response.getContentAsString().contains('{"xpath":{"leaf":"value","leafList":["leaveListElement1","leaveListElement2"]}}')
+             assert response.getContentAsString().contains('{"xpath":{"leaf":"value","leafList":["leaveListElement3","leaveListElement4"]}}')
+         where: 'the following options for include descendants are provided in the request'
+             scenario                     | pageIndex | pageSize | totalAnchors || expectedPageSize
+             '1st page with all anchors'  | 1         | 3        | 3            || 1
+             '1st page with less anchors' | 1         | 2        | 3            || 2
+     }
  }
Simple merge