17
17
package org .springframework .graphql .data .method .annotation .support ;
18
18
19
19
import java .util .List ;
20
+ import java .util .Optional ;
21
+ import java .util .function .Function ;
20
22
import java .util .stream .Collectors ;
21
23
22
24
import graphql .schema .DataFetchingEnvironment ;
28
30
import org .springframework .graphql .BookCriteria ;
29
31
import org .springframework .graphql .data .method .annotation .QueryMapping ;
30
32
import org .springframework .graphql .data .query .AbstractSortStrategy ;
31
- import org .springframework .graphql .data .query .SortStrategy ;
32
33
33
34
import static org .assertj .core .api .Assertions .assertThat ;
34
35
39
40
*/
40
41
public class SortMethodArgumentResolverTests extends ArgumentResolverTestSupport {
41
42
43
+ private final SortMethodArgumentResolver resolver = new SortMethodArgumentResolver (new MySortStrategy ());
44
+
42
45
private final MethodParameter param = methodParam (BookController .class , "getBooks" , Sort .class );
43
46
47
+ private final MethodParameter paramOptional = methodParam (BookController .class , "getBooksOptional" , Optional .class );
48
+
44
49
45
50
@ Test
46
51
void supports () {
47
- SortMethodArgumentResolver resolver = resolver ( new SimpleSortStrategy () );
48
- assertThat (resolver .supportsParameter (this .param )).isTrue ();
49
-
52
+ assertThat ( this . resolver . supportsParameter ( this . param )). isTrue ( );
53
+ assertThat (this . resolver .supportsParameter (this .paramOptional )).isTrue ();
54
+
50
55
MethodParameter param = methodParam (BookController .class , "getBooksByCriteria" , BookCriteria .class );
51
- assertThat (resolver .supportsParameter (param )).isFalse ();
56
+ assertThat (this . resolver .supportsParameter (param )).isFalse ();
52
57
}
53
58
59
+ @ SuppressWarnings ({"unchecked" , "DataFlowIssue" , "OptionalGetWithoutIsPresent" })
54
60
@ Test
55
61
void resolve () throws Exception {
62
+ testResolver (env -> (Sort ) this .resolver .resolveArgument (this .param , env ));
63
+ testResolver (env -> ((Optional <Sort >) this .resolver .resolveArgument (this .paramOptional , env )).get ());
64
+ }
65
+
66
+ private void testResolver (Function <DataFetchingEnvironment , Sort > resolveFunction ) throws Exception {
56
67
DataFetchingEnvironment environment = environment ("""
57
68
{ "sortFields": ["firstName", "lastName", "id"], "sortDirection": "DESC"}"
58
69
""" );
59
70
60
- Sort sort = ( Sort ) resolver ( new SimpleSortStrategy ()). resolveArgument ( param , environment );
71
+ Sort sort = resolveFunction . apply ( environment );
61
72
62
73
assertThat (sort .stream ().collect (Collectors .toList ()))
63
74
.hasSize (3 )
@@ -67,19 +78,20 @@ void resolve() throws Exception {
67
78
new Sort .Order (Sort .Direction .DESC , "id" ));
68
79
}
69
80
70
- private SortMethodArgumentResolver resolver (SortStrategy sortStrategy ) {
71
- return new SortMethodArgumentResolver (sortStrategy );
72
- }
73
81
74
-
75
- @ SuppressWarnings ({"DataFlowIssue" , "unused" })
82
+ @ SuppressWarnings ({"unused" , "DataFlowIssue" , "OptionalUsedAsFieldOrParameterType" })
76
83
private static class BookController {
77
84
78
85
@ QueryMapping
79
86
public List <Book > getBooks (Sort sort ) {
80
87
return null ;
81
88
}
82
89
90
+ @ QueryMapping
91
+ public List <Book > getBooksOptional (Optional <Sort > sort ) {
92
+ return null ;
93
+ }
94
+
83
95
@ QueryMapping
84
96
public List <Book > getBooksByCriteria (BookCriteria criteria ) {
85
97
return null ;
@@ -88,17 +100,17 @@ public List<Book> getBooksByCriteria(BookCriteria criteria) {
88
100
}
89
101
90
102
91
- private static class SimpleSortStrategy extends AbstractSortStrategy {
103
+ private static class MySortStrategy extends AbstractSortStrategy {
92
104
93
105
@ Override
94
- protected List <String > getProperties (DataFetchingEnvironment environment ) {
95
- return environment .getArgument ("sortFields" );
106
+ protected List <String > getProperties (DataFetchingEnvironment env ) {
107
+ return env .getArgument ("sortFields" );
96
108
}
97
109
98
110
@ Override
99
- protected Sort .Direction getDirection (DataFetchingEnvironment environment ) {
100
- return ( environment . containsArgument ("sortDirection" ) ?
101
- Sort .Direction .valueOf (environment . getArgument ( "sortDirection" ) ) : null );
111
+ protected Sort .Direction getDirection (DataFetchingEnvironment env ) {
112
+ String direction = env . getArgument ("sortDirection" );
113
+ return ( direction != null ? Sort .Direction .valueOf (direction ) : null );
102
114
}
103
115
104
116
}
0 commit comments