Skip to content

Commit 38f0030

Browse files
Add functional tests for subscription content (#114)
* Add functional tests on Subscription content Added Cucumber feature with scenarios for valid, invalid and duplicate subscriptions.
1 parent c9fe5fc commit 38f0030

File tree

13 files changed

+502
-25
lines changed

13 files changed

+502
-25
lines changed

pom.xml

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
<groupId>com.github.ericsson</groupId>
55
<artifactId>eiffel-intelligence</artifactId>
66
<version>0.0.10</version>
7-
87
<packaging>war</packaging>
98

109
<parent>
@@ -77,18 +76,18 @@
7776
<artifactId>spring-boot-starter-test</artifactId>
7877
<scope>test</scope>
7978
</dependency>
80-
79+
8180
<dependency>
8281
<groupId>org.springframework.boot</groupId>
8382
<artifactId>spring-boot-starter-tomcat</artifactId>
8483
<scope>compile</scope>
8584
</dependency>
86-
85+
8786
<dependency>
8887
<groupId>org.springframework.ldap</groupId>
8988
<artifactId>spring-ldap-core</artifactId>
9089
</dependency>
91-
90+
9291
<dependency>
9392
<groupId>org.springframework.security</groupId>
9493
<artifactId>spring-security-ldap</artifactId>
@@ -99,12 +98,12 @@
9998
<artifactId>spring-security-test</artifactId>
10099
<scope>test</scope>
101100
</dependency>
102-
101+
103102
<dependency>
104103
<groupId>org.springframework.session</groupId>
105104
<artifactId>spring-session-data-mongodb</artifactId>
106105
</dependency>
107-
106+
108107
<dependency>
109108
<groupId>org.springframework.boot</groupId>
110109
<artifactId>spring-boot-starter-data-mongodb</artifactId>
@@ -221,36 +220,36 @@
221220
<artifactId>jongo</artifactId>
222221
<version>1.3.0</version>
223222
</dependency>
224-
223+
225224
<dependency>
226225
<groupId>info.cukes</groupId>
227226
<artifactId>cucumber-junit</artifactId>
228227
<version>1.2.5</version>
229228
<scope>test</scope>
230229
</dependency>
231-
230+
232231
<dependency>
233232
<groupId>info.cukes</groupId>
234233
<artifactId>cucumber-java</artifactId>
235234
<version>1.2.5</version>
236235
<scope>test</scope>
237236
</dependency>
238-
237+
239238
<dependency>
240239
<groupId>info.cukes</groupId>
241240
<artifactId>cucumber-spring</artifactId>
242241
<version>1.2.5</version>
243242
<scope>test</scope>
244243
</dependency>
245-
244+
246245
</dependencies>
247246
<build>
248247
<plugins>
249248
<plugin>
250249
<groupId>org.springframework.boot</groupId>
251250
<artifactId>spring-boot-maven-plugin</artifactId>
252-
</plugin>
253-
251+
</plugin>
252+
254253
<!-- PhoenixNAP RAML Code Generator plugin used to generate sources
255254
from raml -->
256255
<plugin>
@@ -282,8 +281,8 @@
282281
</goals>
283282
</execution>
284283
</executions>
285-
</plugin>
286-
284+
</plugin>
285+
287286
<!-- required for adding generated sources -->
288287
<plugin>
289288
<groupId>org.codehaus.mojo</groupId>
@@ -306,7 +305,7 @@
306305
<id>add-test-source</id>
307306
<phase>process-resources</phase>
308307
<goals>
309-
<goal>add-test-source</goal>
308+
<goal>add-test-source</goal>
310309
</goals>
311310
<configuration>
312311
<sources>
@@ -324,7 +323,7 @@
324323
<version>2.20</version>
325324
<configuration>
326325
<forkCount>2C</forkCount>
327-
<reuseForks>false</reuseForks>
326+
<reuseForks>false</reuseForks>
328327
<excludes>
329328
<exclude>${someModule.test.excludes}</exclude>
330329
</excludes>
@@ -333,7 +332,7 @@
333332
</includes>
334333
</configuration>
335334
</plugin>
336-
335+
337336
<plugin>
338337
<groupId>org.apache.maven.plugins</groupId>
339338
<artifactId>maven-war-plugin</artifactId>
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package com.ericsson.ei.subscriptions.content;
2+
3+
import com.ericsson.ei.controller.model.Subscription;
4+
import com.ericsson.ei.controller.model.SubscriptionResponse;
5+
import com.ericsson.ei.utils.FunctionalTestBase;
6+
import com.ericsson.ei.utils.HttpDeleteRequest;
7+
import com.ericsson.ei.utils.HttpPostRequest;
8+
import com.ericsson.ei.utils.HttpGetRequest;
9+
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
import org.junit.Ignore;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
14+
import cucumber.api.java.en.And;
15+
import cucumber.api.java.en.Given;
16+
import cucumber.api.java.en.Then;
17+
import cucumber.api.java.en.When;
18+
import org.springframework.boot.web.server.LocalServerPort;
19+
import org.springframework.http.HttpStatus;
20+
import org.springframework.http.ResponseEntity;
21+
22+
import javax.annotation.PostConstruct;
23+
24+
import java.io.IOException;
25+
26+
import static org.junit.Assert.assertEquals;
27+
28+
29+
@Ignore
30+
public class SubscriptionContentSteps extends FunctionalTestBase {
31+
32+
@LocalServerPort
33+
private int applicationPort;
34+
private static final Logger LOGGER = LoggerFactory.getLogger(SubscriptionContentSteps.class);
35+
private HttpGetRequest getRequest;
36+
private HttpPostRequest postRequest;
37+
private HttpDeleteRequest deleteRequest;
38+
private ResponseEntity response;
39+
private ObjectMapper mapper = new ObjectMapper();
40+
41+
42+
@PostConstruct
43+
private void setUp() {
44+
getRequest = new HttpGetRequest();
45+
getRequest.setPort(applicationPort).setUrl("http://localhost:").setEndpoint("/subscriptions");
46+
47+
deleteRequest = new HttpDeleteRequest();
48+
deleteRequest.setPort(applicationPort).setUrl("http://localhost:").setEndpoint("/subscriptions");
49+
50+
postRequest = new HttpPostRequest();
51+
postRequest.setPort(applicationPort)
52+
.setUrl("http://localhost:")
53+
.setEndpoint("/subscriptions")
54+
.setHeaders("content-type", "application/json")
55+
.setHeaders("Accept", "application/json");
56+
}
57+
58+
// SCENARIO 1
59+
60+
@Given("^No subscriptions exist$")
61+
public void fetch_subscriptions() {
62+
response = getRequest.build();
63+
assertEquals("[]", response.getBody().toString());
64+
}
65+
66+
@When("^I create subscription request with \"(.*)\"$")
67+
public void create_subscription_request(String validSubscriptionFile) {
68+
postRequest.setParams(validSubscriptionFile);
69+
response = postRequest.build();
70+
}
71+
72+
@Then("^The subscription is created successfully$")
73+
public void the_subscription_is_created_successfully() {
74+
assertEquals(HttpStatus.OK.value(), response.getStatusCodeValue());
75+
}
76+
77+
@And("^Valid subscription \"([A-Za-z0-9_]+)\" exists$")
78+
public void valid_subscription_exists(String subscriptionName) {
79+
getRequest.setEndpoint("/subscriptions/" + subscriptionName);
80+
response = getRequest.build();
81+
assertEquals(HttpStatus.OK.value(), response.getStatusCodeValue());
82+
}
83+
84+
// SCENARIO 2
85+
86+
@Given("^Subscription \"([A-Za-z0-9_]+)\" already exists$")
87+
public void subscription_already_exists(String subscriptionName) {
88+
getRequest.setEndpoint("/subscriptions/" + subscriptionName);
89+
response = getRequest.build();
90+
assertEquals(HttpStatus.OK.value(), response.getStatusCodeValue());
91+
}
92+
93+
@When("^I create a duplicate subscription with \"(.*)\"$")
94+
public void create_duplicate_subscription_with(String validSubscriptionFile) {
95+
postRequest.setParams(validSubscriptionFile);
96+
response = postRequest.build();
97+
}
98+
99+
@Then("^Duplicate subscription is rejected$")
100+
public void duplicate_subscription_is_rejected() {
101+
assertEquals(HttpStatus.BAD_REQUEST.value(), response.getStatusCodeValue());
102+
}
103+
104+
@And("^\"([A-Za-z0-9_]+)\" is not duplicated$")
105+
public void is_not_duplicated(String name) {
106+
Subscription[] subscription = null;
107+
getRequest.setEndpoint("/subscriptions/" + name);
108+
response = getRequest.build();
109+
110+
try {
111+
subscription = mapper.readValue(response.getBody().toString(), Subscription[].class);
112+
} catch(IOException e) {
113+
LOGGER.error(e.getMessage(), e);
114+
}
115+
// Ensure only one subscription exists
116+
assertEquals(1, subscription.length);
117+
}
118+
119+
// SCENARIO 3
120+
121+
@Given("^I delete \"([A-Za-z0-9_]+)\"$")
122+
public void delete_subscription(String subscriptionName) {
123+
SubscriptionResponse subscriptionResponse = null;
124+
deleteRequest.setEndpoint("/subscriptions/" + subscriptionName);
125+
subscriptionResponse = deleteRequest.build();
126+
assertEquals("Deleted Successfully", subscriptionResponse.getMsg());
127+
}
128+
129+
@And("^Subscriptions does not exist$")
130+
public void subscriptions_does_not_exist() {
131+
getRequest.setEndpoint("/subscriptions");
132+
response = getRequest.build();
133+
assertEquals(HttpStatus.OK.value(), response.getStatusCodeValue());
134+
assertEquals("[]", response.getBody().toString());
135+
}
136+
137+
@When("^I create an invalid subscription with \"(.*)\"$")
138+
public void create_invalid_subscription_with(String invalidSubscriptionFile) {
139+
postRequest.setParams(invalidSubscriptionFile);
140+
response = postRequest.build();
141+
}
142+
143+
@Then("^The invalid subscription is rejected$")
144+
public void invalid_subscription_is_rejected() {
145+
assertEquals(HttpStatus.PRECONDITION_FAILED.value(), response.getStatusCodeValue());
146+
}
147+
148+
@And("^The invalid subscription does not exist$")
149+
public void invalid_subscription_does_not_exist() {
150+
String invalidName = "#Subscription-&-with-&-mal-&-formatted-&-name";
151+
getRequest.setEndpoint("/subscriptions/" + invalidName);
152+
response = getRequest.build();
153+
assertEquals("[]", response.getBody().toString());
154+
}
155+
156+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.ericsson.ei.subscriptions.content;
2+
3+
import org.junit.runner.RunWith;
4+
5+
import cucumber.api.CucumberOptions;
6+
import cucumber.api.junit.Cucumber;
7+
8+
@RunWith(Cucumber.class)
9+
@CucumberOptions(features = "src/functionaltests/resources/features/subscriptionContent.feature", glue = {
10+
"com.ericsson.ei.subscriptions.content" })
11+
public class TestSubscriptionContentRunner {
12+
13+
}

src/functionaltests/java/com/ericsson/ei/utils/FunctionalTestBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
*/
3737
@Ignore
3838
@RunWith(SpringRunner.class)
39-
@SpringBootTest(classes = App.class)
39+
@SpringBootTest(classes = App.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
4040
@ContextConfiguration(classes = App.class, loader = SpringBootContextLoader.class, initializers = TestContextInitializer.class)
4141
@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class, FunctionalTestBase.class })
4242
public class FunctionalTestBase extends AbstractTestExecutionListener {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.ericsson.ei.utils;
2+
3+
import com.ericsson.ei.controller.model.SubscriptionResponse;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import lombok.experimental.Accessors;
8+
import org.apache.http.client.methods.HttpDelete;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
11+
import org.springframework.http.ResponseEntity;
12+
13+
import java.io.IOException;
14+
15+
16+
@Accessors(chain = true)
17+
public class HttpDeleteRequest {
18+
private static final Logger LOGGER = LoggerFactory.getLogger(HttpDeleteRequest.class);
19+
@Getter @Setter private int port;
20+
@Getter @Setter private String url;
21+
@Getter @Setter private String endpoint;
22+
private ObjectMapper mapper = new ObjectMapper();
23+
private SubscriptionRestAPI restApi = new SubscriptionRestAPI();
24+
25+
26+
/**
27+
* Build together a httpDelete object
28+
* */
29+
public SubscriptionResponse build() {
30+
ResponseEntity<String> response = null;
31+
SubscriptionResponse subscriptionResponse = null;
32+
HttpDelete httpDelete = new HttpDelete(url + port + endpoint);
33+
response = restApi.getResponse(httpDelete);
34+
35+
try {
36+
subscriptionResponse = mapper.readValue(response.getBody().toString(), SubscriptionResponse.class);
37+
} catch(IOException e) {
38+
LOGGER.error(e.getMessage(), e);
39+
}
40+
41+
return subscriptionResponse;
42+
}
43+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.ericsson.ei.utils;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
import lombok.experimental.Accessors;
6+
import org.apache.http.client.methods.*;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
import org.springframework.http.ResponseEntity;
10+
11+
12+
@Accessors(chain = true)
13+
public class HttpGetRequest {
14+
private static final Logger LOGGER = LoggerFactory.getLogger(HttpGetRequest.class);
15+
16+
@Getter @Setter private int port;
17+
@Getter @Setter private String url;
18+
@Getter @Setter private String endpoint;
19+
private SubscriptionRestAPI restApi = new SubscriptionRestAPI();
20+
21+
22+
/**
23+
* Build together a httpGet object
24+
* */
25+
public ResponseEntity<String> build() {
26+
ResponseEntity<String> response = null;
27+
HttpGet httpGet = new HttpGet(url + port + endpoint);
28+
29+
response = restApi.getResponse(httpGet);
30+
return response;
31+
}
32+
33+
}

0 commit comments

Comments
 (0)