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.basicreference.io.BasicReferenceIO;
11 import de.dlr.shepard.context.references.dataobject.io.DataObjectReferenceIO;
12 import de.dlr.shepard.context.references.uri.io.URIReferenceIO;
13 import io.quarkus.test.junit.QuarkusIntegrationTest;
14 import org.junit.jupiter.api.BeforeAll;
15 import org.junit.jupiter.api.MethodOrderer;
16 import org.junit.jupiter.api.Order;
17 import org.junit.jupiter.api.Test;
18 import org.junit.jupiter.api.TestMethodOrder;
19
20 @QuarkusIntegrationTest
21 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
22 public class BasicReferenceIT extends BaseTestCaseIT {
23
24 private static CollectionIO collection;
25 private static DataObjectIO dataObject;
26
27 private static String referencesURL;
28 private static BasicReferenceIO dataObjectReference;
29 private static BasicReferenceIO uriReference;
30
31 @BeforeAll
32 public static void setUp() {
33 collection = createCollection("BasicReferenceTestCollection");
34 dataObject = createDataObject("BasicReferenceTestDataObject", collection.getId());
35
36 dataObjectReference = createDataObjectReference(collection.getId(), dataObject.getId(), dataObject.getId());
37 uriReference = createUriReference(collection.getId(), dataObject.getId());
38
39 referencesURL = "/%s/%d/%s/%d/references".formatted(
40 Constants.COLLECTIONS,
41 collection.getId(),
42 Constants.DATA_OBJECTS,
43 dataObject.getId(),
44 Constants.BASIC_REFERENCES
45 );
46 }
47
48 @Test
49 @Order(1)
50 public void getFirstReference_Successful() {
51 BasicReferenceIO actual = given()
52 .spec(requestSpecOfDefaultUser)
53 .when()
54 .get(referencesURL + "/" + dataObjectReference.getId())
55 .then()
56 .statusCode(200)
57 .extract()
58 .as(BasicReferenceIO.class);
59
60 assertThat(actual.getCreatedAt()).isNotNull();
61 assertThat(actual.getCreatedBy()).isEqualTo(nameOfDefaultUser);
62 assertThat(actual.getDataObjectId()).isEqualTo(dataObject.getId());
63 assertThat(actual.getId()).isEqualTo(dataObjectReference.getId());
64 assertThat(actual.getName()).isEqualTo("DataObjectReference");
65 assertThat(actual.getType()).isEqualTo("DataObjectReference");
66 assertThat(actual.getUpdatedAt()).isNull();
67 assertThat(actual.getUpdatedBy()).isNull();
68
69 dataObjectReference = actual;
70 }
71
72 @Test
73 @Order(2)
74 public void getReference_doesNotExist_notFound() {
75 ErrorResponse actual = given()
76 .spec(requestSpecOfDefaultUser)
77 .when()
78 .get(referencesURL + "/99999")
79 .then()
80 .statusCode(404)
81 .extract()
82 .as(ErrorResponse.class);
83
84 assertThat(actual.getMessage()).isEqualTo("ID ERROR - Basic Reference with id 99999 is null or deleted");
85 }
86
87 @Test
88 @Order(3)
89 public void getReference_idBelongsToWrongDataObject_notFound() {
90 DataObjectIO otherDataObject = createDataObject("OtherStructuredDataReferenceTestDataObject", collection.getId());
91 DataObjectReferenceIO otherRef = createDataObjectReference(
92 collection.getId(),
93 otherDataObject.getId(),
94 dataObject.getId()
95 );
96
97 var actual = given()
98 .spec(requestSpecOfDefaultUser)
99 .when()
100 .get(referencesURL + "/" + otherRef.getId())
101 .then()
102 .statusCode(404)
103 .extract()
104 .as(ErrorResponse.class);
105
106 assertThat(actual.getMessage()).isEqualTo("ID ERROR - There is no association between dataObject and reference");
107 }
108
109 @Test
110 @Order(4)
111 public void getSecondReference_Successful() {
112 BasicReferenceIO actual = given()
113 .spec(requestSpecOfDefaultUser)
114 .when()
115 .get(referencesURL + "/" + uriReference.getId())
116 .then()
117 .statusCode(200)
118 .extract()
119 .as(BasicReferenceIO.class);
120
121 assertThat(actual.getCreatedAt()).isNotNull();
122 assertThat(actual.getCreatedBy()).isEqualTo(nameOfDefaultUser);
123 assertThat(actual.getDataObjectId()).isEqualTo(dataObject.getId());
124 assertThat(actual.getId()).isEqualTo(uriReference.getId());
125 assertThat(actual.getName()).isEqualTo("UriReference");
126 assertThat(actual.getType()).isEqualTo("URIReference");
127 assertThat(actual.getUpdatedAt()).isNull();
128 assertThat(actual.getUpdatedBy()).isNull();
129
130 uriReference = actual;
131 }
132
133 @Test
134 @Order(5)
135 public void getAllReferences_Successful() {
136 BasicReferenceIO[] actual = given()
137 .spec(requestSpecOfDefaultUser)
138 .when()
139 .get(referencesURL)
140 .then()
141 .statusCode(200)
142 .extract()
143 .as(BasicReferenceIO[].class);
144
145 assertThat(actual).containsExactlyInAnyOrder(dataObjectReference, uriReference);
146 }
147
148 @Test
149 @Order(6)
150 public void deleteReferences_Successful() {
151 given()
152 .spec(requestSpecOfDefaultUser)
153 .when()
154 .delete(referencesURL + "/" + uriReference.getId())
155 .then()
156 .statusCode(204);
157
158 BasicReferenceIO[] actual = given()
159 .spec(requestSpecOfDefaultUser)
160 .when()
161 .get(referencesURL)
162 .then()
163 .statusCode(200)
164 .extract()
165 .as(BasicReferenceIO[].class);
166
167 assertThat(actual).containsExactly(dataObjectReference);
168
169 given()
170 .spec(requestSpecOfDefaultUser)
171 .when()
172 .get(referencesURL + "/" + uriReference.getId())
173 .then()
174 .statusCode(404);
175 }
176
177 private static URIReferenceIO createUriReference(long collectionId, long dataObjectId) {
178 var uriReferenceUrl =
179 "/" +
180 Constants.COLLECTIONS +
181 "/" +
182 collectionId +
183 "/" +
184 Constants.DATA_OBJECTS +
185 "/" +
186 dataObjectId +
187 "/" +
188 Constants.URI_REFERENCES +
189 "/";
190 var uriReference = new URIReferenceIO() {
191 {
192 setName("UriReference");
193 setUri("http://www.example.com");
194 }
195 };
196 var created = given()
197 .spec(requestSpecOfDefaultUser)
198 .body(uriReference)
199 .when()
200 .post(uriReferenceUrl)
201 .then()
202 .statusCode(201)
203 .extract()
204 .as(URIReferenceIO.class);
205 return created;
206 }
207 }