Skip to content

Commit 8cfbb46

Browse files
authored
Subscription date handling moved to backend (epoch), multi subscription upload support added. Flow tests updated/added (#64)
1 parent d74e63f commit 8cfbb46

File tree

9 files changed

+131
-46
lines changed

9 files changed

+131
-46
lines changed

src/main/java/com/ericsson/ei/controller/SubscriptionController.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
package com.ericsson.ei.controller;
33

44
import java.util.List;
5+
import javax.validation.Valid;
56
import org.springframework.http.ResponseEntity;
67
import org.springframework.web.bind.annotation.PathVariable;
8+
import org.springframework.web.bind.annotation.RequestBody;
79
import org.springframework.web.bind.annotation.RequestMapping;
810
import org.springframework.web.bind.annotation.RequestMethod;
911
import org.springframework.web.bind.annotation.RestController;
@@ -32,19 +34,19 @@ public interface SubscriptionController {
3234
*/
3335
@RequestMapping(value = "", method = RequestMethod.POST)
3436
public ResponseEntity<?> createSubscription(
35-
@javax.validation.Valid
36-
@org.springframework.web.bind.annotation.RequestBody
37-
com.ericsson.ei.controller.model.Subscription subscription);
37+
@Valid
38+
@RequestBody
39+
List<com.ericsson.ei.controller.model.Subscription> subscription);
3840

3941
/**
4042
* Modify an existing Subscription.
4143
*
4244
*/
4345
@RequestMapping(value = "", method = RequestMethod.PUT)
4446
public ResponseEntity<com.ericsson.ei.controller.model.SubscriptionResponse> updateSubscriptions(
45-
@javax.validation.Valid
46-
@org.springframework.web.bind.annotation.RequestBody
47-
com.ericsson.ei.controller.model.Subscription subscription);
47+
@Valid
48+
@RequestBody
49+
List<com.ericsson.ei.controller.model.Subscription> subscription);
4850

4951
/**
5052
* Returns the subscription rules for given subscription name.

src/main/java/com/ericsson/ei/controller/SubscriptionControllerImpl.java

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package com.ericsson.ei.controller;
1818

19+
import java.time.Instant;
1920
import java.util.ArrayList;
2021
import java.util.List;
2122

@@ -54,33 +55,38 @@ public class SubscriptionControllerImpl implements SubscriptionController {
5455
@Override
5556
@CrossOrigin
5657
@ApiOperation(value = "Creates the subscription")
57-
public ResponseEntity<SubscriptionResponse> createSubscription(@RequestBody Subscription subscription) {
58+
public ResponseEntity<SubscriptionResponse> createSubscription(@RequestBody List<Subscription> subscriptions) {
59+
ResponseEntity<SubscriptionResponse> subResponse = null;
5860
SubscriptionResponse subscriptionResponse = new SubscriptionResponse();
59-
60-
try {
61-
subscriptionValidator.validateSubscription(subscription);
62-
} catch (SubscriptionValidationException e) {
63-
String msg = "Validation of Subscription parameters on:" + subscription.getSubscriptionName()
64-
+ " failed! Error: " + e.getMessage();
65-
LOG.error(msg);
66-
subscriptionResponse.setMsg(msg);
67-
subscriptionResponse.setStatusCode(HttpStatus.PRECONDITION_FAILED.value());
68-
return new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.PRECONDITION_FAILED);
61+
for (Subscription subscription : subscriptions){
62+
subResponse = null;
63+
try {
64+
subscription.setCreated(Instant.now().toEpochMilli());
65+
subscriptionValidator.validateSubscription(subscription);
66+
} catch (SubscriptionValidationException e) {
67+
String msg = "Validation of Subscription parameters on:" + subscription.getSubscriptionName()
68+
+ " failed! Error: " + e.getMessage();
69+
LOG.error(msg);
70+
subscriptionResponse.setMsg(msg);
71+
subscriptionResponse.setStatusCode(HttpStatus.PRECONDITION_FAILED.value());
72+
subResponse = new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.PRECONDITION_FAILED);
73+
}
74+
75+
if (!subscriptionService.doSubscriptionExist(subscription.getSubscriptionName())) {
76+
subscriptionService.addSubscription(subscription);
77+
LOG.info("Subscription :" + subscription.getSubscriptionName() + " Inserted Successfully");
78+
subscriptionResponse.setMsg("Inserted Successfully");
79+
subscriptionResponse.setStatusCode(HttpStatus.OK.value());
80+
subResponse = new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.OK);
81+
82+
} else {
83+
LOG.error("Subscription :" + subscription.getSubscriptionName() + " already exists");
84+
subscriptionResponse.setMsg("Subscription already exists");
85+
subscriptionResponse.setStatusCode(HttpStatus.BAD_REQUEST.value());
86+
subResponse = new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.BAD_REQUEST);
87+
}
6988
}
70-
71-
if (!subscriptionService.doSubscriptionExist(subscription.getSubscriptionName())) {
72-
subscriptionService.addSubscription(subscription);
73-
LOG.info("Subscription :" + subscription.getSubscriptionName() + " Inserted Successfully");
74-
subscriptionResponse.setMsg("Inserted Successfully");
75-
subscriptionResponse.setStatusCode(HttpStatus.OK.value());
76-
return new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.OK);
77-
} else {
78-
LOG.error("Subscription :" + subscription.getSubscriptionName() + " already exists");
79-
subscriptionResponse.setMsg("Subscription already exists");
80-
subscriptionResponse.setStatusCode(HttpStatus.BAD_REQUEST.value());
81-
return new ResponseEntity<SubscriptionResponse>(subscriptionResponse, HttpStatus.BAD_REQUEST);
82-
}
83-
89+
return subResponse;
8490
}
8591

8692
@Override
@@ -105,12 +111,14 @@ public ResponseEntity<List<Subscription>> getSubscriptionById(@PathVariable Stri
105111

106112
// @CrossOrigin
107113
@ApiOperation(value = "Update the existing subscription by the subscription name")
108-
public ResponseEntity<SubscriptionResponse> updateSubscriptions(@RequestBody Subscription subscription) {
114+
public ResponseEntity<SubscriptionResponse> updateSubscriptions(@RequestBody List<Subscription> subscriptions) {
115+
Subscription subscription = subscriptions.get(0);
109116
String subscriptionName = subscription.getSubscriptionName();
110117
LOG.info("Subscription :" + subscriptionName + " update started");
111118
SubscriptionResponse subscriptionResponse = new SubscriptionResponse();
112119

113120
try {
121+
subscription.setCreated(Instant.now().toEpochMilli());
114122
subscriptionValidator.validateSubscription(subscription);
115123
} catch (SubscriptionValidationException e) {
116124
String msg = "Validation of Subscription parameters on:" + subscription.getSubscriptionName()

src/main/java/com/ericsson/ei/controller/model/Subscription.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class Subscription {
3131
@JsonProperty("aggregationtype")
3232
private String aggregationtype;
3333
@JsonProperty("created")
34-
private String created;
34+
private Object created;
3535
@JsonProperty("notificationMessage")
3636
private String notificationMessage;
3737
@JsonProperty("notificationMeta")
@@ -58,12 +58,12 @@ public void setAggregationtype(String aggregationtype) {
5858
}
5959

6060
@JsonProperty("created")
61-
public String getCreated() {
61+
public Object getCreated() {
6262
return created;
6363
}
6464

6565
@JsonProperty("created")
66-
public void setCreated(String created) {
66+
public void setCreated(Object created) {
6767
this.created = created;
6868
}
6969

src/main/resources/public/raml/common-schema.raml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ subscription: |
99
"type":"string"
1010
},
1111
"created":{
12-
"type":"string"
12+
"type":"long"
1313
},
1414
"notificationMessage":{
1515
"type":"string"
@@ -61,7 +61,7 @@ subscriptionList: |
6161
"type":"string"
6262
},
6363
"created":{
64-
"type":"string"
64+
"type":"long"
6565
},
6666
"notificationMessage":{
6767
"type":"string"

src/main/resources/public/raml/subscription.raml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
description: Takes the subscription rules, the name for subscription and the user name of the person registering this subscription and saves the subscription in subscription database. The name needs to be unique.
1414
body:
1515
application/json:
16-
schema: subscription
16+
schema: subscriptionList
1717

1818
put:
1919
description: Modify an existing Subscription.
2020
body:
2121
application/json:
22-
schema: subscription
22+
schema: subscriptionList
2323
responses:
2424
200:
2525
body:

src/test/java/com/ericsson/ei/subscription/SubscriptionRestAPITest.java

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ public class SubscriptionRestAPITest {
5353
@Autowired
5454
private MockMvc mockMvc;
5555
static JSONArray jsonArray = null;
56-
private static final String subscriptionJsonPath = "src/test/resources/subscription.json";
56+
static JSONArray jsonArrayMulti = null;
57+
private static final String subscriptionJsonPath = "src/test/resources/subscription_single.json";
58+
private static final String multisubscriptionJsonPath = "src/test/resources/subscription_multi.json";
5759
ObjectMapper mapper = new ObjectMapper();
5860
@MockBean
5961
private ISubscriptionService subscriptionService;
@@ -62,6 +64,9 @@ public class SubscriptionRestAPITest {
6264
public static void setMongoDB() throws IOException, JSONException {
6365
String readFileToString = FileUtils.readFileToString(new File(subscriptionJsonPath), "UTF-8");
6466
jsonArray = new JSONArray(readFileToString);
67+
68+
String readFileToStringMulti = FileUtils.readFileToString(new File(multisubscriptionJsonPath), "UTF-8");
69+
jsonArrayMulti = new JSONArray(readFileToStringMulti);
6570
}
6671

6772
@Test
@@ -70,7 +75,7 @@ public void addSubscription() throws Exception {
7075
Mockito.when(subscriptionService.addSubscription(Mockito.any(Subscription.class))).thenReturn(false);
7176
// Send subscription as body to /subscriptions
7277
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/subscriptions").accept(MediaType.APPLICATION_JSON)
73-
.content(jsonArray.getJSONObject(0).toString()).contentType(MediaType.APPLICATION_JSON);
78+
.content(jsonArray.toString()).contentType(MediaType.APPLICATION_JSON);
7479

7580
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
7681

@@ -79,15 +84,32 @@ public void addSubscription() throws Exception {
7984
assertEquals(HttpStatus.OK.value(), result.getResponse().getStatus());
8085
assertEquals("Inserted Successfully", subscriptionResponse.getMsg());
8186
}
82-
87+
88+
89+
@Test
90+
public void addSubscriptionMulti() throws Exception {
91+
Mockito.when(subscriptionService.doSubscriptionExist(Mockito.anyString())).thenReturn(false);
92+
Mockito.when(subscriptionService.addSubscription(Mockito.any(Subscription.class))).thenReturn(false);
93+
// Send subscription as body to /subscriptions
94+
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/subscriptions").accept(MediaType.APPLICATION_JSON)
95+
.content(jsonArrayMulti.toString()).contentType(MediaType.APPLICATION_JSON);
96+
97+
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
98+
99+
SubscriptionResponse subscriptionResponse = mapper
100+
.readValue(result.getResponse().getContentAsString().toString(), SubscriptionResponse.class);
101+
assertEquals(HttpStatus.OK.value(), result.getResponse().getStatus());
102+
assertEquals("Inserted Successfully", subscriptionResponse.getMsg());
103+
}
104+
83105
@Test
84106
public void updateSubscription() throws Exception {
85107
Mockito.when(subscriptionService.doSubscriptionExist(Mockito.anyString())).thenReturn(true);
86108
Mockito.when(subscriptionService.modifySubscription(Mockito.any(Subscription.class), Mockito.anyString()))
87109
.thenReturn(false);
88110
// Send subscription as body to /subscriptions
89111
RequestBuilder requestBuilder = MockMvcRequestBuilders.put("/subscriptions")
90-
.accept(MediaType.APPLICATION_JSON).content(jsonArray.getJSONObject(0).toString())
112+
.accept(MediaType.APPLICATION_JSON).content(jsonArray.toString())
91113
.contentType(MediaType.APPLICATION_JSON);
92114

93115
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
@@ -97,13 +119,32 @@ public void updateSubscription() throws Exception {
97119
assertEquals(HttpStatus.OK.value(), result.getResponse().getStatus());
98120
assertEquals("Updated Successfully", subscriptionResponse.getMsg());
99121
}
122+
123+
124+
@Test
125+
public void updateSubscriptionMulti() throws Exception {
126+
Mockito.when(subscriptionService.doSubscriptionExist(Mockito.anyString())).thenReturn(true);
127+
Mockito.when(subscriptionService.modifySubscription(Mockito.any(Subscription.class), Mockito.anyString()))
128+
.thenReturn(false);
129+
// Send subscription as body to /subscriptions
130+
RequestBuilder requestBuilder = MockMvcRequestBuilders.put("/subscriptions")
131+
.accept(MediaType.APPLICATION_JSON).content(jsonArrayMulti.toString())
132+
.contentType(MediaType.APPLICATION_JSON);
133+
134+
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
135+
136+
SubscriptionResponse subscriptionResponse = mapper
137+
.readValue(result.getResponse().getContentAsString().toString(), SubscriptionResponse.class);
138+
assertEquals(HttpStatus.OK.value(), result.getResponse().getStatus());
139+
assertEquals("Updated Successfully", subscriptionResponse.getMsg());
140+
}
100141

101142
@Test
102143
public void updateSubscriptionFailWhenSubscriptionDoNotExist() throws Exception {
103144
Mockito.when(subscriptionService.doSubscriptionExist(Mockito.anyString())).thenReturn(false);
104145
// Send subscription as body to /subscriptions
105146
RequestBuilder requestBuilder = MockMvcRequestBuilders.put("/subscriptions")
106-
.accept(MediaType.APPLICATION_JSON).content(jsonArray.getJSONObject(0).toString())
147+
.accept(MediaType.APPLICATION_JSON).content(jsonArray.toString())
107148
.contentType(MediaType.APPLICATION_JSON);
108149

109150
MvcResult result = mockMvc.perform(requestBuilder).andReturn();

src/test/java/com/ericsson/ei/subscription/SubscriptionServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class SubscriptionServiceTest {
6363

6464
ObjectMapper mapper = new ObjectMapper();
6565

66-
private static final String subscriptionJsonPath = "src/test/resources/subscription.json";
66+
private static final String subscriptionJsonPath = "src/test/resources/subscription_single.json";
6767

6868
static JSONArray jsonArray = null;
6969
static MongoClient mongoClient = null;

src/test/resources/subscription.json renamed to src/test/resources/subscription_multi.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"type" : "ARTIFACT_1"
2929
}
3030
],
31-
"subscriptionName" : "Subscription_Test"
31+
"subscriptionName" : "Subscription_Test_Multi"
3232
},
3333
{
3434
"created" : "2017-07-27",
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[
2+
{
3+
"created" : "2017-07-26",
4+
"notificationMessage" : "sample@ericsson.com",
5+
"notificationMeta" : "http://127.0.0.1:3000/ei/test_subscription_rest",
6+
"notificationType" : "REST_POST",
7+
"repeat" : false,
8+
"requirements" : [
9+
{
10+
"conditions" : [
11+
{
12+
"jmespath" : "gav.groupId=='com.mycompany.myproduct'"
13+
},
14+
{
15+
"jmespath" : "testCaseExecutions[?testCase.conclusion == 'SUCCESSFUL' && testCase.id=='TC5']"
16+
}
17+
],
18+
"type" : "ARTIFACT_1"
19+
},
20+
{
21+
"conditions" : [
22+
{
23+
"jmespath" : "gav.groupId=='com.mycompany.myproduct'"
24+
},
25+
{
26+
"jmespath" : "testCaseExecutions[?testCaseStartedEventId == '13af4a14-f951-4346-a1ba-624c79f10e98']"
27+
}
28+
],
29+
"type" : "ARTIFACT_1"
30+
}
31+
],
32+
"subscriptionName" : "Subscription_Test"
33+
}
34+
]

0 commit comments

Comments
 (0)