Skip to content

Commit ac720eb

Browse files
committed
Polishing in AuthenticationPrincipalArgumentResolverTests
1 parent e00e10c commit ac720eb

File tree

1 file changed

+54
-64
lines changed

1 file changed

+54
-64
lines changed

spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AuthenticationPrincipalArgumentResolverTests.java

+54-64
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -30,7 +30,6 @@
3030

3131
import org.springframework.core.DefaultParameterNameDiscoverer;
3232
import org.springframework.core.MethodParameter;
33-
import org.springframework.core.ResolvableType;
3433
import org.springframework.core.annotation.SynthesizingMethodParameter;
3534
import org.springframework.graphql.data.method.annotation.Argument;
3635
import org.springframework.graphql.data.method.annotation.QueryMapping;
@@ -54,26 +53,10 @@
5453
* Tests for {@link AuthenticationPrincipalArgumentResolver}.
5554
*
5655
* @author Rob Winch
56+
* @author Rossen Stoyanchev
5757
*/
5858
class AuthenticationPrincipalArgumentResolverTests {
5959

60-
private static final Class<String> STRING_CLASS = String.class;
61-
62-
private static final Class<UserDetails> USER_DETAILS_CLASS = UserDetails.class;
63-
64-
private static final Class<?> MONO_USER_DETAILS_CLASS =
65-
ResolvableType.forClassWithGenerics(Mono.class, UserDetails.class).getRawClass();
66-
67-
private static final Class<?> MONO_STRING_CLASS =
68-
ResolvableType.forClassWithGenerics(Mono.class, String.class).getRawClass();
69-
70-
private static final Class<?> PUBLISHER_USER_DETAILS_CLASS =
71-
ResolvableType.forClassWithGenerics(Publisher.class, UserDetails.class).getRawClass();
72-
73-
private static final Class<?> TESTPUBLISHER_USER_DETAILS_CLASS =
74-
ResolvableType.forClassWithGenerics(TestPublisher.class, UserDetails.class).getRawClass();
75-
76-
7760
private final AuthenticationPrincipalArgumentResolver resolver =
7861
new AuthenticationPrincipalArgumentResolver((beanName, context) -> new PrincipalConverter());
7962

@@ -83,48 +66,49 @@ void cleanup() {
8366
SecurityContextHolder.clearContext();
8467
}
8568

69+
8670
@Test
8771
void supportsParameterWhenNoAnnotation() {
88-
MethodParameter parameter = firstParameter(UserController.class, "noParameter", USER_DETAILS_CLASS);
72+
MethodParameter parameter = firstParameter(UserController.class, "noParameter", UserDetails.class);
8973
assertThat(this.resolver.supportsParameter(parameter)).isFalse();
9074
}
9175

9276
@Test
9377
void supportsParameterWhenWrongAnnotation() {
94-
MethodParameter parameter = firstParameter(UserController.class, "argument", USER_DETAILS_CLASS);
78+
MethodParameter parameter = firstParameter(UserController.class, "argument", UserDetails.class);
9579
assertThat(this.resolver.supportsParameter(parameter)).isFalse();
9680
}
9781

9882
@Test
9983
void supportsParameterWhenCurrentUser() {
100-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", USER_DETAILS_CLASS);
84+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", UserDetails.class);
10185
assertThat(this.resolver.supportsParameter(parameter)).isTrue();
10286
}
10387

10488
@Test
10589
void supportsParameterWhenAuthenticationPrincipal() {
106-
MethodParameter parameter = firstParameter(UserController.class, "userDetails", USER_DETAILS_CLASS);
90+
MethodParameter parameter = firstParameter(UserController.class, "userDetails", UserDetails.class);
10791
assertThat(this.resolver.supportsParameter(parameter)).isTrue();
10892
}
10993

11094
@Test
11195
void resolveArgumentWhenAuthenticationPrincipal() throws Exception {
112-
MethodParameter parameter = firstParameter(UserController.class, "userDetails", USER_DETAILS_CLASS);
113-
Mono<UserDetails> details = (Mono<UserDetails>) this.resolver.resolveArgument(parameter, null);
96+
MethodParameter parameter = firstParameter(UserController.class, "userDetails", UserDetails.class);
97+
Mono<UserDetails> details = resolveArgument(parameter);
11498
assertThat(details.contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
11599
}
116100

117101
@Test
118102
void resolveArgumentWhenCurrentUser() throws Exception {
119-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", USER_DETAILS_CLASS);
120-
Mono<UserDetails> details = (Mono<UserDetails>) this.resolver.resolveArgument(parameter, null);
103+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", UserDetails.class);
104+
Mono<UserDetails> details = resolveArgument(parameter);
121105
assertThat(details.contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
122106
}
123107

124108
@Test
125109
void resolveArgumentWhenNoSecurityContext() throws Exception {
126-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", USER_DETAILS_CLASS);
127-
Mono<UserDetails> details = (Mono<UserDetails>) this.resolver.resolveArgument(parameter, null);
110+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", UserDetails.class);
111+
Mono<UserDetails> details = resolveArgument(parameter);
128112
assertThat(details.block()).isNull();
129113
}
130114

@@ -133,82 +117,82 @@ void resolveArgumentWhenSecurityContextHolder() throws Exception {
133117
SecurityContext context = SecurityContextHolder.createEmptyContext();
134118
context.setAuthentication(usernamePasswordAuthentication());
135119
SecurityContextHolder.setContext(context);
136-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", USER_DETAILS_CLASS);
137-
Mono<UserDetails> details = (Mono<UserDetails>) this.resolver.resolveArgument(parameter, null);
120+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", UserDetails.class);
121+
Mono<UserDetails> details = resolveArgument(parameter);
138122
assertThat(details.contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
139123
}
140124

141125
@Test
142126
void resolveArgumentWhenAuthenticationPrincipalUsername() throws Exception {
143-
MethodParameter parameter = firstParameter(UserController.class, "username", STRING_CLASS);
144-
Mono<String> details = (Mono<String>) this.resolver.resolveArgument(parameter, null);
127+
MethodParameter parameter = firstParameter(UserController.class, "username", String.class);
128+
Mono<String> details = resolveArgument(parameter);
145129
assertThat(details.contextWrite(authenticationContext()).block()).isEqualTo("user");
146130
}
147131

148132
@Test
149133
void resolveArgumentWhenBeanName() throws Exception {
150-
MethodParameter parameter = firstParameter(UserController.class, "beanName", USER_DETAILS_CLASS);
151-
Mono<UserDetails> details = (Mono<UserDetails>) this.resolver.resolveArgument(parameter, null);
134+
MethodParameter parameter = firstParameter(UserController.class, "beanName", UserDetails.class);
135+
Mono<UserDetails> details = resolveArgument(parameter);
152136
assertThat(details.contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
153137
}
154138

155139
@Test
156140
void resolveArgumentWhenErrorOnInvalidType() throws Exception {
157141
MethodParameter parameter = firstParameter(UserController.class, "errorOnInvalidType", String.class);
158-
Mono<Object> details = (Mono<Object>) this.resolver.resolveArgument(parameter, null);
142+
Mono<Object> details = resolveArgument(parameter);
159143
assertThatExceptionOfType(ClassCastException.class)
160144
.isThrownBy(() -> details.contextWrite(authenticationContext()).block());
161145
}
162146

163147
@Test
164148
void resolveArgumentWhenInvalidType() throws Exception {
165-
MethodParameter parameter = firstParameter(UserController.class, "invalidType", STRING_CLASS);
166-
Mono<Mono<Object>> details = (Mono<Mono<Object>>) this.resolver.resolveArgument(parameter, null);
149+
MethodParameter parameter = firstParameter(UserController.class, "invalidType", String.class);
150+
Mono<Mono<Object>> details = resolveArgument(parameter);
167151
assertThat(details.flatMap(u -> u).contextWrite(authenticationContext()).block()).isNull();
168152
}
169153

170154
@Test
171155
void supportsParameterWhenMonoNoAnnotation() {
172-
MethodParameter parameter = firstParameter(UserController.class, "noParameter", MONO_USER_DETAILS_CLASS);
156+
MethodParameter parameter = firstParameter(UserController.class, "noParameter", Mono.class);
173157
assertThat(this.resolver.supportsParameter(parameter)).isFalse();
174158
}
175159

176160
@Test
177161
void supportsParameterWhenMonoWrongAnnotation() {
178-
MethodParameter parameter = firstParameter(UserController.class, "argument", MONO_USER_DETAILS_CLASS);
162+
MethodParameter parameter = firstParameter(UserController.class, "argument", Mono.class);
179163
assertThat(this.resolver.supportsParameter(parameter)).isFalse();
180164
}
181165

182166
@Test
183167
void supportsParameterWhenMonoCurrentUser() {
184-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", MONO_USER_DETAILS_CLASS);
168+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", Mono.class);
185169
assertThat(this.resolver.supportsParameter(parameter)).isTrue();
186170
}
187171

188172
@Test
189173
void supportsParameterWhenMonoAuthenticationPrincipal() {
190-
MethodParameter parameter = firstParameter(UserController.class, "userDetails", MONO_USER_DETAILS_CLASS);
174+
MethodParameter parameter = firstParameter(UserController.class, "userDetails", Mono.class);
191175
assertThat(this.resolver.supportsParameter(parameter)).isTrue();
192176
}
193177

194178
@Test
195179
void resolveArgumentWhenMonoAuthenticationPrincipal() throws Exception {
196-
MethodParameter parameter = firstParameter(UserController.class, "userDetails", MONO_USER_DETAILS_CLASS);
197-
Mono<Mono<UserDetails>> details = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(parameter, null);
180+
MethodParameter parameter = firstParameter(UserController.class, "userDetails", Mono.class);
181+
Mono<Mono<UserDetails>> details = resolveArgument(parameter);
198182
assertThat(details.block().contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
199183
}
200184

201185
@Test
202186
void resolveArgumentWhenMonoCurrentUser() throws Exception {
203-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", MONO_USER_DETAILS_CLASS);
204-
Mono<Mono<UserDetails>> details = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(parameter, null);
187+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", Mono.class);
188+
Mono<Mono<UserDetails>> details = resolveArgument(parameter);
205189
assertThat(details.block().contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
206190
}
207191

208192
@Test
209193
void resolveArgumentWhenMonoNoSecurityContext() throws Exception {
210-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", MONO_USER_DETAILS_CLASS);
211-
Mono<Mono<UserDetails>> details = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(parameter, null);
194+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", Mono.class);
195+
Mono<Mono<UserDetails>> details = resolveArgument(parameter);
212196
assertThat(details.block().block()).isNull();
213197
}
214198

@@ -217,58 +201,58 @@ void resolveArgumentWhenMonoSecurityContextHolder() throws Exception {
217201
SecurityContext context = SecurityContextHolder.createEmptyContext();
218202
context.setAuthentication(usernamePasswordAuthentication());
219203
SecurityContextHolder.setContext(context);
220-
MethodParameter parameter = firstParameter(UserController.class, "currentUser", MONO_USER_DETAILS_CLASS);
221-
Mono<Mono<UserDetails>> details = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(parameter, null);
204+
MethodParameter parameter = firstParameter(UserController.class, "currentUser", Mono.class);
205+
Mono<Mono<UserDetails>> details = resolveArgument(parameter);
222206
assertThat(details.block().contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
223207
}
224208

225209
@Test
226210
void resolveArgumentWhenMonoAuthenticationPrincipalUsername() throws Exception {
227-
MethodParameter parameter = firstParameter(UserController.class, "username", MONO_STRING_CLASS);
228-
Mono<Mono<String>> details = (Mono<Mono<String>>) this.resolver.resolveArgument(parameter, null);
211+
MethodParameter parameter = firstParameter(UserController.class, "username", Mono.class);
212+
Mono<Mono<String>> details = resolveArgument(parameter);
229213
assertThat(details.block().contextWrite(authenticationContext()).block()).isEqualTo("user");
230214
}
231215

232216
@Test
233217
void resolveArgumentWhenMonoBeanName() throws Exception {
234-
MethodParameter parameter = firstParameter(UserController.class, "beanName", MONO_USER_DETAILS_CLASS);
235-
Mono<Mono<UserDetails>> details = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(parameter, null);
218+
MethodParameter parameter = firstParameter(UserController.class, "beanName", Mono.class);
219+
Mono<Mono<UserDetails>> details = resolveArgument(parameter);
236220
assertThat(details.flatMap(u -> u).contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
237221
}
238222

239223
@Test
240224
void resolveArgumentWhenMonoErrorOnInvalidType() throws Exception {
241-
MethodParameter parameter = firstParameter(UserController.class, "errorOnInvalidType", MONO_STRING_CLASS);
242-
Mono<Mono<Object>> details = (Mono<Mono<Object>>) this.resolver.resolveArgument(parameter, null);
225+
MethodParameter parameter = firstParameter(UserController.class, "errorOnInvalidType", Mono.class);
226+
Mono<Mono<Object>> details = resolveArgument(parameter);
243227
assertThatExceptionOfType(ClassCastException.class)
244228
.isThrownBy(() -> details.flatMap(u -> u).contextWrite(authenticationContext()).block());
245229
}
246230

247231
@Test
248232
void resolveArgumentWhenMonoInvalidType() throws Exception {
249-
MethodParameter parameter = firstParameter(UserController.class, "invalidType", MONO_STRING_CLASS);
250-
Mono<Mono<Object>> details = (Mono<Mono<Object>>) this.resolver.resolveArgument(parameter, null);
233+
MethodParameter parameter = firstParameter(UserController.class, "invalidType", Mono.class);
234+
Mono<Mono<Object>> details = resolveArgument(parameter);
251235
assertThat(details.flatMap(u -> u).contextWrite(authenticationContext()).block()).isNull();
252236
}
253237

254238
@Test
255239
void resolveArgumentWhenPublisher() throws Exception {
256-
MethodParameter parameter = firstParameter(UserController.class, "publisher", PUBLISHER_USER_DETAILS_CLASS);
257-
Mono<Mono<UserDetails>> details = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(parameter, null);
240+
MethodParameter parameter = firstParameter(UserController.class, "publisher", Publisher.class);
241+
Mono<Mono<UserDetails>> details = resolveArgument(parameter);
258242
assertThat(details.block().contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
259243
}
260244

261245
@Test
262246
void resolveArgumentWhenTestPublisherThenEmptyMono() throws Exception {
263-
MethodParameter parameter = firstParameter(UserController.class, "publisher", TESTPUBLISHER_USER_DETAILS_CLASS);
264-
Mono<TestPublisher<UserDetails>> details = (Mono<TestPublisher<UserDetails>>) this.resolver.resolveArgument(parameter, null);
247+
MethodParameter parameter = firstParameter(UserController.class, "publisher", TestPublisher.class);
248+
Mono<TestPublisher<UserDetails>> details = resolveArgument(parameter);
265249
assertThat(details.contextWrite(authenticationContext()).block()).isNull();
266250
}
267251

268252
@Test
269253
void resolveArgumentWhenTestPublisherAndErrorOnInvalidType() throws Exception {
270-
MethodParameter parameter = firstParameter(UserController.class, "errorOnInvalidType", TESTPUBLISHER_USER_DETAILS_CLASS);
271-
Mono<Mono<UserDetails>> details = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(parameter, null);
254+
MethodParameter parameter = firstParameter(UserController.class, "errorOnInvalidType", TestPublisher.class);
255+
Mono<Mono<UserDetails>> details = resolveArgument(parameter);
272256
assertThatExceptionOfType(ClassCastException.class)
273257
.isThrownBy(() -> details.flatMap(u -> u).contextWrite(authenticationContext()).block());
274258
}
@@ -284,6 +268,11 @@ private MethodParameter methodParam(Method method, int index) {
284268
return parameter;
285269
}
286270

271+
@SuppressWarnings({"unchecked", "DataFlowIssue"})
272+
private <T> T resolveArgument(MethodParameter parameter) throws Exception {
273+
return (T) this.resolver.resolveArgument(parameter, null);
274+
}
275+
287276
private static Function<Context, Context> authenticationContext() {
288277
return (context) -> ReactiveSecurityContextHolder.withAuthentication(usernamePasswordAuthentication());
289278
}
@@ -297,6 +286,7 @@ private static UserDetails userDetails() {
297286
return new User("user", "password", AuthorityUtils.createAuthorityList("ROLE_USER"));
298287
}
299288

289+
300290
static class PrincipalConverter {
301291
public UserDetails convert(UserDetails userDetails) {
302292
return userDetails;

0 commit comments

Comments
 (0)