1+ /*
2+ * Copyright 2024 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+ * http://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 io .wwan13 .wintersecurity .resolve ;
18+
19+ import io .wwan13 .wintersecurity .jwt .PayloadAnalysis ;
20+ import io .wwan13 .wintersecurity .jwt .PayloadAnalyst ;
21+ import io .wwan13 .wintersecurity .jwt .TokenClaims ;
22+ import io .wwan13 .wintersecurity .jwt .payload .support .DefaultPayloadAnalyst ;
23+ import io .wwan13 .wintersecurity .resolve .stub .StubMethodParameter ;
24+ import io .wwan13 .wintersecurity .resolve .stub .StubModerAndViesContainer ;
25+ import io .wwan13 .wintersecurity .resolve .stub .StubNativeWebRequest ;
26+ import io .wwan13 .wintersecurity .resolve .stub .StubWebDataBinderFactory ;
27+ import org .junit .jupiter .api .Test ;
28+
29+ import java .util .HashSet ;
30+ import java .util .Map ;
31+ import java .util .Set ;
32+
33+ import static org .assertj .core .api .Assertions .assertThat ;
34+
35+ class RolesResolverTest {
36+
37+ static RolesResolver rolesResolver = new RolesResolver (
38+ ResolveTestContainer .targetAnnotations ,
39+ ResolveTestContainer .payloadAnalysis
40+ );
41+
42+ @ Test
43+ void should_ReturnTrue_when_AnnotationDeclaredWithValidParameterType () {
44+ // given
45+ final StubMethodParameter methodParameter = new StubMethodParameter ();
46+
47+ methodParameter .declaredAnnotationsWillBe (RequestUserRoles .class );
48+ methodParameter .parameterTypeWillBe (Set .class );
49+
50+ // when
51+ boolean result = rolesResolver .supportsParameter (methodParameter );
52+
53+ // then
54+ assertThat (result ).isTrue ();
55+ }
56+
57+ @ Test
58+ void should_ReturnFalse_when_InValidParameterType () {
59+ // given
60+ final StubMethodParameter methodParameter = new StubMethodParameter ();
61+
62+ methodParameter .declaredAnnotationsWillBe (RequestUserRoles .class );
63+ methodParameter .parameterTypeWillBe (Long .class );
64+
65+ // when
66+ boolean result = rolesResolver .supportsParameter (methodParameter );
67+
68+ // then
69+ assertThat (result ).isFalse ();
70+ }
71+
72+ @ Test
73+ void should_ReturnFalse_when_AnnotationNotDeclared () {
74+ // given
75+ final StubMethodParameter methodParameter = new StubMethodParameter ();
76+
77+ methodParameter .declaredAnnotationsWillBe (Set .of ());
78+ methodParameter .parameterTypeWillBe (Set .class );
79+
80+ // when
81+ boolean result = rolesResolver .supportsParameter (methodParameter );
82+
83+ // then
84+ assertThat (result ).isFalse ();
85+ }
86+
87+ @ Test
88+ void should_ReturnFalse_when_InValidParameterTypeIsDataType () {
89+ // given
90+ final StubMethodParameter methodParameter = new StubMethodParameter ();
91+
92+ methodParameter .declaredAnnotationsWillBe (RequestUserRoles .class );
93+ methodParameter .parameterTypeWillBe (Long .class );
94+
95+ // when
96+ boolean result = rolesResolver .supportsParameter (methodParameter );
97+
98+ // then
99+ assertThat (result ).isFalse ();
100+ }
101+
102+ @ Test
103+ void should_ResolveRoles () {
104+ // given
105+ final StubMethodParameter methodParameter = new StubMethodParameter ();
106+ final StubModerAndViesContainer modelAndViewContainer = new StubModerAndViesContainer ();
107+ final StubNativeWebRequest nativeWebRequest = new StubNativeWebRequest ();
108+ final StubWebDataBinderFactory webDataBinderFactory = new StubWebDataBinderFactory ();
109+
110+ nativeWebRequest .requestAttributesWillBe (ResolveTestContainer .defaultTestClaims );
111+ methodParameter .parameterTypeWillBe (Set .class );
112+
113+ // when
114+ Object value = rolesResolver .resolveArgument (
115+ methodParameter ,
116+ modelAndViewContainer ,
117+ nativeWebRequest ,
118+ webDataBinderFactory
119+ );
120+
121+ // then
122+ assertThat (value .getClass ()).isAssignableFrom (HashSet .class );
123+ assertThat ((Set ) value ).contains ("ROLE_USER" );
124+ }
125+
126+ @ Test
127+ void should_ResolveStringRole_when_NoneCollectionTypeRoleEntered () {
128+ // given
129+ final StubMethodParameter methodParameter = new StubMethodParameter ();
130+ final StubModerAndViesContainer modelAndViewContainer = new StubModerAndViesContainer ();
131+ final StubNativeWebRequest nativeWebRequest = new StubNativeWebRequest ();
132+ final StubWebDataBinderFactory webDataBinderFactory = new StubWebDataBinderFactory ();
133+
134+ final PayloadAnalyst payloadAnalyst = new DefaultPayloadAnalyst ();
135+ final PayloadAnalysis payloadAnalysis =
136+ payloadAnalyst .analyze (ResolveTestContainer .ResolveTestPayloadWithStringRole .class );
137+
138+ nativeWebRequest .requestAttributesWillBe (new TokenClaims (Map .of ("roles" , "ROLE_USER" )));
139+ methodParameter .parameterTypeWillBe (String .class );
140+
141+ final RolesResolver rolesResolver = new RolesResolver (
142+ ResolveTestContainer .targetAnnotations ,
143+ payloadAnalysis
144+ );
145+
146+ // when
147+ Object value = rolesResolver .resolveArgument (
148+ methodParameter ,
149+ modelAndViewContainer ,
150+ nativeWebRequest ,
151+ webDataBinderFactory
152+ );
153+
154+ // then
155+ assertThat (value .getClass ()).isAssignableFrom (String .class );
156+ assertThat ((String ) value ).isEqualTo ("ROLE_USER" );
157+ }
158+ }
0 commit comments