Skip to content

Commit 16bc1f6

Browse files
authored
Merge pull request #13 from companieshouse/PCI-715-add-delivery-details-request
Modified request object for add delivery details
2 parents e5afad1 + 0d56de1 commit 16bc1f6

File tree

7 files changed

+98
-57
lines changed

7 files changed

+98
-57
lines changed
Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
package uk.gov.companieshouse.orders.api.dto;
22

3-
public class AddDeliveryDetailsRequestDTO extends DeliveryDetailsDTO {
3+
import com.fasterxml.jackson.annotation.JsonProperty;
44

5+
import javax.validation.Valid;
6+
import javax.validation.constraints.NotNull;
7+
8+
public class AddDeliveryDetailsRequestDTO {
9+
10+
@Valid
11+
@NotNull
12+
@JsonProperty("delivery_details")
13+
DeliveryDetailsDTO deliveryDetails;
14+
15+
public DeliveryDetailsDTO getDeliveryDetails() {
16+
return deliveryDetails;
17+
}
18+
19+
public void setDeliveryDetails(DeliveryDetailsDTO deliveryDetails) {
20+
this.deliveryDetails = deliveryDetails;
21+
}
522
}

src/main/java/uk/gov/companieshouse/orders/api/mapper/DeliveryDetailsMapper.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@
33
import org.mapstruct.Mapper;
44
import uk.gov.companieshouse.orders.api.dto.AddDeliveryDetailsRequestDTO;
55
import uk.gov.companieshouse.orders.api.dto.AddDeliveryDetailsResponseDTO;
6+
import uk.gov.companieshouse.orders.api.dto.DeliveryDetailsDTO;
67
import uk.gov.companieshouse.orders.api.model.DeliveryDetails;
78

89
@Mapper(componentModel = "spring")
910
public interface DeliveryDetailsMapper {
10-
DeliveryDetails addToDeliveryDetailsRequestDTOToDeliveryDetails(AddDeliveryDetailsRequestDTO addDeliveryDetailsRequestDTO);
11+
12+
default DeliveryDetails addToDeliveryDetailsRequestDTOToDeliveryDetails(AddDeliveryDetailsRequestDTO source) {
13+
return addToDeliveryDetailsRequestDTOToDeliveryDetails(source.getDeliveryDetails());
14+
}
15+
16+
DeliveryDetails addToDeliveryDetailsRequestDTOToDeliveryDetails(DeliveryDetailsDTO addDeliveryDetailsRequestDTO);
1117

1218
AddDeliveryDetailsResponseDTO deliveryDetailsToAddToDeliveryDetailsDTO(DeliveryDetails deliveryDetails);
1319
}
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package uk.gov.companieshouse.orders.api.validator;
22

3+
import org.apache.commons.lang.StringUtils;
34
import org.springframework.stereotype.Component;
45
import uk.gov.companieshouse.orders.api.dto.AddDeliveryDetailsRequestDTO;
56

@@ -9,15 +10,18 @@
910
@Component
1011
public class DeliveryDetailsValidator {
1112

12-
public DeliveryDetailsValidator() {
13-
}
13+
public DeliveryDetailsValidator() { }
1414

1515
public List<String> getValidationErrors(final AddDeliveryDetailsRequestDTO addDeliveryDetailsRequestDTO) {
1616
List<String> errors = new ArrayList<>();
1717

18-
if(addDeliveryDetailsRequestDTO.getPostalCode().isEmpty() && addDeliveryDetailsRequestDTO.getRegion().isEmpty()) {
19-
errors.add("Post code or Region is required");
18+
String postalCode = addDeliveryDetailsRequestDTO.getDeliveryDetails().getPostalCode();
19+
String region = addDeliveryDetailsRequestDTO.getDeliveryDetails().getRegion();
20+
21+
if(StringUtils.isBlank(postalCode) && StringUtils.isBlank(region)) {
22+
errors.add("Postcode or Region is required");
2023
}
24+
2125
return errors;
2226
}
2327
}

src/test/java/uk/gov/companieshouse/orders/api/controller/BasketControllerIntegrationTest.java

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import uk.gov.companieshouse.orders.api.dto.AddDeliveryDetailsRequestDTO;
1515
import uk.gov.companieshouse.orders.api.dto.AddToBasketRequestDTO;
1616
import uk.gov.companieshouse.orders.api.dto.BasketPaymentRequestDTO;
17+
import uk.gov.companieshouse.orders.api.dto.DeliveryDetailsDTO;
1718
import uk.gov.companieshouse.orders.api.model.Basket;
1819
import uk.gov.companieshouse.orders.api.model.BasketData;
1920
import uk.gov.companieshouse.orders.api.model.BasketItem;
@@ -267,16 +268,18 @@ public void addDeliveryDetailsToBasketIfTheBasketExists() throws Exception {
267268
basketRepository.save(basket);
268269

269270
AddDeliveryDetailsRequestDTO addDeliveryDetailsRequestDTO = new AddDeliveryDetailsRequestDTO();
270-
addDeliveryDetailsRequestDTO.setAddressLine1(ADDRESS_LINE_1);
271-
addDeliveryDetailsRequestDTO.setAddressLine2(ADDRESS_LINE_2);
272-
addDeliveryDetailsRequestDTO.setCountry(COUNTRY);
273-
addDeliveryDetailsRequestDTO.setForename(FORENAME);
274-
addDeliveryDetailsRequestDTO.setLocality(LOCALITY);
275-
addDeliveryDetailsRequestDTO.setPoBox(PO_BOX);
276-
addDeliveryDetailsRequestDTO.setPostalCode(POSTAL_CODE);
277-
addDeliveryDetailsRequestDTO.setPremises(PREMISES);
278-
addDeliveryDetailsRequestDTO.setRegion(REGION);
279-
addDeliveryDetailsRequestDTO.setSurname(SURNAME);
271+
DeliveryDetailsDTO deliveryDetailsDTO = new DeliveryDetailsDTO();
272+
deliveryDetailsDTO.setAddressLine1(ADDRESS_LINE_1);
273+
deliveryDetailsDTO.setAddressLine2(ADDRESS_LINE_2);
274+
deliveryDetailsDTO.setCountry(COUNTRY);
275+
deliveryDetailsDTO.setForename(FORENAME);
276+
deliveryDetailsDTO.setLocality(LOCALITY);
277+
deliveryDetailsDTO.setPoBox(PO_BOX);
278+
deliveryDetailsDTO.setPostalCode(POSTAL_CODE);
279+
deliveryDetailsDTO.setPremises(PREMISES);
280+
deliveryDetailsDTO.setRegion(REGION);
281+
deliveryDetailsDTO.setSurname(SURNAME);
282+
addDeliveryDetailsRequestDTO.setDeliveryDetails(deliveryDetailsDTO);
280283

281284
mockMvc.perform(patch("/basket")
282285
.header(REQUEST_ID_HEADER_NAME, TOKEN_REQUEST_ID_VALUE)
@@ -304,16 +307,18 @@ public void addDeliveryDetailsToBasketIfTheBasketExists() throws Exception {
304307
public void addDeliveryDetailsToBasketIfTheBasketDoesNotExist() throws Exception {
305308

306309
AddDeliveryDetailsRequestDTO addDeliveryDetailsRequestDTO = new AddDeliveryDetailsRequestDTO();
307-
addDeliveryDetailsRequestDTO.setAddressLine1(ADDRESS_LINE_1);
308-
addDeliveryDetailsRequestDTO.setAddressLine2(ADDRESS_LINE_2);
309-
addDeliveryDetailsRequestDTO.setCountry(COUNTRY);
310-
addDeliveryDetailsRequestDTO.setForename(FORENAME);
311-
addDeliveryDetailsRequestDTO.setLocality(LOCALITY);
312-
addDeliveryDetailsRequestDTO.setPoBox(PO_BOX);
313-
addDeliveryDetailsRequestDTO.setPostalCode(POSTAL_CODE);
314-
addDeliveryDetailsRequestDTO.setPremises(PREMISES);
315-
addDeliveryDetailsRequestDTO.setRegion(REGION);
316-
addDeliveryDetailsRequestDTO.setSurname(SURNAME);
310+
DeliveryDetailsDTO deliveryDetailsDTO = new DeliveryDetailsDTO();
311+
deliveryDetailsDTO.setAddressLine1(ADDRESS_LINE_1);
312+
deliveryDetailsDTO.setAddressLine2(ADDRESS_LINE_2);
313+
deliveryDetailsDTO.setCountry(COUNTRY);
314+
deliveryDetailsDTO.setForename(FORENAME);
315+
deliveryDetailsDTO.setLocality(LOCALITY);
316+
deliveryDetailsDTO.setPoBox(PO_BOX);
317+
deliveryDetailsDTO.setPostalCode(POSTAL_CODE);
318+
deliveryDetailsDTO.setPremises(PREMISES);
319+
deliveryDetailsDTO.setRegion(REGION);
320+
deliveryDetailsDTO.setSurname(SURNAME);
321+
addDeliveryDetailsRequestDTO.setDeliveryDetails(deliveryDetailsDTO);
317322

318323
mockMvc.perform(patch("/basket")
319324
.header(REQUEST_ID_HEADER_NAME, TOKEN_REQUEST_ID_VALUE)
@@ -340,10 +345,12 @@ public void addDeliveryDetailsToBasketIfTheBasketDoesNotExist() throws Exception
340345
@DisplayName("Add delivery details fails due to failed validation")
341346
public void addDeliveryDetailsFailsDueToFailedValidation() throws Exception {
342347
AddDeliveryDetailsRequestDTO addDeliveryDetailsRequestDTO = new AddDeliveryDetailsRequestDTO();
343-
addDeliveryDetailsRequestDTO.setAddressLine1("");
344-
addDeliveryDetailsRequestDTO.setAddressLine2(ADDRESS_LINE_2);
345-
addDeliveryDetailsRequestDTO.setCountry("");
346-
addDeliveryDetailsRequestDTO.setForename(FORENAME);
348+
DeliveryDetailsDTO deliveryDetailsDTO = new DeliveryDetailsDTO();
349+
deliveryDetailsDTO.setAddressLine1("");
350+
deliveryDetailsDTO.setAddressLine2(ADDRESS_LINE_2);
351+
deliveryDetailsDTO.setCountry("");
352+
deliveryDetailsDTO.setForename(FORENAME);
353+
addDeliveryDetailsRequestDTO.setDeliveryDetails(deliveryDetailsDTO);
347354

348355
mockMvc.perform(patch("/basket")
349356
.header(REQUEST_ID_HEADER_NAME, TOKEN_REQUEST_ID_VALUE)

src/test/java/uk/gov/companieshouse/orders/api/mapper/DeliveryDetailsMapperTest.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
1010
import uk.gov.companieshouse.orders.api.dto.AddDeliveryDetailsRequestDTO;
1111
import uk.gov.companieshouse.orders.api.dto.AddDeliveryDetailsResponseDTO;
12+
import uk.gov.companieshouse.orders.api.dto.DeliveryDetailsDTO;
1213
import uk.gov.companieshouse.orders.api.model.DeliveryDetails;
1314

1415
import static org.junit.Assert.assertEquals;
@@ -39,16 +40,18 @@ static class Config{}
3940
public void testDeliveryDetailsDTOToDeliveryDetails(){
4041

4142
final AddDeliveryDetailsRequestDTO dto = new AddDeliveryDetailsRequestDTO();
42-
dto.setAddressLine1(ADDRESS_LINE_1);
43-
dto.setAddressLine2(ADDRESS_LINE_2);
44-
dto.setCountry(COUNTRY);
45-
dto.setForename(FORENAME);
46-
dto.setLocality(LOCALITY);
47-
dto.setPoBox(PO_BOX);
48-
dto.setPostalCode(POSTAL_CODE);
49-
dto.setPremises(PREMISES);
50-
dto.setRegion(REGION);
51-
dto.setSurname(SURNAME);
43+
DeliveryDetailsDTO deliveryDetailsDTO = new DeliveryDetailsDTO();
44+
deliveryDetailsDTO.setAddressLine1(ADDRESS_LINE_1);
45+
deliveryDetailsDTO.setAddressLine2(ADDRESS_LINE_2);
46+
deliveryDetailsDTO.setCountry(COUNTRY);
47+
deliveryDetailsDTO.setForename(FORENAME);
48+
deliveryDetailsDTO.setLocality(LOCALITY);
49+
deliveryDetailsDTO.setPoBox(PO_BOX);
50+
deliveryDetailsDTO.setPostalCode(POSTAL_CODE);
51+
deliveryDetailsDTO.setPremises(PREMISES);
52+
deliveryDetailsDTO.setRegion(REGION);
53+
deliveryDetailsDTO.setSurname(SURNAME);
54+
dto.setDeliveryDetails(deliveryDetailsDTO);
5255

5356
DeliveryDetails deliveryDetails = deliveryDetailsMapper.addToDeliveryDetailsRequestDTOToDeliveryDetails(dto);
5457

src/test/java/uk/gov/companieshouse/orders/api/validator/DeliveryDetailsValidatorTest.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.junit.jupiter.api.DisplayName;
55
import org.junit.jupiter.api.Test;
66
import uk.gov.companieshouse.orders.api.dto.AddDeliveryDetailsRequestDTO;
7+
import uk.gov.companieshouse.orders.api.dto.DeliveryDetailsDTO;
78

89
import java.util.List;
910

@@ -32,19 +33,21 @@ void setUp() {
3233
@DisplayName("Postcode or region is mandatory")
3334
void postcodeOrRegionIsMandatory() {
3435
final AddDeliveryDetailsRequestDTO dto = new AddDeliveryDetailsRequestDTO();
35-
dto.setAddressLine1(ADDRESS_LINE_1);
36-
dto.setAddressLine2(ADDRESS_LINE_2);
37-
dto.setCountry(COUNTRY);
38-
dto.setForename(FORENAME);
39-
dto.setLocality(LOCALITY);
40-
dto.setPoBox(PO_BOX);
41-
dto.setPostalCode("");
42-
dto.setPremises(PREMISES);
43-
dto.setRegion("");
44-
dto.setSurname(SURNAME);
36+
DeliveryDetailsDTO deliveryDetailsDTO = new DeliveryDetailsDTO();
37+
deliveryDetailsDTO.setAddressLine1(ADDRESS_LINE_1);
38+
deliveryDetailsDTO.setAddressLine2(ADDRESS_LINE_2);
39+
deliveryDetailsDTO.setCountry(COUNTRY);
40+
deliveryDetailsDTO.setForename(FORENAME);
41+
deliveryDetailsDTO.setLocality(LOCALITY);
42+
deliveryDetailsDTO.setPoBox(PO_BOX);
43+
deliveryDetailsDTO.setPostalCode("");
44+
deliveryDetailsDTO.setPremises(PREMISES);
45+
deliveryDetailsDTO.setRegion("");
46+
deliveryDetailsDTO.setSurname(SURNAME);
47+
dto.setDeliveryDetails(deliveryDetailsDTO);
4548

4649
final List<String> errors = deliveryDetailsValidator.getValidationErrors(dto);
4750

48-
assertThat(errors, contains("Post code or Region is required"));
51+
assertThat(errors, contains("Postcode or Region is required"));
4952
}
5053
}

src/test/postman/Orders_API.postman_collection.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"info": {
3-
"_postman_id": "28a8b35f-b236-430c-8ab7-bfe3303550c9",
3+
"_postman_id": "d4d1d4cd-d3e3-46f9-a805-b11d4dadbeee",
44
"name": "Orders API",
55
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
66
},
@@ -181,7 +181,7 @@
181181
],
182182
"body": {
183183
"mode": "raw",
184-
"raw": "{\n \"address_line_1\": \"address line 1\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"postal code\",\n \"premises\": \"premises\",\n \"region\": \"region\",\n \"surname\": \"surname\"\n }"
184+
"raw": "{\n \"delivery_details\": {\n \t\"address_line_1\": \"address line 1\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"postal code\",\n \"premises\": \"premises\",\n \"region\": \"region\",\n \"surname\": \"surname\"\n }\n}"
185185
},
186186
"url": {
187187
"raw": "{{base_url}}/basket",
@@ -215,7 +215,7 @@
215215
],
216216
"body": {
217217
"mode": "raw",
218-
"raw": "{\n \"address_line_1\": \"address line 1\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"\",\n \"premises\": \"premises\",\n \"region\": \"\",\n \"surname\": \"surname\"\n }"
218+
"raw": "{\n\t\"delivery_details\": {\n \"address_line_1\": \"address line 1\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"\",\n \"premises\": \"premises\",\n \"region\": \"\",\n \"surname\": \"surname\"\n }\n}"
219219
},
220220
"url": {
221221
"raw": "{{base_url}}/basket",
@@ -249,7 +249,7 @@
249249
],
250250
"body": {
251251
"mode": "raw",
252-
"raw": "{\n \"address_line_1\": \"address line 1\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"\",\n \"premises\": \"premises\",\n \"region\": \"region\",\n \"surname\": \"surname\"\n }"
252+
"raw": "{\n\t\"delivery_details\": {\n \"address_line_1\": \"address line 1\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"\",\n \"premises\": \"premises\",\n \"region\": \"region\",\n \"surname\": \"surname\"\n }\n}"
253253
},
254254
"url": {
255255
"raw": "{{base_url}}/basket",
@@ -283,7 +283,7 @@
283283
],
284284
"body": {
285285
"mode": "raw",
286-
"raw": "{\n \"address_line_1\": \"\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"postal code\",\n \"premises\": \"premises\",\n \"region\": \"region\",\n \"surname\": \"surname\"\n }"
286+
"raw": "{\n\t\"delivery_details\": {\n \"address_line_1\": \"\",\n \"address_line_2\": \"address line 2\",\n \"country\": \"country\",\n \"forename\": \"forename\",\n \"locality\": \"locality\",\n \"po_box\": \"po box\",\n \"postal_code\": \"postal code\",\n \"premises\": \"premises\",\n \"region\": \"region\",\n \"surname\": \"surname\"\n }\n}"
287287
},
288288
"url": {
289289
"raw": "{{base_url}}/basket",
@@ -299,6 +299,7 @@
299299
"response": []
300300
}
301301
],
302+
"protocolProfileBehavior": {},
302303
"_postman_isSubFolder": true
303304
}
304305
],
@@ -310,7 +311,7 @@
310311
"oauth2": [
311312
{
312313
"key": "accessToken",
313-
"value": "ik80a25WfxmX_FIolAiyOjUJbamxnNfz8Dfsza5Un5clMIYF1stVLVavr1siijkQQdr3NY_Ze2W7ydqG7bpWiQ",
314+
"value": "n1fwWk6oYj3W1r4yV6Wf8zQeieDN9-RBFnbM35xfKYuCbDegNHP91htLQuEVIMwlKM5Kzq2QYVpq0blIOymaDg",
314315
"type": "string"
315316
},
316317
{

0 commit comments

Comments
 (0)