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.dataobject.io.CollectionReferenceIO;
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 CollectionReferenceIT extends BaseTestCaseIT {
21  
22    private static CollectionIO collection;
23    private static DataObjectIO dataObject;
24    private static CollectionIO referenced;
25  
26    private static String referencesURL;
27  
28    private static CollectionReferenceIO reference;
29  
30    @BeforeAll
31    public static void setUp() {
32      collection = createCollection("CollectionReferenceTestCollection");
33      dataObject = createDataObject("CollectionReference", collection.getId());
34      referenced = createCollection("ReferencedCollection");
35  
36      referencesURL = "/%s/%d/%s/%d/%s".formatted(
37          Constants.COLLECTIONS,
38          collection.getId(),
39          Constants.DATA_OBJECTS,
40          dataObject.getId(),
41          Constants.COLLECTION_REFERENCES
42        );
43    }
44  
45    @Test
46    @Order(1)
47    public void createCollectionReferenceTest() {
48      var toCreate = new CollectionReferenceIO();
49      toCreate.setName("CollectionReferenceDummy");
50      toCreate.setRelationship("integrationtests");
51      toCreate.setReferencedCollectionId(referenced.getId());
52  
53      var actual = given()
54        .spec(requestSpecOfDefaultUser)
55        .body(toCreate)
56        .when()
57        .post(referencesURL)
58        .then()
59        .statusCode(201)
60        .extract()
61        .as(CollectionReferenceIO.class);
62      reference = actual;
63  
64      assertThat(actual.getId()).isNotNull();
65      assertThat(actual.getCreatedAt()).isNotNull();
66      assertThat(actual.getCreatedBy()).isEqualTo(nameOfDefaultUser);
67      assertThat(actual.getDataObjectId()).isEqualTo(dataObject.getId());
68      assertThat(actual.getName()).isEqualTo("CollectionReferenceDummy");
69      assertThat(actual.getRelationship()).isEqualTo("integrationtests");
70      assertThat(actual.getReferencedCollectionId()).isEqualTo(referenced.getId());
71      assertThat(actual.getType()).isEqualTo("CollectionReference");
72      assertThat(actual.getUpdatedAt()).isNull();
73      assertThat(actual.getUpdatedBy()).isNull();
74    }
75  
76    @Test
77    @Order(2)
78    public void createCollectionReferenceTest_ReferencedDoesNotExist() {
79      var toCreate = new CollectionReferenceIO();
80      toCreate.setName("CollectionReferenceDummy2");
81      toCreate.setRelationship("integrationtests");
82      toCreate.setReferencedCollectionId(-2);
83  
84      given().spec(requestSpecOfDefaultUser).body(toCreate).when().post(referencesURL).then().statusCode(400);
85    }
86  
87    @Test
88    @Order(3)
89    public void getCollectionReferenceTest() {
90      var actual = given()
91        .spec(requestSpecOfDefaultUser)
92        .when()
93        .get(referencesURL + "/" + reference.getId())
94        .then()
95        .statusCode(200)
96        .extract()
97        .as(CollectionReferenceIO.class);
98      assertThat(actual).isEqualTo(reference);
99    }
100 
101   @Test
102   @Order(4)
103   public void getCollectionReferencesTest() {
104     var actual = given()
105       .spec(requestSpecOfDefaultUser)
106       .when()
107       .get(referencesURL)
108       .then()
109       .statusCode(200)
110       .extract()
111       .as(CollectionReferenceIO[].class);
112     assertThat(actual).containsExactly(reference);
113   }
114 
115   @Test
116   @Order(5)
117   public void getCollectionReference_referenceDoesNotExist_notFound() {
118     var actual = given()
119       .spec(requestSpecOfDefaultUser)
120       .when()
121       .get(referencesURL + "/99999")
122       .then()
123       .statusCode(404)
124       .extract()
125       .as(ErrorResponse.class);
126 
127     assertThat(actual.getMessage()).isEqualTo("ID ERROR - Collection Reference with id 99999 is null or deleted");
128   }
129 
130   @Test
131   @Order(6)
132   public void getCollectionReferencedTest() {
133     var referencedURL = "/%s/%d".formatted(Constants.COLLECTIONS, referenced.getId());
134     var actual = given()
135       .spec(requestSpecOfDefaultUser)
136       .when()
137       .get(referencedURL)
138       .then()
139       .statusCode(200)
140       .extract()
141       .as(CollectionIO.class);
142 
143     assertThat(actual).usingRecursiveComparison().ignoringFields("incomingIds").isEqualTo(referenced);
144     assertThat(actual.getIncomingIds()).containsExactly(reference.getId());
145   }
146 
147   @Test
148   @Order(7)
149   public void getCollectionReferencePayloadTest() {
150     var actual = given()
151       .spec(requestSpecOfDefaultUser)
152       .when()
153       .get("%s/%d/%s".formatted(referencesURL, reference.getId(), Constants.PAYLOAD))
154       .then()
155       .statusCode(200)
156       .extract()
157       .as(CollectionIO.class);
158 
159     assertThat(actual).usingRecursiveComparison().ignoringFields("incomingIds").isEqualTo(referenced);
160     assertThat(actual.getIncomingIds()).containsExactly(reference.getId());
161   }
162 
163   @Test
164   @Order(8)
165   public void getCollectionReference_idBelongsToWrongDataObject_notFound() {
166     DataObjectIO otherDataObject = createDataObject("OtherStructuredDataReferenceTestDataObject", collection.getId());
167 
168     var toCreate = new CollectionReferenceIO();
169     toCreate.setName("CollectionReferenceDummy");
170     toCreate.setRelationship("integrationtests");
171     toCreate.setReferencedCollectionId(referenced.getId());
172 
173     CollectionReferenceIO otherRef = given()
174       .spec(requestSpecOfDefaultUser)
175       .body(toCreate)
176       .when()
177       .post(
178         "/%s/%d/%s/%d/%s".formatted(
179             Constants.COLLECTIONS,
180             collection.getId(),
181             Constants.DATA_OBJECTS,
182             otherDataObject.getId(),
183             Constants.COLLECTION_REFERENCES
184           )
185       )
186       .then()
187       .statusCode(201)
188       .extract()
189       .as(CollectionReferenceIO.class);
190 
191     var actual = given()
192       .spec(requestSpecOfDefaultUser)
193       .when()
194       .get(referencesURL + "/" + otherRef.getId())
195       .then()
196       .statusCode(404)
197       .extract()
198       .as(ErrorResponse.class);
199 
200     assertThat(actual.getMessage()).isEqualTo("ID ERROR - There is no association between dataObject and reference");
201   }
202 
203   @Test
204   @Order(9)
205   public void deleteCollectionReferenceTest() {
206     given()
207       .spec(requestSpecOfDefaultUser)
208       .when()
209       .delete(referencesURL + "/" + reference.getId())
210       .then()
211       .statusCode(204);
212     given()
213       .spec(requestSpecOfDefaultUser)
214       .when()
215       .delete(referencesURL + "/" + reference.getId())
216       .then()
217       .statusCode(404);
218     given().spec(requestSpecOfDefaultUser).when().get(referencesURL + "/" + reference.getId()).then().statusCode(404);
219   }
220 }