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