Skip to content

Commit a3f47f0

Browse files
committed
feature: api-165 add delete endpoint
1 parent 0b7c2a5 commit a3f47f0

File tree

10 files changed

+112
-79
lines changed

10 files changed

+112
-79
lines changed

src/main/java/uk/gov/hmcts/cp/controllers/SubscriptionController.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.http.HttpStatus;
56
import org.springframework.http.ResponseEntity;
67
import org.springframework.web.bind.annotation.RestController;
78
import uk.gov.hmcts.cp.openapi.api.SubscriptionApi;
@@ -23,14 +24,20 @@ public ResponseEntity<ClientSubscription> createClientSubscription(final ClientS
2324
log.info("createClientSubscription clientId:{}", "TODO");
2425
final ClientSubscription response = subscriptionService.saveSubscription(request);
2526
log.info("createClientSubscription created subscription:{}", response.getClientSubscriptionId());
26-
return ResponseEntity.ok(response);
27+
return new ResponseEntity<>(response, HttpStatus.CREATED);
2728
}
2829

2930
@Override
3031
public ResponseEntity<ClientSubscription> getClientSubscription(final UUID clientSubscriptionId) {
31-
log.info("getClientSubscription clientId:{}", "TODO");
32+
log.info("getClientSubscription clientSubscriptionId:{} clientId:{}", clientSubscriptionId, "TODO");
3233
final ClientSubscription response = subscriptionService.getSubscription(clientSubscriptionId);
33-
log.info("createClientSubscription returning subscription:{}", response.getClientSubscriptionId());
34-
return ResponseEntity.ok(response);
34+
return new ResponseEntity<>(response, HttpStatus.OK);
35+
}
36+
37+
@Override
38+
public ResponseEntity<Void> deleteClientSubscription(final UUID clientSubscriptionId) {
39+
log.info("deleteClientSubscription clientSubscriptionId:{} clientId:{}", clientSubscriptionId, "TODO");
40+
subscriptionService.deleteSubscription(clientSubscriptionId);
41+
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
3542
}
3643
}

src/main/java/uk/gov/hmcts/cp/services/SubscriptionService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,8 @@ public ClientSubscription getSubscription(final UUID clientSubscriptionId) {
2828
final ClientSubscriptionEntity entity = subscriptionRepository.getReferenceById(clientSubscriptionId);
2929
return mapper.mapEntityToResponse(entity);
3030
}
31+
32+
public void deleteSubscription(final UUID clientSubscriptionId) {
33+
subscriptionRepository.deleteById(clientSubscriptionId);
34+
}
3135
}

src/test/java/uk/gov/hmcts/cp/controllers/SubscriptionControllerTest.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import org.mockito.InjectMocks;
66
import org.mockito.Mock;
77
import org.mockito.junit.jupiter.MockitoExtension;
8-
import org.springframework.http.ResponseEntity;
98
import uk.gov.hmcts.cp.openapi.model.ClientSubscription;
109
import uk.gov.hmcts.cp.openapi.model.ClientSubscriptionRequest;
1110
import uk.gov.hmcts.cp.services.SubscriptionService;
@@ -27,22 +26,31 @@ class SubscriptionControllerTest {
2726
SubscriptionController subscriptionController;
2827

2928
ClientSubscriptionRequest request = ClientSubscriptionRequest.builder().build();
29+
UUID subscriptionId = UUID.randomUUID();
3030

3131
@Test
3232
void create_controller_should_call_service() {
33-
UUID subscriptionId = UUID.randomUUID();
3433
ClientSubscription response = ClientSubscription.builder().clientSubscriptionId(subscriptionId).build();
3534
when(subscriptionService.saveSubscription(any())).thenReturn(response);
36-
subscriptionController.createClientSubscription(request);
35+
var result = subscriptionController.createClientSubscription(request);
3736
verify(subscriptionService).saveSubscription(request);
37+
assertThat(result.getStatusCode().value()).isEqualTo(201);
38+
assertThat(result.getBody()).isEqualTo(response);
3839
}
3940

4041
@Test
4142
void get_controller_should_call_service() {
42-
UUID subscriptionId = UUID.randomUUID();
4343
ClientSubscription response = ClientSubscription.builder().clientSubscriptionId(subscriptionId).build();
4444
when(subscriptionService.getSubscription(subscriptionId)).thenReturn(response);
45-
ResponseEntity<ClientSubscription> result = subscriptionController.getClientSubscription(subscriptionId);
45+
var result = subscriptionController.getClientSubscription(subscriptionId);
46+
assertThat(result.getStatusCode().value()).isEqualTo(200);
4647
assertThat(result.getBody()).isEqualTo(response);
4748
}
49+
50+
@Test
51+
void delete_controller_should_call_service() {
52+
var result = subscriptionController.deleteClientSubscription(subscriptionId);
53+
verify(subscriptionService).deleteSubscription(subscriptionId);
54+
assertThat(result.getStatusCode().value()).isEqualTo(204);
55+
}
4856
}

src/test/java/uk/gov/hmcts/cp/integration/IntegrationTestBase.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@
1010
import uk.gov.hmcts.cp.config.TestContainersInitialise;
1111
import uk.gov.hmcts.cp.entities.ClientSubscriptionEntity;
1212
import uk.gov.hmcts.cp.model.EntityEventType;
13+
import uk.gov.hmcts.cp.openapi.model.ClientSubscriptionRequest;
14+
import uk.gov.hmcts.cp.openapi.model.NotificationEndpoint;
1315
import uk.gov.hmcts.cp.repositories.SubscriptionRepository;
1416

1517
import java.time.OffsetDateTime;
1618
import java.util.List;
1719

20+
import static uk.gov.hmcts.cp.openapi.model.EventType.CUSTODIAL_RESULT;
21+
import static uk.gov.hmcts.cp.openapi.model.EventType.PCR;
22+
1823
@SpringBootTest
1924
@ContextConfiguration(initializers = TestContainersInitialise.class)
2025
@AutoConfigureMockMvc
@@ -25,13 +30,27 @@ public abstract class IntegrationTestBase {
2530
protected MockMvc mockMvc;
2631

2732
@Autowired
28-
SubscriptionRepository subscriptionRepository;
33+
protected SubscriptionRepository subscriptionRepository;
34+
35+
NotificationEndpoint notificationEndpoint = NotificationEndpoint.builder()
36+
.webhookUrl("https://my-callback-url")
37+
.build();
38+
ClientSubscriptionRequest request = ClientSubscriptionRequest.builder()
39+
.notificationEndpoint(notificationEndpoint)
40+
.eventTypes(List.of(PCR, CUSTODIAL_RESULT))
41+
.build();
42+
43+
protected void clearAllTables() {
44+
log.info("Clearing all tables");
45+
subscriptionRepository.deleteAll();
46+
}
2947

3048
protected ClientSubscriptionEntity insertSubscription(String notificationUri, List<EntityEventType> entityEventTypes) {
3149
ClientSubscriptionEntity subscription = ClientSubscriptionEntity.builder()
3250
.eventTypes(entityEventTypes)
3351
.notificationEndpoint(notificationUri)
3452
.createdAt(OffsetDateTime.now())
53+
.updatedAt(OffsetDateTime.now())
3554
.build();
3655
ClientSubscriptionEntity saved = subscriptionRepository.save(subscription);
3756
log.info("Inserted subscription:{}", saved.getId());
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package uk.gov.hmcts.cp.integration;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
import org.springframework.http.MediaType;
6+
import org.springframework.transaction.annotation.Transactional;
7+
import uk.gov.hmcts.cp.entities.ClientSubscriptionEntity;
8+
import uk.gov.hmcts.cp.model.EntityEventType;
9+
10+
import java.util.List;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
14+
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
15+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
16+
17+
class SubscriptionDeleteControllerIntegrationTest extends IntegrationTestBase {
18+
19+
@BeforeEach
20+
void beforeEach() {
21+
clearAllTables();
22+
}
23+
24+
@Test
25+
@Transactional
26+
void delete_client_subscription_should_delete_subscription() throws Exception {
27+
ClientSubscriptionEntity entity = insertSubscription("https://example.com/event", List.of(EntityEventType.PCR));
28+
mockMvc.perform(delete("/client-subscriptions/{id}", entity.getId())
29+
.contentType(MediaType.APPLICATION_JSON)
30+
.header("client-id-todo", "1234"))
31+
.andDo(print())
32+
.andExpect(status().isNoContent());
33+
assertThat(subscriptionRepository.findAll()).hasSize(0);
34+
}
35+
}

src/test/java/uk/gov/hmcts/cp/integration/SubscriptionGetControllerIntegrationTest.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package uk.gov.hmcts.cp.integration;
22

3+
import org.junit.jupiter.api.BeforeEach;
34
import org.junit.jupiter.api.Test;
45
import org.springframework.beans.factory.annotation.Autowired;
56
import org.springframework.transaction.annotation.Transactional;
@@ -22,21 +23,15 @@
2223

2324
class SubscriptionGetControllerIntegrationTest extends IntegrationTestBase {
2425

25-
@Autowired
26-
SubscriptionRepository subscriptionRepository;
27-
28-
NotificationEndpoint notificationEndpoint = NotificationEndpoint.builder()
29-
.webhookUrl("https://my-callback-url")
30-
.build();
31-
ClientSubscriptionRequest request = ClientSubscriptionRequest.builder()
32-
.notificationEndpoint(notificationEndpoint)
33-
.eventTypes(List.of(PCR, CUSTODIAL_RESULT))
34-
.build();
26+
@BeforeEach
27+
void beforeEach() {
28+
clearAllTables();
29+
}
3530

3631
@Test
3732
@Transactional
3833
void get_subscription_should_return_expected() throws Exception {
39-
ClientSubscriptionEntity entity = insertSubscription("http://example.com/event", List.of(EntityEventType.PCR));
34+
ClientSubscriptionEntity entity = insertSubscription("https://example.com/event", List.of(EntityEventType.PCR));
4035
mockMvc.perform(get("/client-subscriptions/{id}", entity.getId())
4136
.header("client-id-todo", "1234"))
4237
.andDo(print())

src/test/java/uk/gov/hmcts/cp/integration/SubscriptionSaveControllerIntegrationTest.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package uk.gov.hmcts.cp.integration;
22

3+
import org.junit.jupiter.api.BeforeEach;
34
import org.junit.jupiter.api.Test;
4-
import org.springframework.beans.factory.annotation.Autowired;
55
import org.springframework.http.MediaType;
66
import org.springframework.transaction.annotation.Transactional;
77
import tools.jackson.databind.ObjectMapper;
88
import uk.gov.hmcts.cp.entities.ClientSubscriptionEntity;
99
import uk.gov.hmcts.cp.model.EntityEventType;
10-
import uk.gov.hmcts.cp.openapi.model.ClientSubscriptionRequest;
11-
import uk.gov.hmcts.cp.openapi.model.NotificationEndpoint;
12-
import uk.gov.hmcts.cp.repositories.SubscriptionRepository;
1310

1411
import java.util.List;
1512

@@ -18,21 +15,13 @@
1815
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
1916
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
2017
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
21-
import static uk.gov.hmcts.cp.openapi.model.EventType.CUSTODIAL_RESULT;
22-
import static uk.gov.hmcts.cp.openapi.model.EventType.PCR;
2318

2419
class SubscriptionSaveControllerIntegrationTest extends IntegrationTestBase {
2520

26-
@Autowired
27-
SubscriptionRepository subscriptionRepository;
28-
29-
NotificationEndpoint notificationEndpoint = NotificationEndpoint.builder()
30-
.webhookUrl("https://my-callback-url")
31-
.build();
32-
ClientSubscriptionRequest request = ClientSubscriptionRequest.builder()
33-
.notificationEndpoint(notificationEndpoint)
34-
.eventTypes(List.of(PCR, CUSTODIAL_RESULT))
35-
.build();
21+
@BeforeEach
22+
void beforeEach() {
23+
clearAllTables();
24+
}
3625

3726
@Test
3827
@Transactional
@@ -43,7 +32,7 @@ void save_client_subscription_should_save_subscription() throws Exception {
4332
.header("client-id-todo", "1234")
4433
.content(body))
4534
.andDo(print())
46-
.andExpect(status().isOk())
35+
.andExpect(status().isCreated())
4736
.andExpect(jsonPath("$.clientSubscriptionId").exists())
4837
.andExpect(jsonPath("$.eventTypes.[0]").value("CUSTODIAL_RESULT"))
4938
.andExpect(jsonPath("$.eventTypes.[1]").value("PCR"))

src/test/java/uk/gov/hmcts/cp/repositories/RepositoryTestBase.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/test/java/uk/gov/hmcts/cp/repositories/SubscriptionRepositoryTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
import org.junit.jupiter.api.Test;
55
import org.springframework.transaction.annotation.Transactional;
66
import uk.gov.hmcts.cp.entities.ClientSubscriptionEntity;
7+
import uk.gov.hmcts.cp.integration.IntegrationTestBase;
78

89
import java.util.List;
910

1011
import static org.assertj.core.api.Assertions.assertThat;
1112
import static uk.gov.hmcts.cp.model.EntityEventType.CUSTODIAL_RESULT;
1213
import static uk.gov.hmcts.cp.model.EntityEventType.PCR;
1314

14-
class SubscriptionRepositoryTest extends RepositoryTestBase {
15+
class SubscriptionRepositoryTest extends IntegrationTestBase {
1516

1617
@BeforeEach
1718
void beforeEach() {
@@ -28,4 +29,12 @@ void subscription_should_save_and_read_ok() {
2829
assertThat(found.getNotificationEndpoint()).isEqualTo("https://example.com/notify");
2930
assertThat(found.getCreatedAt()).isNotNull();
3031
}
32+
33+
@Transactional
34+
@Test
35+
void subscription_should_delete_ok() {
36+
ClientSubscriptionEntity saved = insertSubscription("https://example.com/notify", List.of(CUSTODIAL_RESULT, PCR));
37+
subscriptionRepository.deleteById(saved.getId());
38+
assertThat(subscriptionRepository.findAll()).hasSize(0);
39+
}
3140
}

src/test/java/uk/gov/hmcts/cp/services/SubscriptionServiceTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class SubscriptionServiceTest {
3333
ClientSubscriptionEntity requestEntity = ClientSubscriptionEntity.builder().build();
3434
ClientSubscriptionEntity savedEntity = ClientSubscriptionEntity.builder().build();
3535
ClientSubscription response = ClientSubscription.builder().build();
36+
UUID subscriptionId = UUID.fromString("2ca16eb5-3998-4bb7-adce-4bb9b3b7223c");
3637

3738
@Test
3839
void request_should_save_entity() {
@@ -49,12 +50,17 @@ void request_should_save_entity() {
4950

5051
@Test
5152
void request_should_get_entity() {
52-
UUID subscriptionId = UUID.fromString("2ca16eb5-3998-4bb7-adce-4bb9b3b7223c");
5353
when(subscriptionRepository.getReferenceById(subscriptionId)).thenReturn(savedEntity);
5454
when(mapper.mapEntityToResponse(savedEntity)).thenReturn(response);
5555

5656
ClientSubscription result = subscriptionService.getSubscription(subscriptionId);
5757

5858
assertThat(result).isEqualTo(response);
5959
}
60+
61+
@Test
62+
void delete_should_delete_entity() {
63+
subscriptionService.deleteSubscription(subscriptionId);
64+
verify(subscriptionRepository).deleteById(subscriptionId);
65+
}
6066
}

0 commit comments

Comments
 (0)