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.ErrorResponse;
7   import de.dlr.shepard.common.util.Constants;
8   import de.dlr.shepard.context.collection.io.CollectionIO;
9   import de.dlr.shepard.context.collection.io.DataObjectIO;
10  import de.dlr.shepard.context.references.spatialdata.io.SpatialDataReferenceIO;
11  import de.dlr.shepard.data.spatialdata.io.SpatialDataContainerIO;
12  import de.dlr.shepard.data.spatialdata.io.SpatialDataPointIO;
13  import io.quarkus.test.junit.QuarkusIntegrationTest;
14  import java.net.URISyntaxException;
15  import java.util.ArrayList;
16  import java.util.Collections;
17  import java.util.List;
18  import java.util.Map;
19  import org.junit.jupiter.api.BeforeAll;
20  import org.junit.jupiter.api.MethodOrderer;
21  import org.junit.jupiter.api.Order;
22  import org.junit.jupiter.api.Test;
23  import org.junit.jupiter.api.TestMethodOrder;
24  
25  @QuarkusIntegrationTest
26  @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
27  public class SpatialDataReferenceIT extends BaseTestCaseIT {
28  
29    private static CollectionIO collection;
30    private static DataObjectIO dataObject;
31  
32    private static String referencesURL;
33    private static String containerURL;
34  
35    private static SpatialDataContainerIO container;
36    private static SpatialDataReferenceIO reference;
37    private static List<SpatialDataPointIO> spatialDataPoints;
38  
39    @BeforeAll
40    public static void setUp() throws URISyntaxException {
41      collection = createCollection("SpatialDataReferenceTestCollection");
42      dataObject = createDataObject("SpatialDataReferenceTestDataObject", collection.getId());
43  
44      referencesURL = String.format(
45        "/%s/%d/%s/%d/%s",
46        Constants.COLLECTIONS,
47        collection.getId(),
48        Constants.DATA_OBJECTS,
49        dataObject.getId(),
50        Constants.SPATIAL_DATA_REFERENCES
51      );
52  
53      containerURL = "/" + Constants.SPATIAL_DATA_CONTAINERS;
54  
55      var toCreate = new SpatialDataContainerIO();
56      toCreate.setName("SpatialDataContainer");
57  
58      spatialDataPoints = new ArrayList<>();
59  
60      Map<String, Object> measurement = Map.of("temperature", 20);
61      for (int i = 0; i < 10; i++) {
62        spatialDataPoints.add(
63          new SpatialDataPointIO((long) i, (double) i, (double) i, (double) i, Collections.emptyMap(), measurement)
64        );
65      }
66  
67      container = given()
68        .spec(requestSpecOfDefaultUser)
69        .body(toCreate)
70        .when()
71        .post(containerURL)
72        .then()
73        .statusCode(201)
74        .extract()
75        .as(SpatialDataContainerIO.class);
76  
77      given()
78        .spec(requestSpecOfDefaultUser)
79        .body(spatialDataPoints)
80        .when()
81        .post(String.format("%s/%d/%s", containerURL, container.getId(), Constants.PAYLOAD))
82        .then()
83        .statusCode(204);
84    }
85  
86    @Test
87    @Order(1)
88    public void createSpatialDataReference() {
89      var toCreate = new SpatialDataReferenceIO();
90      toCreate.setName("SpatialDataReferenceDummy");
91      toCreate.setSpatialDataContainerId(container.getId());
92  
93      var actual = given()
94        .spec(requestSpecOfDefaultUser)
95        .body(toCreate)
96        .when()
97        .post(referencesURL)
98        .then()
99        .statusCode(201)
100       .extract()
101       .as(SpatialDataReferenceIO.class);
102     reference = actual;
103 
104     assertThat(actual.getId()).isNotNull();
105     assertThat(actual.getCreatedAt()).isNotNull();
106     assertThat(actual.getCreatedBy()).isEqualTo(nameOfDefaultUser);
107     assertThat(actual.getDataObjectId()).isEqualTo(dataObject.getId());
108     assertThat(actual.getName()).isEqualTo("SpatialDataReferenceDummy");
109     assertThat(actual.getSpatialDataContainerId()).isEqualTo(container.getId());
110     assertThat(actual.getType()).isEqualTo("SpatialDataReference");
111     assertThat(actual.getUpdatedAt()).isNull();
112     assertThat(actual.getUpdatedBy()).isNull();
113     assertThat(actual.getGeometryFilter()).isNull();
114     assertThat(actual.getMeasurementsFilter()).isEqualTo(Collections.emptyList());
115     assertThat(actual.getMetadataFilter()).isEqualTo(Collections.emptyMap());
116     assertThat(actual.getStartTime()).isNull();
117     assertThat(actual.getEndTime()).isNull();
118     assertThat(actual.getLimit()).isNull();
119     assertThat(actual.getSkip()).isNull();
120   }
121 
122   @Test
123   @Order(2)
124   public void getSpatialDataReferences() {
125     var actual = given()
126       .spec(requestSpecOfDefaultUser)
127       .when()
128       .get(referencesURL)
129       .then()
130       .statusCode(200)
131       .extract()
132       .as(SpatialDataReferenceIO[].class);
133     assertThat(actual).containsExactly(reference);
134   }
135 
136   @Test
137   @Order(3)
138   public void getSpatialDataReference() {
139     var actual = given()
140       .spec(requestSpecOfDefaultUser)
141       .when()
142       .get(referencesURL + "/" + reference.getId())
143       .then()
144       .statusCode(200)
145       .extract()
146       .as(SpatialDataReferenceIO.class);
147 
148     assertThat(actual).isEqualTo(reference);
149   }
150 
151   @Test
152   @Order(4)
153   public void getSpatialDataReference_doesNotExist_notFound() {
154     var actual = given()
155       .spec(requestSpecOfDefaultUser)
156       .when()
157       .get(referencesURL + "/99999")
158       .then()
159       .statusCode(404)
160       .extract()
161       .as(ErrorResponse.class);
162 
163     assertThat(actual.getMessage()).isEqualTo("ID ERROR - SpatialData Reference with id 99999 is null or deleted");
164   }
165 
166   @Test
167   @Order(5)
168   public void getSpatialDataReference_referenceBelongsToDifferentCollection_notFound() {
169     CollectionIO otherCollection = createCollection("otherCollection");
170     DataObjectIO otherDataObject = createDataObject("otherDataObject", otherCollection.getId());
171     var otherReferenceToCreate = new SpatialDataReferenceIO();
172     otherReferenceToCreate.setName("SpatialDataReferenceDummy");
173     otherReferenceToCreate.setSpatialDataContainerId(container.getId());
174 
175     SpatialDataReferenceIO otherReference = given()
176       .spec(requestSpecOfDefaultUser)
177       .body(otherReferenceToCreate)
178       .when()
179       .post(
180         String.format(
181           "/%s/%d/%s/%d/%s",
182           Constants.COLLECTIONS,
183           otherCollection.getId(),
184           Constants.DATA_OBJECTS,
185           otherDataObject.getId(),
186           Constants.SPATIAL_DATA_REFERENCES
187         )
188       )
189       .then()
190       .statusCode(201)
191       .extract()
192       .as(SpatialDataReferenceIO.class);
193 
194     var actual = given()
195       .spec(requestSpecOfDefaultUser)
196       .when()
197       .get(referencesURL + "/" + otherReference.getId())
198       .then()
199       .statusCode(404)
200       .extract()
201       .as(ErrorResponse.class);
202 
203     assertThat(actual.getMessage()).isEqualTo("ID ERROR - There is no association between dataObject and reference");
204   }
205 
206   @Test
207   @Order(6)
208   public void getSpatialDataReferencePayload() {
209     var actual = given()
210       .spec(requestSpecOfDefaultUser)
211       .when()
212       .get(String.format("%s/%d/%s", referencesURL, reference.getId(), Constants.PAYLOAD))
213       .then()
214       .statusCode(200)
215       .extract()
216       .as(SpatialDataPointIO[].class);
217 
218     SpatialDataPointIO[] expected = spatialDataPoints.toArray(SpatialDataPointIO[]::new);
219     assertThat(actual).containsExactly(expected);
220   }
221 
222   @Test
223   @Order(7)
224   public void deleteReferences() {
225     given()
226       .spec(requestSpecOfDefaultUser)
227       .when()
228       .delete(referencesURL + "/" + reference.getId())
229       .then()
230       .statusCode(204);
231     given()
232       .spec(requestSpecOfDefaultUser)
233       .when()
234       .delete(referencesURL + "/" + reference.getId())
235       .then()
236       .statusCode(404);
237     given().spec(requestSpecOfDefaultUser).when().get(referencesURL + "/" + reference.getId()).then().statusCode(404);
238   }
239 }