22
22
import static bio .overture .ego .model .enums .JavaFields .*;
23
23
import static bio .overture .ego .model .enums .LanguageType .*;
24
24
import static bio .overture .ego .model .enums .ProviderType .*;
25
+ import static bio .overture .ego .model .enums .UserType .USER ;
25
26
import static bio .overture .ego .utils .CollectionUtils .mapToImmutableSet ;
26
27
import static bio .overture .ego .utils .CollectionUtils .mapToSet ;
27
28
import static bio .overture .ego .utils .CollectionUtils .repeatedCallsOf ;
34
35
import static com .google .common .collect .Lists .newArrayList ;
35
36
import static com .google .common .collect .Sets .newHashSet ;
36
37
import static org .junit .Assert .*;
38
+ import static org .springframework .http .HttpStatus .OK ;
37
39
38
40
import bio .overture .ego .AuthorizationServiceMain ;
39
41
import bio .overture .ego .model .entity .Application ;
40
42
import bio .overture .ego .model .entity .Group ;
41
43
import bio .overture .ego .model .entity .Identifiable ;
42
44
import bio .overture .ego .model .entity .Policy ;
43
45
import bio .overture .ego .model .entity .User ;
46
+ import bio .overture .ego .model .enums .ProviderType ;
44
47
import bio .overture .ego .service .ApplicationService ;
45
48
import bio .overture .ego .service .GroupService ;
46
49
import bio .overture .ego .service .UserService ;
66
69
import org .springframework .beans .factory .annotation .Autowired ;
67
70
import org .springframework .beans .factory .annotation .Value ;
68
71
import org .springframework .boot .test .context .SpringBootTest ;
69
- import org .springframework .http .HttpStatus ;
70
72
import org .springframework .test .context .ActiveProfiles ;
71
73
import org .springframework .test .context .junit4 .SpringRunner ;
72
74
@@ -122,7 +124,7 @@ public void listUsersNoFilter() {
122
124
assertNotNull (response .getBody ());
123
125
val responseJson = MAPPER .readTree (response .getBody ());
124
126
125
- assertEquals (responseStatus , HttpStatus . OK );
127
+ assertEquals (responseStatus , OK );
126
128
assertTrue (responseJson .get ("count" ).asInt () >= 3 );
127
129
assertTrue (responseJson .get ("resultSet" ).isArray ());
128
130
@@ -135,6 +137,114 @@ public void listUsersNoFilter() {
135
137
136
138
}
137
139
140
+ @ Test
141
+ @ SneakyThrows
142
+ public void listUsersWithFilter_Success () {
143
+ val numUsers = userService .getRepository ().count ();
144
+
145
+ // Since previous test may introduce new users. If there are more users than the
146
+ // default page
147
+ // size, only a subset will be returned and could cause a test failure
148
+ val existingUsersResponse =
149
+ initStringRequest ().endpoint ("/users?limit=%s&offset=0" , numUsers ).getAnd ();
150
+ existingUsersResponse .assertOk ().assertHasBody ().assertPageResultsOfType (User .class );
151
+
152
+ // filter by existing email
153
+ val existingUser = existingUsersResponse .extractPageResults (User .class ).get (0 );
154
+ val emailFilter = existingUser .getEmail ();
155
+ val emailFilteredResponse =
156
+ initStringRequest ().endpoint ("/users?offset=0&email=%s" , emailFilter ).getAnd ();
157
+ emailFilteredResponse .assertOk ();
158
+ emailFilteredResponse .assertHasBody ();
159
+ emailFilteredResponse .assertPageResultsOfType (User .class );
160
+
161
+ val emailFilteredResults = emailFilteredResponse .extractPageResults (User .class );
162
+ assertTrue (emailFilteredResults .size () >= 1 );
163
+
164
+ // assert all users from response have email equal to original email filter
165
+ assertTrue (emailFilteredResults .stream ().allMatch (u -> u .getEmail ().equals (emailFilter )));
166
+
167
+ // filter by existing providerType
168
+ // generate another user with a different providerType from existingUser
169
+ entityGenerator .setupUser (
170
+ entityGenerator .generateNonExistentUserName (),
171
+ USER ,
172
+ generateNonExistentProviderSubjectId (userService ),
173
+ randomEnumExcluding (ProviderType .class , existingUser .getProviderType ()));
174
+ val unfilteredRequest =
175
+ initStringRequest ().endpoint ("/users?offset=0&limit=%s" , numUsers ).getAnd ();
176
+ val unfilteredResponse =
177
+ unfilteredRequest .assertOk ().assertHasBody ().extractPageResults (User .class );
178
+
179
+ val providerTypeFilter = existingUser .getProviderType ();
180
+ val providerTypeFilteredResponse =
181
+ initStringRequest ()
182
+ .endpoint ("/users?offset=0&providerType=%s" , providerTypeFilter .toString ())
183
+ .getAnd ();
184
+
185
+ // verify response is ok
186
+ providerTypeFilteredResponse .assertOk ();
187
+ providerTypeFilteredResponse .assertHasBody ();
188
+ providerTypeFilteredResponse .assertPageResultsOfType (User .class );
189
+
190
+ // verify unfilteredResponse has more items than filtered response
191
+ val providerTypeFilteredResults = providerTypeFilteredResponse .extractPageResults (User .class );
192
+ assertTrue (providerTypeFilteredResults .size () >= 1 );
193
+ assertTrue (unfilteredResponse .size () > providerTypeFilteredResults .size ());
194
+
195
+ // verify users from result all match original providerType filter
196
+ assertTrue (
197
+ stream (providerTypeFilteredResults )
198
+ .allMatch (x -> x .getProviderType ().equals (providerTypeFilter )));
199
+ }
200
+
201
+ @ Test
202
+ @ SneakyThrows
203
+ public void listUsersWithFilter_NoResults () {
204
+ val numUsers = userService .getRepository ().count ();
205
+
206
+ // filter by non-existing email
207
+ val nonExistingName = entityGenerator .generateNonExistentUserName ().split (" " );
208
+ val emailFilter =
String .
format (
"%s%[email protected] " ,
nonExistingName [
0 ],
nonExistingName [
1 ]);
209
+ val emailFilteredResponse =
210
+ initStringRequest ().endpoint ("/users?offset=0&email=%s" , emailFilter ).getAnd ();
211
+
212
+ // assert response is ok
213
+ emailFilteredResponse .assertOk ();
214
+ emailFilteredResponse .assertHasBody ();
215
+ emailFilteredResponse .assertPageResultsOfType (User .class );
216
+
217
+ // assert there are no users returned
218
+ assertEquals (emailFilteredResponse .extractPageResults (User .class ).size (), 0 );
219
+
220
+ // filter by non-existing providerType
221
+ val existingUsersResponse =
222
+ initStringRequest ().endpoint ("/users?limit=%s&offset=0" , numUsers ).getAnd ();
223
+ existingUsersResponse .assertOk ().assertHasBody ().assertPageResultsOfType (User .class );
224
+ val existingUsers = existingUsersResponse .extractPageResults (User .class );
225
+ val existingProviderResult =
226
+ existingUsers .stream ().map (User ::getProviderType ).distinct ().collect (toImmutableList ());
227
+
228
+ // create a filter param from a providerType that does not exist
229
+ ProviderType nonExistingProvider ;
230
+ do {
231
+ nonExistingProvider = randomEnum (ProviderType .class );
232
+ } while (existingProviderResult .contains (nonExistingProvider ));
233
+ val providerTypeFilteredResponse =
234
+ initStringRequest ()
235
+ .endpoint ("/users?offset=0&providerType=%s" , nonExistingProvider )
236
+ .getAnd ();
237
+
238
+ // verify response is ok
239
+ providerTypeFilteredResponse .assertOk ();
240
+ providerTypeFilteredResponse .assertHasBody ();
241
+ providerTypeFilteredResponse .assertPageResultsOfType (User .class );
242
+
243
+ // verify no users are returned
244
+ val providerTypeFilteredResults = providerTypeFilteredResponse .extractPageResults (User .class );
245
+ assertEquals (providerTypeFilteredResults .size (), 0 );
246
+ }
247
+
138
248
// prob breaking cuz email is no longer reliably unique. can you query on unique value?
139
249
@ Test
140
250
@ SneakyThrows
@@ -145,7 +255,7 @@ public void listUsersWithQuery() {
145
255
assertNotNull (response .getBody ());
146
256
val responseJson = MAPPER .readTree (response .getBody ());
147
257
148
- assertEquals (responseStatus , HttpStatus . OK );
258
+ assertEquals (responseStatus , OK );
149
259
assertTrue (responseJson .get ("count" ).asInt () >= 1 );
150
260
assertTrue (responseJson .get ("resultSet" ).isArray ());
151
261
assertEquals (
0 commit comments