HTTP handlers set Locale in ExecutionInput

See gh-3
This commit is contained in:
Rossen Stoyanchev
2021-10-29 11:37:51 +00:00
parent f4a7c80cac
commit 2c8638dd6a
21 changed files with 341 additions and 45 deletions

View File

@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -113,6 +114,12 @@ class DefaultGraphQlTester implements GraphQlTester {
return this;
}
@Override
public DefaultRequestSpec locale(Locale locale) {
setLocale(locale);
return this;
}
@Override
public ResponseSpec execute() {
return this.requestStrategy.execute(createRequestInput());

View File

@@ -17,11 +17,13 @@
package org.springframework.graphql.test.tester;
import java.net.URI;
import java.util.Locale;
import java.util.function.Consumer;
import java.util.function.Function;
import reactor.core.publisher.Flux;
import org.springframework.graphql.RequestInput;
import org.springframework.graphql.web.WebInput;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable;
@@ -122,6 +124,12 @@ class DefaultWebGraphQlTester implements WebGraphQlTester {
return this;
}
@Override
public WebRequestSpec locale(Locale locale) {
setLocale(locale);
return this;
}
@Override
public WebRequestSpec httpHeader(String headerName, String... headerValues) {
for (String headerValue : headerValues) {
@@ -152,7 +160,8 @@ class DefaultWebGraphQlTester implements WebGraphQlTester {
}
private WebInput createWebInput() {
return new WebInput(DEFAULT_URL, this.headers, createRequestInput().toMap(), null);
RequestInput input = createRequestInput();
return new WebInput(DEFAULT_URL, this.headers, input.toMap(), input.getLocale(), null);
}
}

View File

@@ -18,6 +18,7 @@ package org.springframework.graphql.test.tester;
import java.time.Duration;
import java.util.List;
import java.util.Locale;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -174,6 +175,13 @@ public interface GraphQlTester {
*/
T variable(String name, Object value);
/**
* Set the locale to associate with the request.
* @param locale the locale to use
* @return this request spec
*/
T locale(Locale locale);
}
/**

View File

@@ -16,6 +16,7 @@
package org.springframework.graphql.test.tester;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import org.springframework.graphql.RequestInput;
@@ -38,6 +39,9 @@ class GraphQlTesterRequestSpecSupport {
private final Map<String, Object> variables = new LinkedHashMap<>();
@Nullable
private Locale locale;
protected GraphQlTesterRequestSpecSupport(String query) {
Assert.notNull(query, "`query` is required");
@@ -53,12 +57,16 @@ class GraphQlTesterRequestSpecSupport {
this.variables.put(name, value);
}
protected void setLocale(Locale locale) {
this.locale = locale;
}
protected void verify(GraphQlTester.ResponseSpec responseSpec) {
responseSpec.path("$.errors").valueIsEmpty();
}
protected RequestInput createRequestInput() {
return new RequestInput(this.query, this.operationName, this.variables);
return new RequestInput(this.query, this.operationName, this.variables, this.locale);
}
}

View File

@@ -17,6 +17,8 @@ package org.springframework.graphql.test.tester;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Collections;
import java.util.Locale;
import java.util.function.Predicate;
import com.jayway.jsonpath.Configuration;
@@ -82,7 +84,13 @@ final class WebTestClientRequestStrategy extends RequestStrategySupport implemen
FluxExchangeResult<TestExecutionResult> exchangeResult = this.client.post()
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.TEXT_EVENT_STREAM)
.headers(headers -> headers.putAll(webInput.getHeaders()))
.headers(headers -> {
Locale locale = webInput.getLocale();
if (locale != null) {
headers.setAcceptLanguageAsLocales(Collections.singletonList(locale));
}
headers.putAll(webInput.getHeaders());
})
.bodyValue(webInput.toMap())
.exchange()
.expectStatus()

View File

@@ -227,7 +227,7 @@ public class WebGraphQlTesterTests {
String content = request.getBody().readUtf8();
Map<String, Object> map = new ObjectMapper().readValue(content, new TypeReference<Map<String, Object>>() {});
WebInput webInput = new WebInput(request.getRequestUrl().uri(), headers, map, null);
WebInput webInput = new WebInput(request.getRequestUrl().uri(), headers, map, null, null);
consumer.accept(webInput);
}