use of org.springframework.graphql.web.WebOutput in project spring-graphql by spring-projects.
the class GraphQlWebSocketHandler method handleWebOutput.
@SuppressWarnings("unchecked")
private Flux<TextMessage> handleWebOutput(WebSocketSession session, String id, WebOutput output) {
if (logger.isDebugEnabled()) {
logger.debug("Execution result ready" + (!CollectionUtils.isEmpty(output.getErrors()) ? " with errors: " + output.getErrors() : "") + ".");
}
Flux<ExecutionResult> outputFlux;
if (output.getData() instanceof Publisher) {
// Subscription
outputFlux = Flux.from((Publisher<ExecutionResult>) output.getData()).doOnSubscribe((subscription) -> {
Subscription prev = getSessionInfo(session).getSubscriptions().putIfAbsent(id, subscription);
if (prev != null) {
throw new SubscriptionExistsException();
}
});
} else {
// Single response (query or mutation) that may contain errors
outputFlux = Flux.just(output);
}
return outputFlux.map(result -> encode(GraphQlMessage.next(id, result))).concatWith(Mono.fromCallable(() -> encode(GraphQlMessage.complete(id)))).onErrorResume((ex) -> {
if (ex instanceof SubscriptionExistsException) {
CloseStatus status = new CloseStatus(4409, "Subscriber for " + id + " already exists");
GraphQlStatus.closeSession(session, status);
return Flux.empty();
}
String message = ex.getMessage();
GraphQLError error = GraphqlErrorBuilder.newError().message(message).build();
return Mono.just(encode(GraphQlMessage.error(id, error)));
});
}
use of org.springframework.graphql.web.WebOutput in project spring-graphql by spring-projects.
the class QuerydslDataFetcherTests method shouldFetchMultipleItemsWithListInput.
@Test
void shouldFetchMultipleItemsWithListInput() {
Book book1 = new Book(42L, "Hitchhiker's Guide to the Galaxy", new Author(0L, "Douglas", "Adams"));
Book book2 = new Book(53L, "Breaking Bad", new Author(0L, "", "Heisenberg"));
mockRepository.saveAll(Arrays.asList(book1, book2));
Mono<WebOutput> output = graphQlSetup(mockRepository).toWebGraphQlHandler().handleRequest(input("{ booksById(id: [42,53]) {name}}"));
List<String> names = GraphQlResponse.from(output).toList("booksById", Book.class).stream().map(Book::getName).collect(Collectors.toList());
assertThat(names).containsExactlyInAnyOrder(book1.getName(), book2.getName());
}
use of org.springframework.graphql.web.WebOutput in project spring-graphql by spring-projects.
the class QuerydslDataFetcherTests method shouldFetchSingleItems.
@Test
void shouldFetchSingleItems() {
Book book = new Book(42L, "Hitchhiker's Guide to the Galaxy", new Author(0L, "Douglas", "Adams"));
mockRepository.save(book);
Consumer<GraphQlSetup> tester = setup -> {
Mono<WebOutput> output = setup.toWebGraphQlHandler().handleRequest(input("{ bookById(id: 42) {name}}"));
Book actualBook = GraphQlResponse.from(output).toEntity("bookById", Book.class);
assertThat(actualBook.getName()).isEqualTo(book.getName());
};
// explicit wiring
tester.accept(graphQlSetup("bookById", QuerydslDataFetcher.builder(mockRepository).single()));
// auto registration
tester.accept(graphQlSetup(mockRepository));
}
use of org.springframework.graphql.web.WebOutput in project spring-graphql by spring-projects.
the class QuerydslDataFetcherTests method shouldFetchMultipleItems.
@Test
void shouldFetchMultipleItems() {
Book book1 = new Book(42L, "Hitchhiker's Guide to the Galaxy", new Author(0L, "Douglas", "Adams"));
Book book2 = new Book(53L, "Breaking Bad", new Author(0L, "", "Heisenberg"));
mockRepository.saveAll(Arrays.asList(book1, book2));
Consumer<GraphQlSetup> tester = graphQlSetup -> {
Mono<WebOutput> output = graphQlSetup.toWebGraphQlHandler().handleRequest(input("{ books {name}}"));
List<String> names = GraphQlResponse.from(output).toList("books", Book.class).stream().map(Book::getName).collect(Collectors.toList());
assertThat(names).containsExactlyInAnyOrder(book1.getName(), book2.getName());
};
// explicit wiring
tester.accept(graphQlSetup("books", QuerydslDataFetcher.builder(mockRepository).many()));
// auto registration
tester.accept(graphQlSetup(mockRepository));
}
use of org.springframework.graphql.web.WebOutput in project spring-graphql by spring-projects.
the class QuerydslDataFetcherTests method shouldApplyCustomizerInRepository.
@Test
void shouldApplyCustomizerInRepository() {
MockWithCustomizerRepository repository = repositoryFactory.getRepository(MockWithCustomizerRepository.class);
Book book1 = new Book(42L, "Hitchhiker's Guide to the Galaxy", new Author(0L, "Douglas", "Adams"));
Book book2 = new Book(53L, "Breaking Bad", new Author(0L, "", "Heisenberg"));
repository.saveAll(Arrays.asList(book1, book2));
Consumer<GraphQlSetup> tester = graphQlSetup -> {
Mono<WebOutput> output = graphQlSetup.toWebGraphQlHandler().handleRequest(input("{ books {name}}"));
List<String> names = GraphQlResponse.from(output).toList("books", Book.class).stream().map(Book::getName).collect(Collectors.toList());
assertThat(names).containsExactlyInAnyOrder(book1.getName(), book2.getName());
};
// explicit wiring
tester.accept(graphQlSetup("books", QuerydslDataFetcher.builder(mockRepository).many()));
// auto registration
tester.accept(graphQlSetup(mockRepository));
}
Aggregations