1
+ /*
2
+ * Copyright 2020-2022 the original author or authors.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package org.springframework.graphql.data.method.annotation.support;
18
+
19
+
20
+ import java.util.Collections;
21
+ import java.util.Map;
22
+
23
+ import org.junit.jupiter.api.Test;
24
+
25
+ import org.springframework.core.MethodParameter;
26
+ import org.springframework.graphql.Book;
27
+ import org.springframework.graphql.data.method.HandlerMethodArgumentResolver;
28
+ import org.springframework.graphql.data.method.annotation.Argument;
29
+ import org.springframework.graphql.data.method.annotation.Arguments;
30
+ import org.springframework.graphql.data.method.annotation.QueryMapping;
31
+ import org.springframework.stereotype.Controller;
32
+
33
+ import static org.assertj.core.api.Assertions.assertThat;
34
+
35
+ /**
36
+ * Unit tests for {@link ArgumentMethodArgumentResolver}.
37
+ * @author Rossen Stoyanchev
38
+ */
39
+ class ArgumentMapMethodArgumentResolverTests extends ArgumentResolverTestSupport {
40
+
41
+ private final HandlerMethodArgumentResolver resolver = new ArgumentMapMethodArgumentResolver();
42
+
43
+
44
+ @Test
45
+ void shouldSupportAnnotatedParameters() {
46
+ MethodParameter param = methodParam(BookController.class, "argumentMap", Map.class);
47
+ assertThat(this.resolver.supportsParameter(param)).isTrue();
48
+
49
+ param = methodParam(BookController.class, "argumentsMap", Map.class);
50
+ assertThat(this.resolver.supportsParameter(param)).isTrue();
51
+
52
+ param = methodParam(BookController.class, "argument", Long.class);
53
+ assertThat(this.resolver.supportsParameter(param)).isFalse();
54
+
55
+ param = methodParam(BookController.class, "namedArgumentMap", Map.class);
56
+ assertThat(this.resolver.supportsParameter(param)).isFalse();
57
+
58
+ param = methodParam(BookController.class, "notAnnotated", String.class);
59
+ assertThat(this.resolver.supportsParameter(param)).isFalse();
60
+ }
61
+
62
+ @Test
63
+ void shouldResolveRawArgumentsMap() throws Exception {
64
+ Object result = this.resolver.resolveArgument(
65
+ methodParam(BookController.class, "argumentMap", Map.class),
66
+ environment("{\"id\": 42 }"));
67
+
68
+ assertThat(result).isNotNull().isInstanceOf(Map.class).isEqualTo(Collections.singletonMap("id", 42));
69
+ }
70
+
71
+
72
+ @SuppressWarnings({"ConstantConditions", "unused"})
73
+ @Controller
74
+ static class BookController {
75
+
76
+ @QueryMapping
77
+ public Book argumentMap(@Argument Map<?, ?> args) {
78
+ return null;
79
+ }
80
+
81
+ @QueryMapping
82
+ public Book argumentsMap(@Arguments Map<?, ?> args) {
83
+ return null;
84
+ }
85
+
86
+ @QueryMapping
87
+ public Book argument(@Argument Long id) {
88
+ return null;
89
+ }
90
+
91
+ @QueryMapping
92
+ public Book namedArgumentMap(@Argument(name = "book") Map<?, ?> book) {
93
+ return null;
94
+ }
95
+
96
+ public void notAnnotated(String param) {
97
+ }
98
+
99
+ }
100
+
101
+ }
0 commit comments