Skip to content

Commit

Permalink
Helper for query params construction (#296)
Browse files Browse the repository at this point in the history
* helper for query params construction

* typo

* updating examples

* update java test
  • Loading branch information
tsiq-karold committed Apr 3, 2019
1 parent 1a94257 commit c3f5a20
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 0 deletions.
3 changes: 3 additions & 0 deletions webtau-docs/webtau/REST/query-parameters.md
@@ -0,0 +1,3 @@
Webtau offers a number of ways of specifying query parameters:

:include-groovy: com/twosigma/webtau/http/HttpGroovyTest.groovy {entry: "query params example", bodyOnly: true}
1 change: 1 addition & 0 deletions webtau-docs/webtau/toc
Expand Up @@ -4,6 +4,7 @@ REST
CRUD-separated
data-node
headers
query-parameters
files-upload
PDF
documentation
Expand Down
Expand Up @@ -37,10 +37,18 @@ class HttpExtensions {
return http.get(url, new HttpQueryParams(queryParams), header, closureToHttpResponseValidator(validation))
}

static def get(Http http, String url, HttpQueryParams queryParams, HttpHeader header, Closure validation) {
return http.get(url, queryParams, header, closureToHttpResponseValidator(validation))
}

static def get(Http http, String url, Map<String, ?> queryParams, Closure validation) {
return http.get(url, new HttpQueryParams(queryParams), closureToHttpResponseValidator(validation))
}

static def get(Http http, String url, HttpQueryParams queryParams, Closure validation) {
return http.get(url, queryParams, closureToHttpResponseValidator(validation))
}

static def post(Http http, String url, HttpHeader header, Map<String, Object> requestBody, Closure validation) {
return http.post(url, header, new JsonRequestBody(requestBody), closureToHttpResponseValidator(validation))
}
Expand Down
Expand Up @@ -166,6 +166,24 @@ class HttpGroovyTest implements HttpConfiguration {
assert complexList[0].getClass() == LinkedHashMap
}

@Test
void "query params example"() {
// Query params in the URL
http.get("params?a=1&b=text") {
// assertions go here
}

// Query params with map based helper - best suited for Groovy
http.get("params", http.query([a: 1, b: 'text'])) {
// assertions go here
}

// Query params with varargs based helper - best suited for Java
http.get("params", http.query('a', '1', 'b', 'text')) {
// assertions go here
}
}

@Test
void "build query params from the map"() {
http.get("params", [a: 1, b: 'text']) {
Expand All @@ -174,6 +192,14 @@ class HttpGroovyTest implements HttpConfiguration {
}
}

@Test
void "query params in url"() {
http.get("params?a=1&b=text") {
a.should == 1
b.should == 'text'
}
}

@Test
void "build query params from the map and return a single value from closure"() {
def a = http.get("params", [a: 1, b: 'text']) {
Expand All @@ -183,6 +209,36 @@ class HttpGroovyTest implements HttpConfiguration {
assert a == 1
}

@Test
void "build query params using map helper"() {
http.get("params", http.query([a: 1, b: 'text'])) {
a.should == 1
b.should == 'text'
}
}

@Test
void "build query params using var arg helper"() {
http.get("params", http.query('a', '1', 'b', 'text')) {
a.should == 1
b.should == 'text'
}
}

@Test
void "query param creation"() {
def varArgQuery = http.query(
'param1', 'value1',
'param2', 'value2'
)

def mapBasedQuery = http.query([
'param1': 'value1',
'param2': 'value2'])

assert varArgQuery == mapBasedQuery
}

@Test
void "explicitly access header and body "() {
def a = http.get("params", [a: 1, b: 'text']) { header, body ->
Expand Down
8 changes: 8 additions & 0 deletions webtau-http/src/main/java/com/twosigma/webtau/http/Http.java
Expand Up @@ -271,6 +271,14 @@ public HttpHeader header(Map<String, String> properties) {
return new HttpHeader(properties);
}

public HttpQueryParams query(String... params) {
return new HttpQueryParams(CollectionUtils.aMapOf((Object[]) params));
}

public HttpQueryParams query(Map<String, ?> params) {
return new HttpQueryParams(params);
}

public HttpRequestBody body(String mimeType, String content) {
return TextRequestBody.withType(mimeType, content);
}
Expand Down
Expand Up @@ -21,6 +21,7 @@
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

public class HttpQueryParams {
Expand Down Expand Up @@ -54,4 +55,18 @@ private static String decode(String text) {
throw new RuntimeException(e);
}
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
HttpQueryParams that = (HttpQueryParams) o;
return Objects.equals(params, that.params) &&
Objects.equals(asString, that.asString);
}

@Override
public int hashCode() {
return Objects.hash(params, asString);
}
}
Expand Up @@ -20,6 +20,7 @@
import com.twosigma.webtau.data.table.TableData;
import com.twosigma.webtau.http.config.HttpConfiguration;
import com.twosigma.webtau.http.config.HttpConfigurations;
import com.twosigma.webtau.utils.CollectionUtils;
import com.twosigma.webtau.utils.UrlUtils;
import org.junit.*;

Expand Down Expand Up @@ -238,6 +239,25 @@ public void redirectPut() {
});
}

@Test
public void queryParams() {
http.get("/params?a=1&b=text", (header, body) -> {
body.get("a").should(equal(1));
body.get("b").should(equal("text"));
});

Map<String, String> queryParams = CollectionUtils.aMapOf("a", 1, "b", "text");
http.get("/params", http.query(queryParams), (header, body) -> {
body.get("a").should(equal(1));
body.get("b").should(equal("text"));
});

http.get("/params", http.query("a", "1", "b", "text"), (header, body) -> {
body.get("a").should(equal(1));
body.get("b").should(equal("text"));
});
}

@Override
public String fullUrl(String url) {
if (UrlUtils.isFull(url)) {
Expand Down

0 comments on commit c3f5a20

Please sign in to comment.