1
+ package com .introproventures .graphql .jpa .query .schema ;
2
+
3
+
4
+ import static org .assertj .core .api .Assertions .assertThat ;
5
+
6
+ import java .math .BigDecimal ;
7
+ import java .math .BigInteger ;
8
+ import java .util .ArrayList ;
9
+ import java .util .Collections ;
10
+ import java .util .LinkedHashMap ;
11
+ import java .util .List ;
12
+ import java .util .Map ;
13
+
14
+ import graphql .language .ArrayValue ;
15
+ import graphql .language .BooleanValue ;
16
+ import graphql .language .EnumValue ;
17
+ import graphql .language .FloatValue ;
18
+ import graphql .language .IntValue ;
19
+ import graphql .language .NullValue ;
20
+ import graphql .language .ObjectField ;
21
+ import graphql .language .ObjectValue ;
22
+ import graphql .language .StringValue ;
23
+ import graphql .language .Value ;
24
+ import graphql .language .VariableReference ;
25
+ import graphql .schema .Coercing ;
26
+ import org .junit .Test ;
27
+
28
+ public class ObjectCoercingTests {
29
+
30
+ private Map <String , Object > variables = Collections .singletonMap ( "varRef1" , "value1" );
31
+
32
+ private Coercing <?,?> coercing = new JavaScalars .GraphQLObjectCoercing ();
33
+
34
+ @ SuppressWarnings ("serial" )
35
+ @ Test
36
+ public void testASTParsing () {
37
+ // when
38
+ assertThat (coercing .parseLiteral (mkStringValue ("s" ), variables )).isEqualTo ("s" );
39
+ assertThat (coercing .parseLiteral (mkFloatValue ("99.9" ), variables )).isEqualTo (new BigDecimal ("99.9" ));
40
+ assertThat (coercing .parseLiteral (mkIntValue (BigInteger .valueOf (666 )), variables )).isEqualTo (BigInteger .valueOf (666 ));
41
+ assertThat (coercing .parseLiteral (mkBooleanValue (true ), variables )).isEqualTo (true );
42
+ assertThat (coercing .parseLiteral (mkNullValue (), variables )).isEqualTo (null );
43
+ assertThat (coercing .parseLiteral (mkVarRef ("varRef1" ), variables )).isEqualTo ("value1" );
44
+ assertThat (coercing .parseLiteral (mkArrayValue (new ArrayList <Value >() {{ add (mkStringValue ("s" )); add (mkIntValue (BigInteger .valueOf (666 ))); }}), variables ))
45
+ .asList ()
46
+ .containsExactly ("s" ,BigInteger .valueOf (666 ));
47
+
48
+ }
49
+
50
+ @ SuppressWarnings ({"serial" , "rawtypes" })
51
+ @ Test
52
+ public void testASTObjectParsing () {
53
+ Map <String , Value > input = new LinkedHashMap <String , Value >();
54
+
55
+ input .put ("fld1" , mkStringValue ("s" ));
56
+ input .put ("fld2" , mkIntValue (BigInteger .valueOf (666 )));
57
+ input .put ("fld3" , mkObjectValue (new LinkedHashMap <String , Value >() {{
58
+ put ("childFld1" , mkStringValue ("child1" ));
59
+ put ("childFl2" , mkVarRef ("varRef1" ));
60
+ }}));
61
+
62
+
63
+ Map <String , Object > expected = new LinkedHashMap <String , Object >();
64
+
65
+ expected .put ("fld1" , "s" );
66
+ expected .put ("fld2" , BigInteger .valueOf (666 ));
67
+ expected .put ("fld3" , new LinkedHashMap <String , Object >() {{
68
+ put ("childFld1" , "child1" );
69
+ put ("childFl2" , "value1" );
70
+ }});
71
+
72
+ assertThat (coercing .parseLiteral (mkObjectValue (input ), variables )).isEqualTo (expected );
73
+ }
74
+
75
+ @ Test
76
+ public void testSerializeIsAlwaysInAndOut () {
77
+ assertThat (coercing .serialize (666 )).isEqualTo (666 );
78
+ assertThat (coercing .serialize ("same" )).isEqualTo ("same" );
79
+ }
80
+
81
+ @ Test
82
+ public void testParseValueIsAlwaysInAndOut () {
83
+ assertThat (coercing .parseValue (666 )).isEqualTo (666 );
84
+ assertThat (coercing .parseValue ("same" )).isEqualTo ("same" );
85
+ }
86
+
87
+ ObjectValue mkObjectValue (Map <String , Value > fields ) {
88
+ List <ObjectField > list = new ArrayList <>();
89
+
90
+ for (String key : fields .keySet ()) {
91
+ list .add (new ObjectField (key , fields .get (key )));
92
+ }
93
+ return new ObjectValue (list );
94
+ }
95
+
96
+ VariableReference mkVarRef (String name ) {
97
+ return new VariableReference (name );
98
+ }
99
+
100
+ ArrayValue mkArrayValue (List <Value > values ) {
101
+ return new ArrayValue (values );
102
+ }
103
+
104
+ NullValue mkNullValue () {
105
+ return NullValue .newNullValue ().build ();
106
+ }
107
+
108
+ EnumValue mkEnumValue (String val ) {
109
+ return new EnumValue (val );
110
+ }
111
+
112
+ BooleanValue mkBooleanValue (boolean val ) {
113
+ return new BooleanValue (val );
114
+ }
115
+
116
+ IntValue mkIntValue (BigInteger val ) {
117
+ return new IntValue (val );
118
+ }
119
+
120
+ FloatValue mkFloatValue (String val ) {
121
+ return new FloatValue (new BigDecimal (val ));
122
+ }
123
+
124
+ StringValue mkStringValue (String val ) {
125
+ return new StringValue (val );
126
+ }
127
+ }
0 commit comments