View Javadoc
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 }