2525import org .testng .annotations .BeforeMethod ;
2626import org .testng .annotations .Test ;
2727
28+ import javax .xml .crypto .Data ;
2829import java .util .ArrayList ;
2930import java .util .HashMap ;
3031import java .util .Map ;
@@ -40,6 +41,192 @@ public void init() {
4041 GraphQLAnnotations .getInstance ().getTypeRegistry ().clear ();
4142 }
4243
44+ /**
45+ * CASE 1 : Only Api class, value determined by field
46+ */
47+ public static class Api1 {
48+ @ GraphQLField
49+ private String name = "yarin" ;
50+ }
51+
52+ public static class Query1 {
53+ @ GraphQLField
54+ public Api1 queryField () {
55+ return new Api1 ();
56+ }
57+ }
58+
59+ @ Test
60+ public void query_onlyApiClass_valueIsDeterminedByField () throws Exception {
61+ GraphQLObjectType object = GraphQLAnnotations .object (Query1 .class );
62+ GraphQLSchema schema = newSchema ().query (object ).build ();
63+
64+ ExecutionResult result = GraphQL .newGraphQL (schema ).build ().execute (builder -> builder .query ("query { queryField { name } }" ).root (new Query1 ()));
65+ assertTrue (result .getErrors ().isEmpty ());
66+ assertEquals (((Map <String , Map <String , String >>) result .getData ()).get ("queryField" ).get ("name" ).toString (), "yarin" );
67+ }
68+
69+
70+ /**
71+ * CASE 2 : Only Api class, value determined by method
72+ */
73+ public static class Api2 {
74+ @ GraphQLField
75+ public String name () {
76+ return "guy" ;
77+ }
78+ }
79+
80+ public static class Query2 {
81+ @ GraphQLField
82+ public Api2 queryField () {
83+ return new Api2 ();
84+ }
85+ }
86+
87+ @ Test
88+ public void query_onlyApiClass_valueIsDeterminedByMethod () throws Exception {
89+ GraphQLObjectType object = GraphQLAnnotations .object (Query2 .class );
90+ GraphQLSchema schema = newSchema ().query (object ).build ();
91+
92+ ExecutionResult result = GraphQL .newGraphQL (schema ).build ().execute (builder -> builder .query ("query { queryField { name } }" ).root (new Query2 ()));
93+ assertTrue (result .getErrors ().isEmpty ());
94+ assertEquals (((Map <String , Map <String , String >>) result .getData ()).get ("queryField" ).get ("name" ).toString (), "guy" );
95+ }
96+
97+ /**
98+ * Case 3: Api and a DB class, value is determined by the db field
99+ */
100+ public static class Api3 {
101+ @ GraphQLField
102+ public String name () {
103+ return "dani" ;
104+ }
105+ }
106+
107+ public static class SuperDb3 {
108+ private String name = "osher" ;
109+
110+ }
111+
112+ public static class DB3 extends SuperDb3 {
113+ }
114+
115+ public static class Api3Resolver implements DataFetcher <DB3 > {
116+
117+ @ Override
118+ public DB3 get (DataFetchingEnvironment environment ) {
119+ return new DB3 ();
120+ }
121+ }
122+
123+ public static class Query3 {
124+ @ GraphQLField
125+ @ GraphQLDataFetcher (Api3Resolver .class )
126+ public Api3 queryField ;
127+ }
128+
129+ @ Test
130+ public void query_apiAndDbClass_valueIsDeterminedByDBField () throws Exception {
131+ GraphQLObjectType object = GraphQLAnnotations .object (Query3 .class );
132+ GraphQLSchema schema = newSchema ().query (object ).build ();
133+
134+ ExecutionResult result = GraphQL .newGraphQL (schema ).build ().execute (builder -> builder .query ("query { queryField { name } }" ).root (new Query3 ()));
135+ assertTrue (result .getErrors ().isEmpty ());
136+ assertEquals (((Map <String , Map <String , String >>) result .getData ()).get ("queryField" ).get ("name" ).toString (), "osher" );
137+ }
138+
139+ /**
140+ * Case 4: Api and DB classes, value is determined by db method
141+ */
142+
143+ public static class Api4 {
144+ @ GraphQLField
145+ public String name () {
146+ return null ;
147+ }
148+ }
149+
150+ public static class SuperDB4 {
151+ private String name = "guy" ;
152+
153+ public String getName () {
154+ return name + "/yarin" ;
155+ }
156+ }
157+
158+ public static class DB4 extends SuperDB4 {
159+ }
160+
161+ public static class Api4Resolver implements DataFetcher <DB4 > {
162+
163+ @ Override
164+ public DB4 get (DataFetchingEnvironment environment ) {
165+ return new DB4 ();
166+ }
167+ }
168+
169+ public static class Query4 {
170+ @ GraphQLField
171+ @ GraphQLDataFetcher (Api4Resolver .class )
172+ public Api4 queryField ;
173+ }
174+
175+ @ Test
176+ public void query_apiAndDbClass_valueIsDeterminedByDBMethod () throws Exception {
177+ GraphQLObjectType object = GraphQLAnnotations .object (Query4 .class );
178+ GraphQLSchema schema = newSchema ().query (object ).build ();
179+
180+ ExecutionResult result = GraphQL .newGraphQL (schema ).build ().execute (builder -> builder .query ("query { queryField { name } }" ).root (new Query4 ()));
181+ assertTrue (result .getErrors ().isEmpty ());
182+ assertEquals (((Map <String , Map <String , String >>) result .getData ()).get ("queryField" ).get ("name" ).toString (), "guy/yarin" );
183+ }
184+
185+ /**
186+ * Case 5: Invoke Detached on method, both api and db classes, value is determined by the api method
187+ */
188+
189+ public static class Api5 {
190+ private String name = "yarin" ;
191+
192+ @ GraphQLField
193+ @ GraphQLInvokeDetached
194+ @ GraphQLPrettify
195+ public String getName () {
196+ return name + "/guy/osher" ;
197+ }
198+ }
199+
200+ public static class DB5 {
201+ private String name = "moshe" ;
202+ }
203+
204+ public static class Api5Resolver implements DataFetcher <DB5 > {
205+
206+ @ Override
207+ public DB5 get (DataFetchingEnvironment environment ) {
208+ return new DB5 ();
209+ }
210+ }
211+
212+ public static class Query5 {
213+ @ GraphQLField
214+ @ GraphQLDataFetcher (Api5Resolver .class )
215+ public Api5 queryField ;
216+ }
217+
218+ /////////////////////////////////////////
219+
220+ @ Test
221+ public void query_apiAndDbClassAndApiIsInvokeDetached_valueIsDeterminedByApiMethod () throws Exception {
222+ GraphQLObjectType object = GraphQLAnnotations .object (Query5 .class );
223+ GraphQLSchema schema = newSchema ().query (object ).build ();
224+
225+ ExecutionResult result = GraphQL .newGraphQL (schema ).build ().execute (builder -> builder .query ("query { queryField { name } }" ).root (new Query5 ()));
226+ assertTrue (result .getErrors ().isEmpty ());
227+ assertEquals (((Map <String , Map <String , String >>) result .getData ()).get ("queryField" ).get ("name" ).toString (), "yarin/guy/osher" );
228+ }
229+
43230
44231 public class TestException extends Exception {
45232 }
0 commit comments