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 = String.format("/%s/%s/%s", 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 String.format(
109 "/%s/%s/%s/%s",
110 Constants.USERS,
111 otherUser.getUser().getUsername(),
112 Constants.SUBSCRIPTIONS,
113 subscription.getId()
114 )
115 )
116 .then()
117 .statusCode(403)
118 .extract()
119 .as(ErrorResponse.class);
120 assertThat(actual.getMessage()).isEqualTo("You do not have permissions for this Subscription.");
121 }
122
123 @Test
124 @Order(6)
125 public void getSubscriptionsTest() {
126 var actual = given()
127 .spec(requestSpecOfDefaultUser)
128 .when()
129 .get(subscriptionsURL)
130 .then()
131 .statusCode(200)
132 .extract()
133 .as(SubscriptionIO[].class);
134 assertThat(actual).containsExactly(subscription);
135 }
136
137 @Test
138 @Order(7)
139 public void deleteSubscriptionTest() {
140 given()
141 .spec(requestSpecOfDefaultUser)
142 .when()
143 .delete(subscriptionsURL + "/" + subscription.getId())
144 .then()
145 .statusCode(204);
146
147 given()
148 .spec(requestSpecOfDefaultUser)
149 .when()
150 .get(subscriptionsURL + "/" + subscription.getId())
151 .then()
152 .statusCode(404);
153 }
154 }