This is an automated email from the ASF dual-hosted git repository.

ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git


The following commit(s) were added to refs/heads/master by this push:
     new 1342d11  [OLINGO-1479]Allow system query option select and expand for 
PUT/PATCH requests
1342d11 is described below

commit 1342d11438242ef4b9294121200b599601b534e3
Author: ramya vasanth <ramya.vasa...@sap.com>
AuthorDate: Thu Aug 27 11:30:06 2020 +0530

    [OLINGO-1479]Allow system query option select and expand for PUT/PATCH 
requests
---
 .../server/core/uri/validator/UriValidator.java    | 14 +++++++++--
 .../core/uri/validator/UriValidatorTest.java       | 28 ++++++++++++++++++----
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
index c38d372..3aedfc0 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
@@ -391,7 +391,7 @@ public class UriValidator {
         }
       }
 
-    } else if (!options.isEmpty()) {
+    } else if (!options.isEmpty() && !checkIfSelectOrExpand(options, 
httpMethod)) {
       StringBuilder optionsString = new StringBuilder();
       for (final SystemQueryOption option : options) {
         optionsString.append(option.getName()).append(' ');
@@ -403,7 +403,17 @@ public class UriValidator {
     }
   }
 
-  private boolean isAction(final UriInfo uriInfo) {
+  private boolean checkIfSelectOrExpand(List<SystemQueryOption> options, 
HttpMethod httpMethod) {
+       boolean isSelectOrExpand = false;
+       for (SystemQueryOption queryOption : options) {
+               isSelectOrExpand = ((queryOption.getKind() == 
SystemQueryOptionKind.EXPAND) || 
+                               (queryOption.getKind() == 
SystemQueryOptionKind.SELECT)) &&
+                               (httpMethod == HttpMethod.PUT || httpMethod == 
HttpMethod.PATCH);
+       }
+       return isSelectOrExpand;
+}
+
+private boolean isAction(final UriInfo uriInfo) {
     List<UriResource> uriResourceParts = uriInfo.getUriResourceParts();
     return !uriResourceParts.isEmpty()
         && UriResourceKind.action == 
uriResourceParts.get(uriResourceParts.size() - 1).getKind();
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
index 3c39c41..25acb29 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
@@ -353,20 +353,38 @@ public class UriValidatorTest {
   }
 
   @Test
-  public void systemQueryOptionsNotAllowedForHttpPostPutPatchDelete() throws 
Exception {
+  public void systemQueryOptionsNotAllowedForHttpPostDelete() throws Exception 
{
     final String[] queryOptions =
         { QO_FILTER, QO_FORMAT, QO_EXPAND, QO_COUNT, QO_ORDERBY, QO_SEARCH, 
QO_SELECT, QO_SKIP, QO_TOP, QO_SKIPTOKEN };
     for (int i = 0; i < queryOptions.length; i++) {
       validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.POST,
           
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
-      validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PUT,
-          
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
-      validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PATCH,
-          
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
       validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.DELETE,
           
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
     }
   }
+  
+  @Test
+  public void systemQueryOptionsExpandAndSelectAllowedForHttpPutAndPatch() 
throws Exception {
+    final String[] queryOptions =
+        { QO_SELECT, QO_EXPAND };
+    for (int i = 0; i < queryOptions.length; i++) {
+      validate(URI_ENTITY, queryOptions[i], HttpMethod.PUT);
+      validate(URI_ENTITY, queryOptions[i], HttpMethod.PATCH);
+    }
+  }
+  
+  @Test
+  public void systemQueryOptionsNotAllowedForHttpPutAndPatch() throws 
Exception {
+    final String[] queryOptions =
+        { QO_FILTER, QO_FORMAT, QO_COUNT, QO_ORDERBY, QO_SEARCH, QO_SKIP, 
QO_TOP, QO_SKIPTOKEN };
+    for (int i = 0; i < queryOptions.length; i++) {
+       validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PUT,
+                 
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
+       validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PATCH,
+                 
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
+    }
+  }
 
   @Test
   public void systemQueryOptionIDAllowedForDELETEReferencesOnly() throws 
Exception {

Reply via email to