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.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 }