View Javadoc
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 }