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.common.neo4j.entities.ContainerType;
7 import de.dlr.shepard.common.search.io.ContainerSearchBody;
8 import de.dlr.shepard.common.search.io.ContainerSearchParams;
9 import de.dlr.shepard.common.search.io.ContainerSearchResult;
10 import de.dlr.shepard.common.util.Constants;
11 import de.dlr.shepard.data.file.io.FileContainerIO;
12 import de.dlr.shepard.data.structureddata.io.StructuredDataContainerIO;
13 import de.dlr.shepard.data.timeseries.io.TimeseriesContainerIO;
14 import io.quarkus.test.junit.QuarkusIntegrationTest;
15 import java.util.List;
16 import org.junit.jupiter.api.BeforeAll;
17 import org.junit.jupiter.api.MethodOrderer;
18 import org.junit.jupiter.api.Order;
19 import org.junit.jupiter.api.Test;
20 import org.junit.jupiter.api.TestMethodOrder;
21
22 @QuarkusIntegrationTest
23 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
24 public class ContainerSearcherIT extends BaseTestCaseIT {
25
26 private static FileContainerIO fileContainer1;
27 private static FileContainerIO fileContainer2;
28 private static TimeseriesContainerIO timeseriesContainer1;
29 private static TimeseriesContainerIO timeseriesContainer2;
30 private static StructuredDataContainerIO dataContainer1;
31 private static StructuredDataContainerIO dataContainer2;
32
33 private static String fileContainerURL;
34 private static String timeseriesContainerURL;
35 private static String dataContainerURL;
36 private static String searchURL;
37
38 @BeforeAll
39 public static void setUp() {
40 fileContainerURL = "/" + Constants.FILE_CONTAINERS;
41
42 timeseriesContainerURL = "/" + Constants.TIMESERIES_CONTAINERS;
43
44 dataContainerURL = "/" + Constants.STRUCTURED_DATA_CONTAINERS;
45
46 fileContainer1 = new FileContainerIO();
47 fileContainer1.setName("container1");
48 fileContainer2 = new FileContainerIO();
49 fileContainer2.setName("container2");
50
51 dataContainer1 = new StructuredDataContainerIO();
52 dataContainer1.setName("container1");
53 dataContainer2 = new StructuredDataContainerIO();
54 dataContainer2.setName("container2");
55
56 timeseriesContainer1 = new TimeseriesContainerIO();
57 timeseriesContainer1.setName("timeseriesContainer1");
58 timeseriesContainer2 = new TimeseriesContainerIO();
59 timeseriesContainer2.setName("timeseriesContainer2");
60
61 fileContainer1 = given()
62 .spec(requestSpecOfDefaultUser)
63 .body(fileContainer1)
64 .when()
65 .post(fileContainerURL)
66 .then()
67 .statusCode(201)
68 .extract()
69 .as(FileContainerIO.class);
70 fileContainer2 = given()
71 .spec(requestSpecOfDefaultUser)
72 .body(fileContainer2)
73 .when()
74 .post(fileContainerURL)
75 .then()
76 .statusCode(201)
77 .extract()
78 .as(FileContainerIO.class);
79 timeseriesContainer1 = given()
80 .spec(requestSpecOfDefaultUser)
81 .body(timeseriesContainer1)
82 .when()
83 .post(timeseriesContainerURL)
84 .then()
85 .statusCode(201)
86 .extract()
87 .as(TimeseriesContainerIO.class);
88 timeseriesContainer2 = given()
89 .spec(requestSpecOfDefaultUser)
90 .body(timeseriesContainer2)
91 .when()
92 .post(timeseriesContainerURL)
93 .then()
94 .statusCode(201)
95 .extract()
96 .as(TimeseriesContainerIO.class);
97 dataContainer1 = given()
98 .spec(requestSpecOfDefaultUser)
99 .body(dataContainer1)
100 .when()
101 .post(dataContainerURL)
102 .then()
103 .statusCode(201)
104 .extract()
105 .as(StructuredDataContainerIO.class);
106 dataContainer2 = given()
107 .spec(requestSpecOfDefaultUser)
108 .body(dataContainer2)
109 .when()
110 .post(dataContainerURL)
111 .then()
112 .statusCode(201)
113 .extract()
114 .as(StructuredDataContainerIO.class);
115
116 searchURL = "/" + Constants.SEARCH + "/" + Constants.CONTAINERS;
117 }
118
119 @Test
120 @Order(1)
121 public void test1SearchFileContainers() {
122 String query = "{\"property\": \"name\", \"value\": \"container1\", \"operator\": \"eq\"}";
123 ContainerSearchParams params = new ContainerSearchParams(query, ContainerType.FILE);
124 ContainerSearchBody searchBody = new ContainerSearchBody(params);
125 ContainerSearchResult result = given()
126 .spec(requestSpecOfDefaultUser)
127 .body(searchBody)
128 .when()
129 .post(searchURL)
130 .then()
131 .statusCode(200)
132 .extract()
133 .as(ContainerSearchResult.class);
134 var notExpected = List.of(
135 fileContainer2.getId(),
136 dataContainer1.getId(),
137 dataContainer2.getId(),
138 timeseriesContainer1.getId(),
139 timeseriesContainer2.getId()
140 );
141 assertThat(result.getResults()).anyMatch(res -> res.getId().equals(fileContainer1.getId()));
142 assertThat(result.getResults()).noneMatch(res -> notExpected.contains(res.getId()));
143 assertThat(result.getSearchParams()).isEqualTo(params);
144 }
145
146 @Test
147 @Order(2)
148 public void testSearchStructuredDataContainersByContains() {
149 String query = "{\"property\": \"name\", \"value\": \"ontainer1\", \"operator\": \"contains\"}";
150 ContainerSearchParams params = new ContainerSearchParams(query, ContainerType.STRUCTUREDDATA);
151 ContainerSearchBody searchBody = new ContainerSearchBody(params);
152 ContainerSearchResult result = given()
153 .spec(requestSpecOfDefaultUser)
154 .body(searchBody)
155 .when()
156 .post(searchURL)
157 .then()
158 .statusCode(200)
159 .extract()
160 .as(ContainerSearchResult.class);
161 var notExpected = List.of(
162 fileContainer1.getId(),
163 fileContainer2.getId(),
164 dataContainer2.getId(),
165 timeseriesContainer1.getId(),
166 timeseriesContainer2.getId()
167 );
168 assertThat(result.getResults()).anyMatch(res -> res.getId().equals(dataContainer1.getId()));
169 assertThat(result.getResults()).noneMatch(res -> notExpected.contains(res.getId()));
170 assertThat(result.getSearchParams()).isEqualTo(params);
171 }
172
173 @Test
174 @Order(2)
175 public void testSearchTimeseriesContainersByContains() {
176 String query = "{\"property\": \"name\", \"value\": \"ontainer1\", \"operator\": \"contains\"}";
177 ContainerSearchParams params = new ContainerSearchParams(query, ContainerType.TIMESERIES);
178 ContainerSearchBody searchBody = new ContainerSearchBody(params);
179 ContainerSearchResult result = given()
180 .spec(requestSpecOfDefaultUser)
181 .body(searchBody)
182 .when()
183 .post(searchURL)
184 .then()
185 .statusCode(200)
186 .extract()
187 .as(ContainerSearchResult.class);
188 var notExpected = List.of(
189 fileContainer1.getId(),
190 fileContainer2.getId(),
191 dataContainer1.getId(),
192 dataContainer2.getId(),
193 timeseriesContainer2.getId()
194 );
195 assertThat(result.getResults()).anyMatch(res -> res.getId().equals(timeseriesContainer1.getId()));
196 assertThat(result.getResults()).noneMatch(res -> notExpected.contains(res.getId()));
197 assertThat(result.getSearchParams()).isEqualTo(params);
198 }
199 }