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.uri.io.URIReferenceIO;
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 URIReferenceIT extends BaseTestCaseIT {
21
22 private static CollectionIO collection;
23 private static DataObjectIO dataObject;
24
25 private static String referencesURL;
26
27 private static URIReferenceIO reference;
28
29 @BeforeAll
30 public static void setUp() {
31 collection = createCollection("URIReferenceTestCollection");
32 dataObject = createDataObject("URIReferenceDataObject", collection.getId());
33
34 referencesURL = "/%s/%d/%s/%d/%s".formatted(
35 Constants.COLLECTIONS,
36 collection.getId(),
37 Constants.DATA_OBJECTS,
38 dataObject.getId(),
39 Constants.URI_REFERENCES
40 );
41 }
42
43 @Test
44 @Order(1)
45 public void createURIReferenceTest() {
46 var toCreate = new URIReferenceIO();
47 toCreate.setName("URIReferenceDummy");
48 toCreate.setUri("http://MyAwesomeUrl.com");
49 toCreate.setRelationship("test-relationship");
50
51 var actual = given()
52 .spec(requestSpecOfDefaultUser)
53 .body(toCreate)
54 .when()
55 .post(referencesURL)
56 .then()
57 .statusCode(201)
58 .extract()
59 .as(URIReferenceIO.class);
60 reference = actual;
61
62 assertThat(actual.getId()).isNotNull();
63 assertThat(actual.getCreatedAt()).isNotNull();
64 assertThat(actual.getCreatedBy()).isEqualTo(nameOfDefaultUser);
65 assertThat(actual.getDataObjectId()).isEqualTo(dataObject.getId());
66 assertThat(actual.getName()).isEqualTo("URIReferenceDummy");
67 assertThat(actual.getUri()).isEqualTo("http://MyAwesomeUrl.com");
68 assertThat(actual.getType()).isEqualTo("URIReference");
69 assertThat(actual.getRelationship()).isEqualTo("test-relationship");
70 assertThat(actual.getUpdatedAt()).isNull();
71 assertThat(actual.getUpdatedBy()).isNull();
72 }
73
74 @Test
75 @Order(2)
76 public void getURIReferenceTest() {
77 var actual = given()
78 .spec(requestSpecOfDefaultUser)
79 .when()
80 .get(referencesURL + "/" + reference.getId())
81 .then()
82 .statusCode(200)
83 .extract()
84 .as(URIReferenceIO.class);
85 assertThat(actual).isEqualTo(reference);
86 }
87
88 @Test
89 @Order(3)
90 public void getURIReferencesTest() {
91 var actual = given()
92 .spec(requestSpecOfDefaultUser)
93 .when()
94 .get(referencesURL)
95 .then()
96 .statusCode(200)
97 .extract()
98 .as(URIReferenceIO[].class);
99 assertThat(actual).containsExactly(reference);
100 }
101
102 @Test
103 @Order(4)
104 public void getURIReference_referenceDoesNotExist_notFound() {
105 var actual = given()
106 .spec(requestSpecOfDefaultUser)
107 .when()
108 .get(referencesURL + "/99999")
109 .then()
110 .statusCode(404)
111 .extract()
112 .as(ErrorResponse.class);
113
114 assertThat(actual.getMessage()).isEqualTo("ID ERROR - URI Reference with id 99999 is null or deleted");
115 }
116
117 @Test
118 @Order(5)
119 public void getURIReference_idBelongsToWrongDataObject_notFound() {
120 DataObjectIO otherDataObject = createDataObject("OtherStructuredDataReferenceTestDataObject", collection.getId());
121
122 var toCreate = new URIReferenceIO();
123 toCreate.setName("URIReferenceDummy");
124 toCreate.setUri("http://MyAwesomeUrl.com");
125
126 URIReferenceIO otherRef = given()
127 .spec(requestSpecOfDefaultUser)
128 .body(toCreate)
129 .when()
130 .post(
131 "/%s/%d/%s/%d/%s".formatted(
132 Constants.COLLECTIONS,
133 collection.getId(),
134 Constants.DATA_OBJECTS,
135 otherDataObject.getId(),
136 Constants.URI_REFERENCES
137 )
138 )
139 .then()
140 .statusCode(201)
141 .extract()
142 .as(URIReferenceIO.class);
143
144 var actual = given()
145 .spec(requestSpecOfDefaultUser)
146 .when()
147 .get(referencesURL + "/" + otherRef.getId())
148 .then()
149 .statusCode(404)
150 .extract()
151 .as(ErrorResponse.class);
152
153 assertThat(actual.getMessage()).isEqualTo("ID ERROR - There is no association between dataObject and reference");
154 }
155
156 @Test
157 @Order(6)
158 public void deleteURIReferenceTest() {
159 given()
160 .spec(requestSpecOfDefaultUser)
161 .when()
162 .delete(referencesURL + "/" + reference.getId())
163 .then()
164 .statusCode(204);
165 given()
166 .spec(requestSpecOfDefaultUser)
167 .when()
168 .delete(referencesURL + "/" + reference.getId())
169 .then()
170 .statusCode(404);
171 given().spec(requestSpecOfDefaultUser).when().get(referencesURL + "/" + reference.getId()).then().statusCode(404);
172 }
173 }