Search in sources :

Example 1 with Author

use of org.springframework.graphql.Author in project spring-graphql by spring-projects.

the class SchemaMappingInvocationTests method queryWithScalarArgument.

@Test
void queryWithScalarArgument() {
    String document = "{ " + "  bookById(id:\"1\") { " + "    id" + "    name" + "    author {" + "      firstName" + "      lastName" + "    }" + "  }" + "}";
    Mono<RequestOutput> resultMono = graphQlService().execute(TestRequestInput.forDocument(document));
    Book book = GraphQlResponse.from(resultMono).toEntity("bookById", Book.class);
    assertThat(book.getId()).isEqualTo(1);
    assertThat(book.getName()).isEqualTo("Nineteen Eighty-Four");
    Author author = book.getAuthor();
    assertThat(author.getFirstName()).isEqualTo("George");
    assertThat(author.getLastName()).isEqualTo("Orwell");
}
Also used : RequestOutput(org.springframework.graphql.RequestOutput) Book(org.springframework.graphql.Book) Author(org.springframework.graphql.Author) Test(org.junit.jupiter.api.Test)

Example 2 with Author

use of org.springframework.graphql.Author in project spring-graphql by spring-projects.

the class QuerydslDataFetcherTests method shouldFetchSingleItemsWithInterfaceProjection.

@Test
void shouldFetchSingleItemsWithInterfaceProjection() {
    Book book = new Book(42L, "Hitchhiker's Guide to the Galaxy", new Author(0L, "Douglas", "Adams"));
    mockRepository.save(book);
    DataFetcher<?> fetcher = QuerydslDataFetcher.builder(mockRepository).projectAs(BookProjection.class).single();
    WebGraphQlHandler handler = graphQlSetup("bookById", fetcher).toWebGraphQlHandler();
    Mono<WebOutput> outputMono = handler.handleRequest(input("{ bookById(id: 42) {name}}"));
    Book actualBook = GraphQlResponse.from(outputMono).toEntity("bookById", Book.class);
    assertThat(actualBook.getName()).isEqualTo("Hitchhiker's Guide to the Galaxy by Douglas Adams");
}
Also used : WebOutput(org.springframework.graphql.web.WebOutput) Author(org.springframework.graphql.Author) WebGraphQlHandler(org.springframework.graphql.web.WebGraphQlHandler) Test(org.junit.jupiter.api.Test)

Example 3 with Author

use of org.springframework.graphql.Author in project spring-graphql by spring-projects.

the class QuerydslDataFetcherTests method shouldApplyCustomizerViaBuilder.

@Test
void shouldApplyCustomizerViaBuilder() {
    MockRepository mockRepository = mock(MockRepository.class);
    DataFetcher<Iterable<Book>> fetcher = QuerydslDataFetcher.builder(mockRepository).customizer((QuerydslBinderCustomizer<QBook>) (bindings, book) -> bindings.bind(book.name).firstOptional((path, value) -> value.map(path::startsWith))).many();
    graphQlSetup("books", fetcher).toWebGraphQlHandler().handleRequest(input("{ books(name: \"H\", author: \"Doug\") {name}}")).block();
    ArgumentCaptor<Predicate> predicateCaptor = ArgumentCaptor.forClass(Predicate.class);
    verify(mockRepository).findBy(predicateCaptor.capture(), any());
    Predicate predicate = predicateCaptor.getValue();
    assertThat(predicate).isEqualTo(QBook.book.name.startsWith("H").and(QBook.book.author.eq("Doug")));
}
Also used : Arrays(java.util.Arrays) GraphQlRepository(org.springframework.graphql.data.GraphQlRepository) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) BookSource(org.springframework.graphql.BookSource) GraphQlSetup(org.springframework.graphql.GraphQlSetup) WebOutput(org.springframework.graphql.web.WebOutput) CrudRepository(org.springframework.data.repository.CrudRepository) ReactiveQuerydslPredicateExecutor(org.springframework.data.querydsl.ReactiveQuerydslPredicateExecutor) Value(org.springframework.beans.factory.annotation.Value) Author(org.springframework.graphql.Author) ArgumentCaptor(org.mockito.ArgumentCaptor) Repository(org.springframework.data.repository.Repository) KeyValueRepositoryFactory(org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactory) DataFetcher(graphql.schema.DataFetcher) Nullable(org.springframework.lang.Nullable) URI(java.net.URI) GraphQlResponse(org.springframework.graphql.GraphQlResponse) QuerydslPredicateExecutor(org.springframework.data.querydsl.QuerydslPredicateExecutor) WebGraphQlHandler(org.springframework.graphql.web.WebGraphQlHandler) RuntimeWiringConfigurer(org.springframework.graphql.execution.RuntimeWiringConfigurer) QuerydslBinderCustomizer(org.springframework.data.querydsl.binding.QuerydslBinderCustomizer) HttpHeaders(org.springframework.http.HttpHeaders) Mono(reactor.core.publisher.Mono) MapKeyValueAdapter(org.springframework.data.map.MapKeyValueAdapter) Mockito.when(org.mockito.Mockito.when) Collectors(java.util.stream.Collectors) Mockito.verify(org.mockito.Mockito.verify) Consumer(java.util.function.Consumer) Test(org.junit.jupiter.api.Test) Flux(reactor.core.publisher.Flux) List(java.util.List) WebInput(org.springframework.graphql.web.WebInput) KeyValueTemplate(org.springframework.data.keyvalue.core.KeyValueTemplate) Optional(java.util.Optional) Predicate(com.querydsl.core.types.Predicate) Mockito.any(org.mockito.Mockito.any) Collections(java.util.Collections) QuerydslBindings(org.springframework.data.querydsl.binding.QuerydslBindings) Mockito.mock(org.mockito.Mockito.mock) QuerydslBinderCustomizer(org.springframework.data.querydsl.binding.QuerydslBinderCustomizer) Predicate(com.querydsl.core.types.Predicate) Test(org.junit.jupiter.api.Test)

Example 4 with Author

use of org.springframework.graphql.Author in project spring-graphql by spring-projects.

the class QuerydslDataFetcherTests method shouldReactivelyFetchMultipleItems.

@Test
void shouldReactivelyFetchMultipleItems() {
    ReactiveMockRepository mockRepository = mock(ReactiveMockRepository.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"));
    when(mockRepository.findBy(any(), any())).thenReturn(Flux.just(book1, book2));
    Consumer<GraphQlSetup> tester = setup -> {
        Mono<WebOutput> outputMono = setup.toWebGraphQlHandler().handleRequest(input("{ books {name}}"));
        List<String> names = GraphQlResponse.from(outputMono).toList("books", Book.class).stream().map(Book::getName).collect(Collectors.toList());
        assertThat(names).containsExactlyInAnyOrder("Breaking Bad", "Hitchhiker's Guide to the Galaxy");
    };
    // explicit wiring
    tester.accept(graphQlSetup("books", QuerydslDataFetcher.builder(mockRepository).many()));
    // auto registration
    tester.accept(graphQlSetup(mockRepository));
}
Also used : Arrays(java.util.Arrays) GraphQlRepository(org.springframework.graphql.data.GraphQlRepository) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) BookSource(org.springframework.graphql.BookSource) GraphQlSetup(org.springframework.graphql.GraphQlSetup) WebOutput(org.springframework.graphql.web.WebOutput) CrudRepository(org.springframework.data.repository.CrudRepository) ReactiveQuerydslPredicateExecutor(org.springframework.data.querydsl.ReactiveQuerydslPredicateExecutor) Value(org.springframework.beans.factory.annotation.Value) Author(org.springframework.graphql.Author) ArgumentCaptor(org.mockito.ArgumentCaptor) Repository(org.springframework.data.repository.Repository) KeyValueRepositoryFactory(org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactory) DataFetcher(graphql.schema.DataFetcher) Nullable(org.springframework.lang.Nullable) URI(java.net.URI) GraphQlResponse(org.springframework.graphql.GraphQlResponse) QuerydslPredicateExecutor(org.springframework.data.querydsl.QuerydslPredicateExecutor) WebGraphQlHandler(org.springframework.graphql.web.WebGraphQlHandler) RuntimeWiringConfigurer(org.springframework.graphql.execution.RuntimeWiringConfigurer) QuerydslBinderCustomizer(org.springframework.data.querydsl.binding.QuerydslBinderCustomizer) HttpHeaders(org.springframework.http.HttpHeaders) Mono(reactor.core.publisher.Mono) MapKeyValueAdapter(org.springframework.data.map.MapKeyValueAdapter) Mockito.when(org.mockito.Mockito.when) Collectors(java.util.stream.Collectors) Mockito.verify(org.mockito.Mockito.verify) Consumer(java.util.function.Consumer) Test(org.junit.jupiter.api.Test) Flux(reactor.core.publisher.Flux) List(java.util.List) WebInput(org.springframework.graphql.web.WebInput) KeyValueTemplate(org.springframework.data.keyvalue.core.KeyValueTemplate) Optional(java.util.Optional) Predicate(com.querydsl.core.types.Predicate) Mockito.any(org.mockito.Mockito.any) Collections(java.util.Collections) QuerydslBindings(org.springframework.data.querydsl.binding.QuerydslBindings) Mockito.mock(org.mockito.Mockito.mock) GraphQlSetup(org.springframework.graphql.GraphQlSetup) Mono(reactor.core.publisher.Mono) Author(org.springframework.graphql.Author) List(java.util.List) Test(org.junit.jupiter.api.Test)

Example 5 with Author

use of org.springframework.graphql.Author in project spring-graphql by spring-projects.

the class BatchLoadingTests method batchLoader.

@Test
void batchLoader() {
    String document = "{ " + "  booksByCriteria(criteria: {author:\"Orwell\"}) { " + "    author {" + "      firstName, " + "      lastName " + "    }" + "  }" + "}";
    this.registry.forTypePair(Long.class, Author.class).registerBatchLoader((ids, env) -> Flux.fromIterable(ids).map(BookSource::getAuthor));
    GraphQlService service = GraphQlSetup.schemaResource(BookSource.schema).queryFetcher("booksByCriteria", env -> {
        Map<String, Object> criteria = env.getArgument("criteria");
        String authorName = (String) criteria.get("author");
        return BookSource.findBooksByAuthor(authorName).stream().map(book -> new Book(book.getId(), book.getName(), book.getAuthorId())).collect(Collectors.toList());
    }).dataFetcher("Book", "author", env -> {
        Book book = env.getSource();
        DataLoader<Long, Author> dataLoader = env.getDataLoader(Author.class.getName());
        return dataLoader.load(book.getAuthorId());
    }).dataLoaders(this.registry).toGraphQlService();
    Mono<RequestOutput> resultMono = service.execute(TestRequestInput.forDocument(document));
    List<Book> books = GraphQlResponse.from(resultMono).toList("booksByCriteria", Book.class);
    assertThat(books).hasSize(2);
    Author author = books.get(0).getAuthor();
    assertThat(author).isNotNull();
    assertThat(author.getFirstName()).isEqualTo("George");
    assertThat(author.getLastName()).isEqualTo("Orwell");
}
Also used : GraphQlResponse(org.springframework.graphql.GraphQlResponse) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) BookSource(org.springframework.graphql.BookSource) GraphQlSetup(org.springframework.graphql.GraphQlSetup) Mono(reactor.core.publisher.Mono) DataLoader(org.dataloader.DataLoader) Collectors(java.util.stream.Collectors) Book(org.springframework.graphql.Book) Test(org.junit.jupiter.api.Test) Flux(reactor.core.publisher.Flux) Author(org.springframework.graphql.Author) List(java.util.List) Map(java.util.Map) GraphQlService(org.springframework.graphql.GraphQlService) RequestOutput(org.springframework.graphql.RequestOutput) TestRequestInput(org.springframework.graphql.TestRequestInput) RequestOutput(org.springframework.graphql.RequestOutput) Book(org.springframework.graphql.Book) Author(org.springframework.graphql.Author) Map(java.util.Map) GraphQlService(org.springframework.graphql.GraphQlService) Test(org.junit.jupiter.api.Test)

Aggregations

Test (org.junit.jupiter.api.Test)14 Author (org.springframework.graphql.Author)14 WebOutput (org.springframework.graphql.web.WebOutput)10 WebGraphQlHandler (org.springframework.graphql.web.WebGraphQlHandler)9 List (java.util.List)7 Collectors (java.util.stream.Collectors)7 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)7 BookSource (org.springframework.graphql.BookSource)7 GraphQlResponse (org.springframework.graphql.GraphQlResponse)7 GraphQlSetup (org.springframework.graphql.GraphQlSetup)7 Flux (reactor.core.publisher.Flux)7 Mono (reactor.core.publisher.Mono)7 Predicate (com.querydsl.core.types.Predicate)6 DataFetcher (graphql.schema.DataFetcher)6 URI (java.net.URI)6 Arrays (java.util.Arrays)6 Collections (java.util.Collections)6 Optional (java.util.Optional)6 Consumer (java.util.function.Consumer)6 ArgumentCaptor (org.mockito.ArgumentCaptor)6