Skip to content

Commit e9ac7f2

Browse files
committed
feature: amp-151 add get endpoint and tidy ups
* Add get by subscription id * Pull in v1.0.0 api * Default updatedAt with createdAt * Make event_types 128 and notification endpoint 2048 in database table
1 parent d8e1ce7 commit e9ac7f2

File tree

11 files changed

+92
-16
lines changed

11 files changed

+92
-16
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ apply {
3030
}
3131

3232
dependencies {
33-
implementation(group: 'uk.gov.hmcts.cp', name: 'api-cp-crime-hearing-case-event-subscription', version: '0.1.0-724f10f')
33+
implementation(group: 'uk.gov.hmcts.cp', name: 'api-cp-crime-hearing-case-event-subscription', version: '1.0.0')
3434

3535
// This is proving to be a real puzzle. This is actually included in the api published pom
3636
// ( though with scope of "runtime" )

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import uk.gov.hmcts.cp.openapi.model.ClientSubscriptionRequest;
1010
import uk.gov.hmcts.cp.services.SubscriptionService;
1111

12+
import java.util.UUID;
13+
1214
@RestController
1315
@RequiredArgsConstructor
1416
@Slf4j
@@ -23,4 +25,12 @@ public ResponseEntity<ClientSubscription> createClientSubscription(final ClientS
2325
log.info("createClientSubscription created subscription:{}", response.getClientSubscriptionId());
2426
return ResponseEntity.ok(response);
2527
}
28+
29+
@Override
30+
public ResponseEntity<ClientSubscription> getClientSubscription(final UUID clientSubscriptionId) {
31+
log.info("getClientSubscription clientId:{}", "TODO");
32+
final ClientSubscription response = subscriptionService.getSubscription(clientSubscriptionId);
33+
log.info("createClientSubscription returning subscription:{}", response.getClientSubscriptionId());
34+
return ResponseEntity.ok(response);
35+
}
2636
}

src/main/java/uk/gov/hmcts/cp/mappers/SubscriptionMapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ public interface SubscriptionMapper {
2121

2222
@Mapping(source = "request.eventTypes", target = "eventTypes", qualifiedByName = "sortedEventTypes")
2323
@Mapping(target = "createdAt", expression = "java(java.time.OffsetDateTime.now())")
24+
@Mapping(target = "updatedAt", expression = "java(java.time.OffsetDateTime.now())")
2425
ClientSubscriptionEntity mapRequestToEntity(ClientSubscriptionRequest request);
2526

2627
@Mapping(source = "id", target = "clientSubscriptionId")
2728
ClientSubscription mapEntityToResponse(ClientSubscriptionEntity entity);
2829

2930
@Named("sortedEventTypes")
3031
static List<EntityEventType> sortedEventTypes(final List<EventType> events) {
31-
List<String> sorted = events.stream().map(e -> e.name()).sorted().collect(toList());
32+
final List<String> sorted = events.stream().map(e -> e.name()).sorted().collect(toList());
3233
return sorted.stream().map(e -> EntityEventType.valueOf(e)).toList();
3334
}
3435

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import uk.gov.hmcts.cp.openapi.model.ClientSubscriptionRequest;
1010
import uk.gov.hmcts.cp.repositories.SubscriptionRepository;
1111

12+
import java.util.UUID;
13+
1214
@Service
1315
@RequiredArgsConstructor
1416
@Slf4j
@@ -21,4 +23,9 @@ public ClientSubscription saveSubscription(final ClientSubscriptionRequest reque
2123
final ClientSubscriptionEntity entity = mapper.mapRequestToEntity(request);
2224
return mapper.mapEntityToResponse(subscriptionRepository.save(entity));
2325
}
26+
27+
public ClientSubscription getSubscription(final UUID clientSubscriptionId) {
28+
final ClientSubscriptionEntity entity = subscriptionRepository.getReferenceById(clientSubscriptionId);
29+
return mapper.mapEntityToResponse(entity);
30+
}
2431
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
create table client_subscription (
22
id uuid primary key not null,
3-
event_types varchar(2048) not null,
4-
notification_endpoint text not null,
3+
event_types varchar(128) not null,
4+
notification_endpoint varchar(2048) not null,
55
created_at timestamp not null,
6-
updated_at timestamp
6+
updated_at timestamp not null
77
);

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import org.mockito.InjectMocks;
66
import org.mockito.Mock;
77
import org.mockito.junit.jupiter.MockitoExtension;
8+
import org.springframework.http.ResponseEntity;
89
import uk.gov.hmcts.cp.openapi.model.ClientSubscription;
910
import uk.gov.hmcts.cp.openapi.model.ClientSubscriptionRequest;
1011
import uk.gov.hmcts.cp.services.SubscriptionService;
1112

1213
import java.util.UUID;
1314

15+
import static org.assertj.core.api.Assertions.assertThat;
1416
import static org.mockito.ArgumentMatchers.any;
1517
import static org.mockito.Mockito.verify;
1618
import static org.mockito.Mockito.when;
@@ -28,10 +30,19 @@ class SubscriptionControllerTest {
2830

2931
@Test
3032
void create_controller_should_call_service() {
31-
UUID id = UUID.randomUUID();
32-
ClientSubscription response = ClientSubscription.builder().clientSubscriptionId(id).build();
33+
UUID subscriptionId = UUID.randomUUID();
34+
ClientSubscription response = ClientSubscription.builder().clientSubscriptionId(subscriptionId).build();
3335
when(subscriptionService.saveSubscription(any())).thenReturn(response);
3436
subscriptionController.createClientSubscription(request);
3537
verify(subscriptionService).saveSubscription(request);
3638
}
39+
40+
@Test
41+
void get_controller_should_call_service() {
42+
UUID subscriptionId = UUID.randomUUID();
43+
ClientSubscription response = ClientSubscription.builder().clientSubscriptionId(subscriptionId).build();
44+
when(subscriptionService.getSubscription(subscriptionId)).thenReturn(response);
45+
ResponseEntity<ClientSubscription> result = subscriptionController.getClientSubscription(subscriptionId);
46+
assertThat(result.getBody()).isEqualTo(response);
47+
}
3748
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,18 @@
22

33
import jakarta.annotation.Resource;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.beans.factory.annotation.Autowired;
56
import org.springframework.boot.test.context.SpringBootTest;
67
import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
78
import org.springframework.test.context.ContextConfiguration;
89
import org.springframework.test.web.servlet.MockMvc;
910
import uk.gov.hmcts.cp.config.TestContainersInitialise;
11+
import uk.gov.hmcts.cp.entities.ClientSubscriptionEntity;
12+
import uk.gov.hmcts.cp.model.EntityEventType;
13+
import uk.gov.hmcts.cp.repositories.SubscriptionRepository;
14+
15+
import java.time.OffsetDateTime;
16+
import java.util.List;
1017

1118
@SpringBootTest
1219
@ContextConfiguration(initializers = TestContainersInitialise.class)
@@ -16,4 +23,18 @@ public abstract class IntegrationTestBase {
1623

1724
@Resource
1825
protected MockMvc mockMvc;
26+
27+
@Autowired
28+
SubscriptionRepository subscriptionRepository;
29+
30+
protected ClientSubscriptionEntity insertSubscription(String notificationUri, List<EntityEventType> entityEventTypes) {
31+
ClientSubscriptionEntity subscription = ClientSubscriptionEntity.builder()
32+
.eventTypes(entityEventTypes)
33+
.notificationEndpoint(notificationUri)
34+
.createdAt(OffsetDateTime.now())
35+
.build();
36+
ClientSubscriptionEntity saved = subscriptionRepository.save(subscription);
37+
log.info("Inserted subscription:{}", saved.getId());
38+
return saved;
39+
}
1940
}

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.List;
1616

1717
import static org.assertj.core.api.Assertions.assertThat;
18+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
1819
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
1920
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
2021
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@@ -39,7 +40,7 @@ class SubscriptionControllerIntegrationTest extends IntegrationTestBase {
3940
@Transactional
4041
void save_client_subscription_should_save_subscription() throws Exception {
4142
String body = new ObjectMapper().writeValueAsString(request);
42-
mockMvc.perform(post("/clientSubscriptions")
43+
mockMvc.perform(post("/client-subscriptions")
4344
.contentType(MediaType.APPLICATION_JSON)
4445
.header("client-id-todo", "1234")
4546
.content(body))
@@ -52,6 +53,19 @@ void save_client_subscription_should_save_subscription() throws Exception {
5253
assertThatEventTypesAreSortedInDatabase();
5354
}
5455

56+
@Test
57+
@Transactional
58+
void get_subscription_should_return_expected() throws Exception {
59+
ClientSubscriptionEntity entity = insertSubscription("http://example.com/event", List.of(EntityEventType.PCR));
60+
mockMvc.perform(get("/client-subscriptions/{id}", entity.getId())
61+
.header("client-id-todo", "1234"))
62+
.andDo(print())
63+
.andExpect(status().isOk())
64+
.andExpect(jsonPath("$.clientSubscriptionId").value(entity.getId().toString()))
65+
.andExpect(jsonPath("$.eventTypes.[0]").value("PCR"))
66+
.andExpect(jsonPath("$.createdAt").exists());
67+
}
68+
5569
private void assertThatEventTypesAreSortedInDatabase() {
5670
List<ClientSubscriptionEntity> entities = subscriptionRepository.findAll();
5771
assertThat(entities).hasSize(1);

src/test/java/uk/gov/hmcts/cp/mappers/SubscriptionMapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void request_should_map_to_entity_with_sorted_types() {
4040
assertThat(entity.getNotificationEndpoint()).isEqualTo("https://example.com");
4141
assertThat(entity.getEventTypes().toString()).isEqualTo("[CUSTODIAL_RESULT, PCR]");
4242
assertThat(entity.getCreatedAt()).isNotNull();
43-
assertThat(entity.getUpdatedAt()).isNull();
43+
assertThat(entity.getUpdatedAt()).isNotNull();
4444
}
4545

4646
@Test

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@ void beforeEach() {
2121
@Transactional
2222
@Test
2323
void subscription_should_save_and_read_ok() {
24-
insertSubscription("https://example.com/notify", List.of(CUSTODIAL_RESULT, PCR));
25-
List<ClientSubscriptionEntity> subscriptions = subscriptionRepository.findAll();
26-
assertThat(subscriptions).hasSize(1);
27-
assertThat(subscriptions.get(0).getId()).isNotNull();
28-
assertThat(subscriptions.get(0).getEventTypes()).isEqualTo(List.of(CUSTODIAL_RESULT, PCR));
29-
assertThat(subscriptions.get(0).getNotificationEndpoint()).isEqualTo("https://example.com/notify");
30-
assertThat(subscriptions.get(0).getCreatedAt()).isNotNull();
24+
ClientSubscriptionEntity saved = insertSubscription("https://example.com/notify", List.of(CUSTODIAL_RESULT, PCR));
25+
ClientSubscriptionEntity found = subscriptionRepository.getReferenceById(saved.getId());
26+
assertThat(found.getId()).isEqualTo(saved.getId());
27+
assertThat(found.getEventTypes()).isEqualTo(List.of(CUSTODIAL_RESULT, PCR));
28+
assertThat(found.getNotificationEndpoint()).isEqualTo("https://example.com/notify");
29+
assertThat(found.getCreatedAt()).isNotNull();
3130
}
3231
}

0 commit comments

Comments
 (0)