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