|
26 | 26 | import uk.gov.companieshouse.orders.api.service.CheckoutService; |
27 | 27 | import uk.gov.companieshouse.orders.api.util.ResultCaptor; |
28 | 28 |
|
| 29 | +import java.time.LocalDateTime; |
29 | 30 | import java.util.Arrays; |
30 | 31 | import java.util.Optional; |
31 | 32 |
|
| 33 | +import static org.hamcrest.MatcherAssert.assertThat; |
| 34 | +import static org.hamcrest.core.Is.is; |
32 | 35 | import static org.junit.Assert.*; |
33 | 36 | import static org.mockito.ArgumentMatchers.any; |
34 | 37 | import static org.mockito.Mockito.doAnswer; |
@@ -306,4 +309,49 @@ public void patchBasketPaymentDetailsDoesNotClearBasketStatusNotPaid() throws Ex |
306 | 309 | final Optional<Basket> retrievedBasket = basketRepository.findById(ERIC_IDENTITY_VALUE); |
307 | 310 | assertFalse(retrievedBasket.get().getData().getItems().isEmpty()); |
308 | 311 | } |
| 312 | + |
| 313 | + @Test |
| 314 | + @DisplayName("Patch basket payment details updates updated_at field") |
| 315 | + public void patchBasketPaymentDetailsUpdatesUpdatedAt() throws Exception { |
| 316 | + final LocalDateTime intervalStart = LocalDateTime.now(); |
| 317 | + |
| 318 | + Basket basket = new Basket(); |
| 319 | + basket.setId(ERIC_IDENTITY_VALUE); |
| 320 | + basket.setCreatedAt(intervalStart); |
| 321 | + basket.setUpdatedAt(intervalStart); |
| 322 | + BasketItem basketItem = new BasketItem(); |
| 323 | + basketItem.setItemUri(ITEM_URI); |
| 324 | + basket.getData().getItems().add(basketItem); |
| 325 | + basketRepository.save(basket); |
| 326 | + |
| 327 | + BasketPaymentRequestDTO basketPaymentRequestDTO = new BasketPaymentRequestDTO(); |
| 328 | + basketPaymentRequestDTO.setPaidAt("paid-at"); |
| 329 | + basketPaymentRequestDTO.setPaymentReference("reference"); |
| 330 | + basketPaymentRequestDTO.setStatus(PaymentStatus.PAID); |
| 331 | + |
| 332 | + mockMvc.perform(patch("/basket/payment/1234") |
| 333 | + .header(REQUEST_ID_HEADER_NAME, TOKEN_REQUEST_ID_VALUE) |
| 334 | + .header(ERIC_IDENTITY_HEADER_NAME, ERIC_IDENTITY_VALUE) |
| 335 | + .contentType(MediaType.APPLICATION_JSON) |
| 336 | + .content(mapper.writeValueAsString(basketPaymentRequestDTO))) |
| 337 | + .andExpect(status().isOk()); |
| 338 | + |
| 339 | + final LocalDateTime intervalEnd = LocalDateTime.now(); |
| 340 | + |
| 341 | + final Optional<Basket> retrievedBasket = basketRepository.findById(ERIC_IDENTITY_VALUE); |
| 342 | + verifyUpdatedAtTimestampWithinExecutionInterval(retrievedBasket.get(), intervalStart, intervalEnd); |
| 343 | + } |
| 344 | + |
| 345 | + private void verifyUpdatedAtTimestampWithinExecutionInterval(final Basket itemUpdated, |
| 346 | + final LocalDateTime intervalStart, |
| 347 | + final LocalDateTime intervalEnd) { |
| 348 | + |
| 349 | + assertThat(itemUpdated.getUpdatedAt().isAfter(itemUpdated.getCreatedAt()) || |
| 350 | + itemUpdated.getUpdatedAt().isEqual(itemUpdated.getCreatedAt()), is(true)); |
| 351 | + |
| 352 | + assertThat(itemUpdated.getUpdatedAt().isAfter(intervalStart) || |
| 353 | + itemUpdated.getUpdatedAt().isEqual(intervalStart), is(true)); |
| 354 | + assertThat(itemUpdated.getUpdatedAt().isBefore(intervalEnd) || |
| 355 | + itemUpdated.getUpdatedAt().isEqual(intervalEnd), is(true)); |
| 356 | + } |
309 | 357 | } |
0 commit comments