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