fix fields and depth to option query
Issue-ID: CPS-678
Signed-off-by: tragait <rahul.tyagi@est.tech>
Change-Id: I8934bd7708ae51dce77b8684081a71ca57bfa3a4
diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml
index 560c945..d35919d 100644
--- a/cps-ncmp-rest/docs/openapi/components.yaml
+++ b/cps-ncmp-rest/docs/openapi/components.yaml
@@ -133,21 +133,24 @@
schema:
type: string
enum: [ application/json, application/yang-data+json ]
- fieldsParamInQuery:
- name: fields
+ optionsParamInQuery:
+ name: options
in: query
- description: Fields parameter to filter resource
+ description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'.
required: false
schema:
type: string
- depthParamInQuery:
- name: depth
- in: query
- description: Depth parameter for response
- required: false
- schema:
- type: integer
- minimum: 1
+ allowReserved: true
+ examples:
+ sample1:
+ value:
+ options: (key1=value1,key2=value2)
+ sample2:
+ value:
+ options: (key1=value1,key2=value1/value2)
+ sample3:
+ value:
+ options: (key1=10,key2=value2,key3=[val31;val32])
contentParamInHeader:
name: Content-Type
in: header
diff --git a/cps-ncmp-rest/docs/openapi/ncmproxy.yml b/cps-ncmp-rest/docs/openapi/ncmproxy.yml
index 263c76c..5a45a5c 100755
--- a/cps-ncmp-rest/docs/openapi/ncmproxy.yml
+++ b/cps-ncmp-rest/docs/openapi/ncmproxy.yml
@@ -213,8 +213,7 @@
- $ref: 'components.yaml#/components/parameters/cmHandleInPath'
- $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
- $ref: 'components.yaml#/components/parameters/acceptParamInHeader'
- - $ref: 'components.yaml#/components/parameters/fieldsParamInQuery'
- - $ref: 'components.yaml#/components/parameters/depthParamInQuery'
+ - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
responses:
200:
$ref: 'components.yaml#/components/responses/Ok'
@@ -238,8 +237,7 @@
- $ref: 'components.yaml#/components/parameters/cmHandleInPath'
- $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
- $ref: 'components.yaml#/components/parameters/acceptParamInHeader'
- - $ref: 'components.yaml#/components/parameters/fieldsParamInQuery'
- - $ref: 'components.yaml#/components/parameters/depthParamInQuery'
+ - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
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 0a1a641..4a9527a 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
@@ -157,22 +157,19 @@
*
* @param cmHandle cm handle identifier
* @param resourceIdentifier resource identifier
- * @param accept accept header parameter
- * @param fields fields query parameter
- * @param depth depth query parameter
+ * @param acceptParamInHeader accept header parameter
+ * @param optionsParamInQuery options query parameter
* @return {@code ResponseEntity} response from dmi plugin
*/
@Override
public ResponseEntity<Object> getResourceDataOperationalForCmHandle(final String cmHandle,
- final String resourceIdentifier,
- final String accept,
- final String fields,
- final Integer depth) {
+ final @NotNull @Valid String resourceIdentifier,
+ final String acceptParamInHeader,
+ final @Valid String optionsParamInQuery) {
final Object responseObject = networkCmProxyDataService.getResourceDataOperationalForCmHandle(cmHandle,
resourceIdentifier,
- accept,
- fields,
- depth);
+ acceptParamInHeader,
+ optionsParamInQuery);
return ResponseEntity.ok(responseObject);
}
@@ -181,22 +178,19 @@
*
* @param cmHandle cm handle identifier
* @param resourceIdentifier resource identifier
- * @param accept accept header parameter
- * @param fields fields query parameter
- * @param depth depth query parameter
+ * @param acceptParamInHeader accept header parameter
+ * @param optionsParamInQuery options query parameter
* @return {@code ResponseEntity} response from dmi plugin
*/
@Override
public ResponseEntity<Object> getResourceDataRunningForCmHandle(final String cmHandle,
- final String resourceIdentifier,
- final String accept,
- final String fields,
- final Integer depth) {
+ final @NotNull @Valid String resourceIdentifier,
+ final String acceptParamInHeader,
+ final @Valid String optionsParamInQuery) {
final Object responseObject = networkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle(cmHandle,
resourceIdentifier,
- accept,
- fields,
- depth);
+ acceptParamInHeader,
+ optionsParamInQuery);
return ResponseEntity.ok(responseObject);
}
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
index d62ae93..b8c68d9 100644
--- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
@@ -193,7 +193,7 @@
def 'Get Resource Data from pass-through operational.' () {
given: 'resource data url'
def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-operational" +
- "?resourceIdentifier=parent/child&fields=testFields&depth=5"
+ "?resourceIdentifier=parent/child&options=(a=1,b=2)"
when: 'get data resource request is performed'
def response = mvc.perform(
get(getUrl)
@@ -204,8 +204,7 @@
1 * mockNetworkCmProxyDataService.getResourceDataOperationalForCmHandle('testCmHandle',
'parent/child',
'application/json',
- 'testFields',
- 5)
+ '(a=1,b=2)')
and: 'response status is Ok'
response.status == HttpStatus.OK.value()
}
@@ -213,13 +212,12 @@
def 'Get Resource Data from pass-through running with #scenario value in resource identifier param.' () {
given: 'resource data url'
def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" +
- "?resourceIdentifier=" + resourceIdentifier + "&fields=testFields&depth=5"
+ "?resourceIdentifier=" + resourceIdentifier + "&options=(a=1,b=2)"
and: 'ncmp service returns json object'
mockNetworkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle('testCmHandle',
resourceIdentifier,
'application/json',
- 'testFields',
- 5) >> '{valid-json}'
+ '(a=1,b=2)') >> '{valid-json}'
when: 'get data resource request is performed'
def response = mvc.perform(
get(getUrl)
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 2f91ed3..cb2f782 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
@@ -114,16 +114,14 @@
*
* @param cmHandle cm handle
* @param resourceIdentifier resource identifier
- * @param accept accept param
- * @param fields fields query
- * @param depth depth query
+ * @param acceptParamInHeader accept param
+ * @param optionsParamInQuery options query
* @return {@code Object} resource data
*/
Object getResourceDataOperationalForCmHandle(@NotNull String cmHandle,
@NotNull String resourceIdentifier,
- String accept,
- String fields,
- Integer depth);
+ String acceptParamInHeader,
+ String optionsParamInQuery);
/**
* Get resource data for data store pass-through running
@@ -131,16 +129,14 @@
*
* @param cmHandle cm handle
* @param resourceIdentifier resource identifier
- * @param acceptParam accept param
- * @param fields fields query
- * @param depth depth query
+ * @param acceptParamInHeader accept param
+ * @param optionsParamInQuery options query
* @return {@code Object} resource data
*/
Object getResourceDataPassThroughRunningForCmHandle(@NotNull String cmHandle,
@NotNull String resourceIdentifier,
- String acceptParam,
- String fields,
- Integer depth);
+ String acceptParamInHeader,
+ String optionsParamInQuery);
/**
* Create resource data for data store pass-through running
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 291b0bf..889d38e 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
@@ -169,9 +169,8 @@
@Override
public Object getResourceDataOperationalForCmHandle(final @NotNull String cmHandle,
final @NotNull String resourceIdentifier,
- final String acceptParam,
- final String fieldsQueryParam,
- final Integer depthQueryParam) {
+ final String acceptParamInHeader,
+ final String optionsParamInQuery) {
final DataNode cmHandleDataNode = fetchDataNodeFromDmiRegistryForCmHandle(cmHandle);
final String dmiServiceName = String.valueOf(cmHandleDataNode.getLeaves().get(NCMP_DMI_SERVICE_NAME));
@@ -179,9 +178,8 @@
final ResponseEntity<Object> response = dmiOperations.getResourceDataOperationalFromDmi(dmiServiceName,
cmHandle,
resourceIdentifier,
- fieldsQueryParam,
- depthQueryParam,
- acceptParam,
+ optionsParamInQuery,
+ acceptParamInHeader,
dmiRequestBody);
return handleResponse(response);
}
@@ -189,18 +187,16 @@
@Override
public Object getResourceDataPassThroughRunningForCmHandle(final @NotNull String cmHandle,
final @NotNull String resourceIdentifier,
- final String acceptParam,
- final String fields,
- final Integer depth) {
+ final String acceptParamInHeader,
+ final String optionsParamInQuery) {
final DataNode cmHandleDataNode = fetchDataNodeFromDmiRegistryForCmHandle(cmHandle);
final String dmiServiceName = String.valueOf(cmHandleDataNode.getLeaves().get(NCMP_DMI_SERVICE_NAME));
final String dmiRequestBody = getGenericRequestBody(cmHandleDataNode);
final ResponseEntity<Object> response = dmiOperations.getResourceDataPassThroughRunningFromDmi(dmiServiceName,
cmHandle,
resourceIdentifier,
- fields,
- depth,
- acceptParam,
+ optionsParamInQuery,
+ acceptParamInHeader,
dmiRequestBody);
return handleResponse(response);
}
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operation/DmiOperations.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operation/DmiOperations.java
index c295e03..363b0ef 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operation/DmiOperations.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operation/DmiOperations.java
@@ -53,6 +53,7 @@
private static final String DMI_CM_HANDLE_DATASTORE_PATH = DMI_CM_HANDLE_PATH + "/data/ds";
private static final String URL_SEPARATOR = "/";
private static final String RESOURCE_IDENTIFIER = "resourceIdentifier";
+ private static final String OPTIONS_QUERY_KEY = "options";
/**
@@ -104,22 +105,20 @@
* @param dmiServiceName dmi service name
* @param cmHandle network resource identifier
* @param resourceId resource identifier
- * @param fieldsQuery fields query
- * @param depthQuery depth query
- * @param acceptParam accept parameter
+ * @param optionsParamInQuery options query
+ * @param acceptParamInHeader accept parameter
* @param jsonBody json body for put operation
* @return {@code ResponseEntity} response entity
*/
public ResponseEntity<Object> getResourceDataOperationalFromDmi(final String dmiServiceName,
final String cmHandle,
final String resourceId,
- final String fieldsQuery,
- final Integer depthQuery,
- final String acceptParam,
+ final String optionsParamInQuery,
+ final String acceptParamInHeader,
final String jsonBody) {
final var dmiResourceDataUrl = getDmiDatastoreUrl(dmiServiceName, cmHandle, resourceId,
- fieldsQuery, depthQuery, DataStoreEnum.PASSTHROUGH_OPERATIONAL);
- final var httpHeaders = prepareHeader(acceptParam);
+ optionsParamInQuery, DataStoreEnum.PASSTHROUGH_OPERATIONAL);
+ final var httpHeaders = prepareHeader(acceptParamInHeader);
return dmiRestClient.putOperationWithJsonData(dmiResourceDataUrl, jsonBody, httpHeaders);
}
@@ -130,22 +129,20 @@
* @param dmiServiceName dmi service name
* @param cmHandle network resource identifier
* @param resourceId resource identifier
- * @param fieldsQuery fields query
- * @param depthQuery depth query
- * @param acceptParam accept parameter
+ * @param optionsParamInQuery fields query
+ * @param acceptParamInHeader accept parameter
* @param jsonBody json body for put operation
* @return {@code ResponseEntity} response entity
*/
public ResponseEntity<Object> getResourceDataPassThroughRunningFromDmi(final String dmiServiceName,
final String cmHandle,
final String resourceId,
- final String fieldsQuery,
- final Integer depthQuery,
- final String acceptParam,
+ final String optionsParamInQuery,
+ final String acceptParamInHeader,
final String jsonBody) {
final var dmiResourceDataUrl = getDmiDatastoreUrl(dmiServiceName, cmHandle, resourceId,
- fieldsQuery, depthQuery, DataStoreEnum.PASSTHROUGH_RUNNING);
- final var httpHeaders = prepareHeader(acceptParam);
+ optionsParamInQuery, DataStoreEnum.PASSTHROUGH_RUNNING);
+ final var httpHeaders = prepareHeader(acceptParamInHeader);
return dmiRestClient.putOperationWithJsonData(dmiResourceDataUrl, jsonBody, httpHeaders);
}
@@ -163,7 +160,7 @@
final String cmHandle,
final String resourceId,
final String jsonBody) {
- final var stringBuilder = getStringBuilderForPassThroughRunningUrl(dmiServiceName,
+ final var stringBuilder = getStringBuilderForPassThroughUrl(dmiServiceName,
cmHandle, resourceId, DataStoreEnum.PASSTHROUGH_RUNNING);
return dmiRestClient.postOperationWithJsonData(stringBuilder.toString(), jsonBody, new HttpHeaders());
}
@@ -183,20 +180,19 @@
private String getDmiDatastoreUrl(final String dmiServiceName,
final String cmHandle,
final String resourceId,
- final String fieldsQuery,
- final Integer depthQuery,
+ final String optionsParamInQuery,
final DataStoreEnum dataStoreEnum) {
- final var stringBuilder = getStringBuilderForPassThroughRunningUrl(dmiServiceName,
+ final var stringBuilder = getStringBuilderForPassThroughUrl(dmiServiceName,
cmHandle, resourceId, dataStoreEnum);
- appendFieldsAndDepth(stringBuilder, fieldsQuery, depthQuery);
+ appendOptionsQuery(stringBuilder, optionsParamInQuery);
return stringBuilder.toString();
}
@NotNull
- private StringBuilder getStringBuilderForPassThroughRunningUrl(final String dmiServiceName,
- final String cmHandle,
- final String resourceId,
- final DataStoreEnum dataStoreEnum) {
+ private StringBuilder getStringBuilderForPassThroughUrl(final String dmiServiceName,
+ final String cmHandle,
+ final String resourceId,
+ final DataStoreEnum dataStoreEnum) {
final var stringBuilder = new StringBuilder(dmiServiceName);
stringBuilder.append(DMI_API_PATH);
stringBuilder.append(DMI_CM_HANDLE_DATASTORE_PATH.replace("{cmHandle}", cmHandle));
@@ -205,23 +201,14 @@
return stringBuilder;
}
- private void appendFieldsAndDepth(final StringBuilder stringBuilder,
- final String fieldsQuery,
- final Integer depthQuery) {
- final var doesFieldExists = (fieldsQuery != null && !fieldsQuery.isEmpty());
- if (doesFieldExists) {
- stringBuilder.append("&").append("fields=").append(fieldsQuery);
- }
- if (depthQuery != null) {
- stringBuilder.append("&").append("depth=").append(depthQuery);
- }
+ private void appendOptionsQuery(final StringBuilder stringBuilder,
+ final String optionsParamInQuery) {
+ stringBuilder.append("&").append(OPTIONS_QUERY_KEY).append("=").append(optionsParamInQuery);
}
private HttpHeaders prepareHeader(final String acceptParam) {
final var httpHeaders = new HttpHeaders();
- if (acceptParam != null && !acceptParam.isEmpty()) {
- httpHeaders.set(HttpHeaders.ACCEPT, acceptParam);
- }
+ httpHeaders.set(HttpHeaders.ACCEPT, acceptParam);
return httpHeaders;
}
}
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
index 2b376e9..5132501 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
@@ -231,16 +231,14 @@
mockDmiOperations.getResourceDataOperationalFromDmi('testDmiService',
'testCmHandle',
'testResourceId',
- 'testFieldQuery',
- 5,
+ '(a=1,b=2)',
'testAcceptParam',
'{"operation":"read","cmHandleProperties":{"testName":"testValue"}}') >> new ResponseEntity<>('result-json', HttpStatus.OK)
when: 'get resource data is called'
def response = objectUnderTest.getResourceDataOperationalForCmHandle('testCmHandle',
'testResourceId',
'testAcceptParam',
- 'testFieldQuery',
- 5)
+ '(a=1,b=2)')
then: 'dmi returns ok response'
response == 'result-json'
}
@@ -259,8 +257,7 @@
def response = objectUnderTest.getResourceDataOperationalForCmHandle('testCmHandle',
'testResourceId',
'testAcceptParam',
- 'testFieldQuery',
- 5)
+ '(a=1,b=2)')
then: 'exception is thrown with the expected details'
def exceptionThrown = thrown(NcmpException.class)
exceptionThrown.details == 'testException'
@@ -276,8 +273,7 @@
mockDmiOperations.getResourceDataOperationalFromDmi('testDmiService',
'testCmHandle',
'testResourceId',
- 'testFieldQuery',
- 5,
+ '(a=1,b=2)',
'testAcceptParam',
'{"operation":"read","cmHandleProperties":{"testName":"testValue"}}')
>> new ResponseEntity<>('NOK-json', HttpStatus.NOT_FOUND)
@@ -285,8 +281,7 @@
def response = objectUnderTest.getResourceDataOperationalForCmHandle('testCmHandle',
'testResourceId',
'testAcceptParam',
- 'testFieldQuery',
- 5)
+ '(a=1,b=2)')
then: 'exception is thrown'
def exceptionThrown = thrown(NcmpException.class)
and: 'details contains the original response'
@@ -303,16 +298,14 @@
mockDmiOperations.getResourceDataPassThroughRunningFromDmi('testDmiService',
'testCmHandle',
'testResourceId',
- 'testFieldQuery',
- 5,
+ '(a=1,b=2)',
'testAcceptParam',
'{"operation":"read","cmHandleProperties":{"testName":"testValue"}}') >> new ResponseEntity<>('{result-json}', HttpStatus.OK)
when: 'get resource data is called'
def response = objectUnderTest.getResourceDataPassThroughRunningForCmHandle('testCmHandle',
'testResourceId',
'testAcceptParam',
- 'testFieldQuery',
- 5)
+ '(a=1,b=2)')
then: 'get resource data returns expected response'
response == '{result-json}'
}
@@ -331,8 +324,7 @@
def response = objectUnderTest.getResourceDataPassThroughRunningForCmHandle('testCmHandle',
'testResourceId',
'testAcceptParam',
- 'testFieldQuery',
- 5)
+ '(a=1,b=2)')
then: 'exception is thrown with the expected details'
def exceptionThrown = thrown(NcmpException.class)
exceptionThrown.details == 'testException'
@@ -348,8 +340,7 @@
mockDmiOperations.getResourceDataPassThroughRunningFromDmi('testDmiService',
'testCmHandle',
'testResourceId',
- 'testFieldQuery',
- 5,
+ '(a=1,b=2)',
'testAcceptParam',
'{"operation":"read","cmHandleProperties":{"testName":"testValue"}}')
>> new ResponseEntity<>('NOK-json', HttpStatus.NOT_FOUND)
@@ -357,8 +348,7 @@
def response = objectUnderTest.getResourceDataPassThroughRunningForCmHandle('testCmHandle',
'testResourceId',
'testAcceptParam',
- 'testFieldQuery',
- 5)
+ '(a=1,b=2)')
then: 'exception is thrown'
def exceptionThrown = thrown(NcmpException.class)
and: 'details contains the original response'
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operation/DmiOperationsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operation/DmiOperationsSpec.groovy
index 8af7781..8e0fb76 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operation/DmiOperationsSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operation/DmiOperationsSpec.groovy
@@ -42,13 +42,12 @@
def 'call get resource data for pass-through:operational datastore from DMI.'() {
given: 'expected url'
def expectedUrl = 'testDmiBasePath/dmi/v1/ch/testCmhandle/data/ds' +
- '/ncmp-datastore:passthrough-operational?resourceIdentifier=parent/child&fields=testFieldsQuery&depth=10'
+ '/ncmp-datastore:passthrough-operational?resourceIdentifier=parent/child&options=(a=1,b=2)'
when: 'get resource data is called to DMI'
objectUnderTest.getResourceDataOperationalFromDmi('testDmiBasePath',
'testCmhandle',
'parent/child',
- 'testFieldsQuery',
- 10,
+ '(a=1,b=2)',
'testAcceptJson',
'testJsonbody')
then: 'the put operation is executed with the correct URL'
@@ -57,13 +56,12 @@
def 'call get resource data for pass-through:running datastore from DMI.'() {
given: 'expected url'
def expectedUrl = 'testDmiBasePath/dmi/v1/ch/testCmhandle/data/ds' +
- '/ncmp-datastore:passthrough-running?resourceIdentifier=parent/child&fields=testFieldsQuery&depth=10'
+ '/ncmp-datastore:passthrough-running?resourceIdentifier=parent/child&options=(a=1,b=2)'
when: 'get resource data is called to DMI'
objectUnderTest.getResourceDataPassThroughRunningFromDmi('testDmiBasePath',
'testCmhandle',
'parent/child',
- 'testFieldsQuery',
- 10,
+ '(a=1,b=2)',
'testAcceptJson',
'testJsonbody')
then: 'the put operation is executed with the correct URL'