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