1 package de.dlr.shepard.integrationtests;
2
3 import static io.restassured.RestAssured.given;
4 import static org.assertj.core.api.Assertions.assertThat;
5
6 import de.dlr.shepard.auth.users.io.UserIO;
7 import de.dlr.shepard.common.search.io.UserSearchBody;
8 import de.dlr.shepard.common.search.io.UserSearchParams;
9 import de.dlr.shepard.common.search.io.UserSearchResult;
10 import de.dlr.shepard.common.util.Constants;
11 import io.quarkus.test.junit.QuarkusIntegrationTest;
12 import org.junit.jupiter.api.BeforeAll;
13 import org.junit.jupiter.api.MethodOrderer;
14 import org.junit.jupiter.api.Order;
15 import org.junit.jupiter.api.Test;
16 import org.junit.jupiter.api.TestMethodOrder;
17
18 @QuarkusIntegrationTest
19 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
20 public class UserSearcherIT extends BaseTestCaseIT {
21
22 private static String searchURL;
23 private static UserIO userIO1;
24 private static UserIO userIO2;
25
26 @BeforeAll
27 public static void setUp() {
28 searchURL = "/" + Constants.SEARCH + "/" + Constants.USERS;
29 userIO1 = new UserIO(getNewUser("user1" + System.currentTimeMillis()));
30 userIO2 = new UserIO(getNewUser("user2" + System.currentTimeMillis()));
31 }
32
33 @Test
34 @Order(1)
35 public void findUserTest() {
36 String query = "{\"property\": \"username\", \"value\": \"test_it\", \"operator\": \"eq\"}";
37 var params = new UserSearchParams(query);
38 var searchBody = new UserSearchBody(params);
39 var result = given()
40 .spec(requestSpecOfDefaultUser)
41 .body(searchBody)
42 .when()
43 .post(searchURL)
44 .then()
45 .statusCode(200)
46 .extract()
47 .as(UserSearchResult.class);
48 assertThat(result.getResults()).containsExactly(new UserIO(defaultUser.getUser()));
49 assertThat(result.getSearchParams()).isEqualTo(params);
50 }
51
52 @Test
53 @Order(2)
54 public void findUsersByEmailTest() {
55 String query = "{\"property\": \"email\", \"value\": \"integration@test.org\", \"operator\": \"eq\"}";
56 var params = new UserSearchParams(query);
57 var searchBody = new UserSearchBody(params);
58 var result = given()
59 .spec(requestSpecOfDefaultUser)
60 .body(searchBody)
61 .when()
62 .post(searchURL)
63 .then()
64 .statusCode(200)
65 .extract()
66 .as(UserSearchResult.class);
67 assertThat(result.getResults()).contains(new UserIO(defaultUser.getUser()), userIO1, userIO2);
68 }
69
70 @Test
71 @Order(3)
72 public void findOneUserTest() {
73 String query = "{\"property\": \"username\", \"value\": \"user1\", \"operator\": \"contains\"}";
74 var params = new UserSearchParams(query);
75 var searchBody = new UserSearchBody(params);
76 var result = given()
77 .spec(requestSpecOfDefaultUser)
78 .body(searchBody)
79 .when()
80 .post(searchURL)
81 .then()
82 .statusCode(200)
83 .extract()
84 .as(UserSearchResult.class);
85 assertThat(result.getResults()).contains(userIO1);
86 assertThat(result.getResults()).doesNotContain(userIO2, new UserIO(defaultUser.getUser()));
87 }
88
89 @Test
90 @Order(4)
91 public void findTwoUsersTest() {
92 String query = "{\"property\": \"username\", \"value\": \"user\", \"operator\": \"contains\"}";
93 var params = new UserSearchParams(query);
94 var searchBody = new UserSearchBody(params);
95 var result = given()
96 .spec(requestSpecOfDefaultUser)
97 .body(searchBody)
98 .when()
99 .post(searchURL)
100 .then()
101 .statusCode(200)
102 .extract()
103 .as(UserSearchResult.class);
104 assertThat(result.getResults()).contains(userIO1, userIO2);
105 assertThat(result.getResults()).doesNotContain(new UserIO(defaultUser.getUser()));
106 }
107 }