Skip to content

Commit

Permalink
Merge pull request #35766 from robp94/federation-tests
Browse files Browse the repository at this point in the history
Add tests for federation
  • Loading branch information
jmartisk authored Sep 11, 2023
2 parents 5d072a3 + 6219fe5 commit b2367be
Show file tree
Hide file tree
Showing 7 changed files with 210 additions and 60 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.quarkus.smallrye.graphql.deployment;
package io.quarkus.smallrye.graphql.deployment.federation;

import static org.hamcrest.Matchers.*;
import static org.hamcrest.Matchers.containsString;
Expand All @@ -9,6 +9,7 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.smallrye.graphql.deployment.AbstractGraphQLTest;
import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.quarkus.smallrye.graphql.deployment.federation.base;

import io.smallrye.graphql.api.federation.Extends;
import io.smallrye.graphql.api.federation.External;
import io.smallrye.graphql.api.federation.Key;

@Key(fields = "id")
@Extends
public class Foo {

@External
public int id;

public String name;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.quarkus.smallrye.graphql.deployment.federation.base;

import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Query;

@GraphQLApi
public class FooApi {
@Query
public Foo foo(int id) {
var foo = new Foo();
foo.id = id;
foo.name = "Name of " + id;
return foo;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package io.quarkus.smallrye.graphql.deployment.federation.base;

import static org.hamcrest.Matchers.containsString;

import org.hamcrest.CoreMatchers;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.smallrye.graphql.deployment.AbstractGraphQLTest;
import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

public class GraphQLFederationBaseTest extends AbstractGraphQLTest {

@RegisterExtension
static QuarkusUnitTest test = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(FooApi.class, Foo.class)
.addAsResource(new StringAsset("quarkus.smallrye-graphql.schema-include-directives=true"),
"application.properties")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"));

@Test
public void checkServiceDeclarationInSchema() {
RestAssured.given()
.get("/graphql/schema.graphql")
.then()
.body(containsString("type _Service {"));
}

@Test
public void checkFederationDirectivesInSchema() {
RestAssured.given()
.get("/graphql/schema.graphql")
.then()
.body(containsString("id: Int! @external"))
.body(containsString("type Foo @extends @key(fields : \"id\")"));
;
}

@Test
public void resolvePerFederation() {
String query = "query federation($representations: [_Any!]!) {\n" +
" _entities(representations: $representations) {\n" +
" ... on Foo {\n" +
" id\n" +
" name\n" +
" }\n" +
" }\n" +
"}";
String variables = "{\n" +
" \"representations\": [\n" +
" {\n" +
" \"__typename\": \"Foo\",\n" +
" \"id\": 1\n" +
" },\n" +
" {\n" +
" \"__typename\": \"Foo\",\n" +
" \"id\": 2\n" +
" }\n" +
" ]\n" +
"}";

String request = getPayload(query, variables);
RestAssured.given().when()
.accept(MEDIATYPE_JSON)
.contentType(MEDIATYPE_JSON)
.body(request)
.post("/graphql")
.then()
.assertThat()
.statusCode(200)
.and()
.body(CoreMatchers.is(
"{\"data\":{\"_entities\":[{\"id\":1,\"name\":\"Name of 1\"},{\"id\":2,\"name\":\"Name of 2\"}]}}"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.quarkus.smallrye.graphql.deployment.federation.base.uni;

import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Query;

import io.quarkus.smallrye.graphql.deployment.federation.base.Foo;
import io.smallrye.mutiny.Uni;

@GraphQLApi
public class FooApiUni {
@Query
public Uni<Foo> foo(int id) {
var foo = new Foo();
foo.id = id;
foo.name = "Name of " + id;
return Uni.createFrom().item(foo);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package io.quarkus.smallrye.graphql.deployment.federation.base.uni;

import static org.hamcrest.Matchers.containsString;

import org.hamcrest.CoreMatchers;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.smallrye.graphql.deployment.AbstractGraphQLTest;
import io.quarkus.smallrye.graphql.deployment.federation.base.Foo;
import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

public class GraphQLFederationBaseUniTest extends AbstractGraphQLTest {

@RegisterExtension
static QuarkusUnitTest test = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(FooApiUni.class, Foo.class)
.addAsResource(new StringAsset("quarkus.smallrye-graphql.schema-include-directives=true"),
"application.properties")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"));

@Test
public void checkServiceDeclarationInSchema() {
RestAssured.given()
.get("/graphql/schema.graphql")
.then()
.body(containsString("type _Service {"));
}

@Test
public void checkFederationDirectivesInSchema() {
RestAssured.given()
.get("/graphql/schema.graphql")
.then()
.body(containsString("id: Int! @external"))
.body(containsString("type Foo @extends @key(fields : \"id\")"));
;
}

@Test
public void resolvePerFederation() {
String query = "query federation($representations: [_Any!]!) {\n" +
" _entities(representations: $representations) {\n" +
" ... on Foo {\n" +
" id\n" +
" name\n" +
" }\n" +
" }\n" +
"}";
String variables = "{\n" +
" \"representations\": [\n" +
" {\n" +
" \"__typename\": \"Foo\",\n" +
" \"id\": 1\n" +
" },\n" +
" {\n" +
" \"__typename\": \"Foo\",\n" +
" \"id\": 2\n" +
" }\n" +
" ]\n" +
"}";

String request = getPayload(query, variables);
RestAssured.given().when()
.accept(MEDIATYPE_JSON)
.contentType(MEDIATYPE_JSON)
.body(request)
.post("/graphql")
.then()
.assertThat()
.statusCode(200)
.and()
.body(CoreMatchers.is(
"{\"data\":{\"_entities\":[{\"id\":1,\"name\":\"Name of 1\"},{\"id\":2,\"name\":\"Name of 2\"}]}}"));
}
}

0 comments on commit b2367be

Please sign in to comment.