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.dataobject.io.CollectionReferenceIO;
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 CollectionReferenceIT extends BaseTestCaseIT {
21
22 private static CollectionIO collection;
23 private static DataObjectIO dataObject;
24 private static CollectionIO referenced;
25
26 private static String referencesURL;
27
28 private static CollectionReferenceIO reference;
29
30 @BeforeAll
31 public static void setUp() {
32 collection = createCollection("CollectionReferenceTestCollection");
33 dataObject = createDataObject("CollectionReference", collection.getId());
34 referenced = createCollection("ReferencedCollection");
35
36 referencesURL = String.format(
37 "/%s/%d/%s/%d/%s",
38 Constants.COLLECTIONS,
39 collection.getId(),
40 Constants.DATA_OBJECTS,
41 dataObject.getId(),
42 Constants.COLLECTION_REFERENCES
43 );
44 }
45
46 @Test
47 @Order(1)
48 public void createCollectionReferenceTest() {
49 var toCreate = new CollectionReferenceIO();
50 toCreate.setName("CollectionReferenceDummy");
51 toCreate.setRelationship("integrationtests");
52 toCreate.setReferencedCollectionId(referenced.getId());
53
54 var actual = given()
55 .spec(requestSpecOfDefaultUser)
56 .body(toCreate)
57 .when()
58 .post(referencesURL)
59 .then()
60 .statusCode(201)
61 .extract()
62 .as(CollectionReferenceIO.class);
63 reference = actual;
64
65 assertThat(actual.getId()).isNotNull();
66 assertThat(actual.getCreatedAt()).isNotNull();
67 assertThat(actual.getCreatedBy()).isEqualTo(nameOfDefaultUser);
68 assertThat(actual.getDataObjectId()).isEqualTo(dataObject.getId());
69 assertThat(actual.getName()).isEqualTo("CollectionReferenceDummy");
70 assertThat(actual.getRelationship()).isEqualTo("integrationtests");
71 assertThat(actual.getReferencedCollectionId()).isEqualTo(referenced.getId());
72 assertThat(actual.getType()).isEqualTo("CollectionReference");
73 assertThat(actual.getUpdatedAt()).isNull();
74 assertThat(actual.getUpdatedBy()).isNull();
75 }
76
77 @Test
78 @Order(2)
79 public void createCollectionReferenceTest_ReferencedDoesNotExist() {
80 var toCreate = new CollectionReferenceIO();
81 toCreate.setName("CollectionReferenceDummy2");
82 toCreate.setRelationship("integrationtests");
83 toCreate.setReferencedCollectionId(-2);
84
85 given().spec(requestSpecOfDefaultUser).body(toCreate).when().post(referencesURL).then().statusCode(400);
86 }
87
88 @Test
89 @Order(3)
90 public void getCollectionReferenceTest() {
91 var actual = given()
92 .spec(requestSpecOfDefaultUser)
93 .when()
94 .get(referencesURL + "/" + reference.getId())
95 .then()
96 .statusCode(200)
97 .extract()
98 .as(CollectionReferenceIO.class);
99 assertThat(actual).isEqualTo(reference);
100 }
101
102 @Test
103 @Order(4)
104 public void getCollectionReferencesTest() {
105 var actual = given()
106 .spec(requestSpecOfDefaultUser)
107 .when()
108 .get(referencesURL)
109 .then()
110 .statusCode(200)
111 .extract()
112 .as(CollectionReferenceIO[].class);
113 assertThat(actual).containsExactly(reference);
114 }
115
116 @Test
117 @Order(5)
118 public void getCollectionReference_referenceDoesNotExist_notFound() {
119 var actual = given()
120 .spec(requestSpecOfDefaultUser)
121 .when()
122 .get(referencesURL + "/99999")
123 .then()
124 .statusCode(404)
125 .extract()
126 .as(ErrorResponse.class);
127
128 assertThat(actual.getMessage()).isEqualTo("ID ERROR - Collection Reference with id 99999 is null or deleted");
129 }
130
131 @Test
132 @Order(6)
133 public void getCollectionReferencedTest() {
134 var referencedURL = String.format("/%s/%d", Constants.COLLECTIONS, referenced.getId());
135 var actual = given()
136 .spec(requestSpecOfDefaultUser)
137 .when()
138 .get(referencedURL)
139 .then()
140 .statusCode(200)
141 .extract()
142 .as(CollectionIO.class);
143
144 assertThat(actual).usingRecursiveComparison().ignoringFields("incomingIds").isEqualTo(referenced);
145 assertThat(actual.getIncomingIds()).containsExactly(reference.getId());
146 }
147
148 @Test
149 @Order(7)
150 public void getCollectionReferencePayloadTest() {
151 var actual = given()
152 .spec(requestSpecOfDefaultUser)
153 .when()
154 .get(String.format("%s/%d/%s", referencesURL, reference.getId(), Constants.PAYLOAD))
155 .then()
156 .statusCode(200)
157 .extract()
158 .as(CollectionIO.class);
159
160 assertThat(actual).usingRecursiveComparison().ignoringFields("incomingIds").isEqualTo(referenced);
161 assertThat(actual.getIncomingIds()).containsExactly(reference.getId());
162 }
163
164 @Test
165 @Order(8)
166 public void getCollectionReference_idBelongsToWrongDataObject_notFound() {
167 DataObjectIO otherDataObject = createDataObject("OtherStructuredDataReferenceTestDataObject", collection.getId());
168
169 var toCreate = new CollectionReferenceIO();
170 toCreate.setName("CollectionReferenceDummy");
171 toCreate.setRelationship("integrationtests");
172 toCreate.setReferencedCollectionId(referenced.getId());
173
174 CollectionReferenceIO otherRef = given()
175 .spec(requestSpecOfDefaultUser)
176 .body(toCreate)
177 .when()
178 .post(
179 String.format(
180 "/%s/%d/%s/%d/%s",
181 Constants.COLLECTIONS,
182 collection.getId(),
183 Constants.DATA_OBJECTS,
184 otherDataObject.getId(),
185 Constants.COLLECTION_REFERENCES
186 )
187 )
188 .then()
189 .statusCode(201)
190 .extract()
191 .as(CollectionReferenceIO.class);
192
193 var actual = given()
194 .spec(requestSpecOfDefaultUser)
195 .when()
196 .get(referencesURL + "/" + otherRef.getId())
197 .then()
198 .statusCode(404)
199 .extract()
200 .as(ErrorResponse.class);
201
202 assertThat(actual.getMessage()).isEqualTo("ID ERROR - There is no association between dataObject and reference");
203 }
204
205 @Test
206 @Order(9)
207 public void deleteCollectionReferenceTest() {
208 given()
209 .spec(requestSpecOfDefaultUser)
210 .when()
211 .delete(referencesURL + "/" + reference.getId())
212 .then()
213 .statusCode(204);
214 given()
215 .spec(requestSpecOfDefaultUser)
216 .when()
217 .delete(referencesURL + "/" + reference.getId())
218 .then()
219 .statusCode(404);
220 given().spec(requestSpecOfDefaultUser).when().get(referencesURL + "/" + reference.getId()).then().statusCode(404);
221 }
222 }