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.subscription.io.SubscriptionIO;
8 import de.dlr.shepard.common.util.Constants;
9 import de.dlr.shepard.common.util.RequestMethod;
10 import io.quarkus.test.junit.QuarkusIntegrationTest;
11 import org.junit.jupiter.api.BeforeAll;
12 import org.junit.jupiter.api.MethodOrderer;
13 import org.junit.jupiter.api.Order;
14 import org.junit.jupiter.api.Test;
15 import org.junit.jupiter.api.TestMethodOrder;
16
17 @QuarkusIntegrationTest
18 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
19 public class SubscriptionIT extends BaseTestCaseIT {
20
21 private static String subscriptionsURL;
22
23 private static SubscriptionIO subscription;
24
25 @BeforeAll
26 public static void setUp() {
27 subscriptionsURL = "/%s/%s/%s".formatted(Constants.USERS, nameOfDefaultUser, Constants.SUBSCRIPTIONS);
28 }
29
30 @Test
31 @Order(1)
32 public void createSubscriptionTest() {
33 var toCreate = new SubscriptionIO();
34 toCreate.setName("SubscriptionDummy");
35 toCreate.setCallbackURL("http://my-callback-url.local");
36 toCreate.setRequestMethod(RequestMethod.DELETE);
37 toCreate.setSubscribedURL("http://my-subscribed-url.local");
38
39 var actual = given()
40 .spec(requestSpecOfDefaultUser)
41 .body(toCreate)
42 .when()
43 .post(subscriptionsURL)
44 .then()
45 .statusCode(201)
46 .extract()
47 .as(SubscriptionIO.class);
48 subscription = actual;
49
50 assertThat(actual.getId()).isNotNull();
51 assertThat(actual.getCreatedAt()).isNotNull();
52 assertThat(actual.getCreatedBy()).isEqualTo(nameOfDefaultUser);
53 assertThat(actual.getName()).isEqualTo("SubscriptionDummy");
54 assertThat(actual.getCallbackURL()).isEqualTo("http://my-callback-url.local");
55 assertThat(actual.getRequestMethod()).isEqualTo(RequestMethod.DELETE);
56 assertThat(actual.getSubscribedURL()).isEqualTo("http://my-subscribed-url.local");
57 }
58
59 @Test
60 @Order(2)
61 public void getSubscriptionTest() {
62 var actual = given()
63 .spec(requestSpecOfDefaultUser)
64 .when()
65 .get(subscriptionsURL + "/" + subscription.getId())
66 .then()
67 .statusCode(200)
68 .extract()
69 .as(SubscriptionIO.class);
70 assertThat(actual).isEqualTo(subscription);
71 }
72
73 @Test
74 @Order(3)
75 public void getSubscriptionTest_doesNotExist_notFound() {
76 ErrorResponse actual = given()
77 .spec(requestSpecOfDefaultUser)
78 .when()
79 .get(subscriptionsURL + "/99999")
80 .then()
81 .statusCode(404)
82 .extract()
83 .as(ErrorResponse.class);
84 assertThat(actual.getMessage()).isEqualTo("ID ERROR - Subscription does not exist");
85 }
86
87 @Test
88 @Order(4)
89 public void getSubscriptionTest_requestingSubscriptionOfOtherUser_forbidden() {
90 ErrorResponse actual = given()
91 .spec(requestSpecOfOtherUser)
92 .when()
93 .get(subscriptionsURL + "/" + subscription.getId())
94 .then()
95 .statusCode(403)
96 .extract()
97 .as(ErrorResponse.class);
98 assertThat(actual.getMessage()).isEqualTo("The requested action is forbidden by the permission policies");
99 }
100
101 @Test
102 @Order(5)
103 public void getSubscriptionTest_requestingIdOfOtherUser_notFound() {
104 ErrorResponse actual = given()
105 .spec(requestSpecOfOtherUser)
106 .when()
107 .get(
108 "/%s/%s/%s/%s".formatted(
109 Constants.USERS,
110 otherUser.getUser().getUsername(),
111 Constants.SUBSCRIPTIONS,
112 subscription.getId()
113 )
114 )
115 .then()
116 .statusCode(403)
117 .extract()
118 .as(ErrorResponse.class);
119 assertThat(actual.getMessage()).isEqualTo("You do not have permissions for this Subscription.");
120 }
121
122 @Test
123 @Order(6)
124 public void getSubscriptionsTest() {
125 var actual = given()
126 .spec(requestSpecOfDefaultUser)
127 .when()
128 .get(subscriptionsURL)
129 .then()
130 .statusCode(200)
131 .extract()
132 .as(SubscriptionIO[].class);
133 assertThat(actual).containsExactly(subscription);
134 }
135
136 @Test
137 @Order(7)
138 public void deleteSubscriptionTest() {
139 given()
140 .spec(requestSpecOfDefaultUser)
141 .when()
142 .delete(subscriptionsURL + "/" + subscription.getId())
143 .then()
144 .statusCode(204);
145
146 given()
147 .spec(requestSpecOfDefaultUser)
148 .when()
149 .get(subscriptionsURL + "/" + subscription.getId())
150 .then()
151 .statusCode(404);
152 }
153 }