Skip to content

Commit 74d3346

Browse files
authored
Merge pull request #50 from companieshouse/GCI-1099-refactor-orderid
Gci 1099 refactor orderid
2 parents a6aeaf0 + 62e5422 commit 74d3346

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

src/main/java/uk/gov/companieshouse/orders/api/service/CheckoutService.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import uk.gov.companieshouse.orders.api.repository.CheckoutRepository;
77
import uk.gov.companieshouse.orders.api.util.CheckoutHelper;
88

9+
import java.security.SecureRandom;
910
import java.time.LocalDateTime;
11+
import java.util.Calendar;
1012
import java.util.List;
1113
import java.util.Optional;
1214

@@ -28,12 +30,23 @@ public CheckoutService(CheckoutRepository checkoutRepository,
2830
this.checkoutHelper = checkoutHelper;
2931
}
3032

33+
private String autoGenerateId() {
34+
SecureRandom random = new SecureRandom();
35+
byte[] values = new byte[4];
36+
random.nextBytes(values);
37+
String rand = String.format("%04d", random.nextInt(9999));
38+
String time = String.format("%08d", Calendar.getInstance().getTimeInMillis() / 100000L);
39+
String rawId = rand + time;
40+
String[] tranId = rawId.split("(?<=\\G.{6})");
41+
return "ORD-" + String.join("-", tranId);
42+
}
43+
3144
public Checkout createCheckout(Item item, String userId, String email, DeliveryDetails deliveryDetails) {
3245
final LocalDateTime now = LocalDateTime.now();
33-
String objectId = new ObjectId().toString();
46+
String checkoutId = autoGenerateId();
3447

3548
Checkout checkout = new Checkout();
36-
checkout.setId(objectId);
49+
checkout.setId(checkoutId);
3750
checkout.setUserId(userId);
3851
checkout.setCreatedAt(now);
3952
checkout.setUpdatedAt(now);
@@ -44,9 +57,9 @@ public Checkout createCheckout(Item item, String userId, String email, DeliveryD
4457
checkout.getData().setCheckedOutBy(actionedBy);
4558
checkout.getData().setStatus(PaymentStatus.PENDING);
4659
checkout.getData().setEtag(etagGeneratorService.generateEtag());
47-
checkout.getData().setLinks(linksGeneratorService.generateCheckoutLinks(objectId));
60+
checkout.getData().setLinks(linksGeneratorService.generateCheckoutLinks(checkoutId));
4861
checkout.getData().getItems().add(item);
49-
checkout.getData().setReference(objectId);
62+
checkout.getData().setReference(checkoutId);
5063
checkout.getData().setKind("order");
5164
checkout.getData().setDeliveryDetails(deliveryDetails);
5265
String totalOrderCostStr = checkoutHelper.calculateTotalOrderCostForCheckout(checkout) + "";

src/test/java/uk/gov/companieshouse/orders/api/service/CheckoutServiceTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package uk.gov.companieshouse.orders.api.service;
22

3+
import org.hamcrest.Matchers;
34
import org.junit.jupiter.api.BeforeEach;
45
import org.junit.jupiter.api.DisplayName;
56
import org.junit.jupiter.api.Test;
@@ -21,6 +22,7 @@
2122
import static org.hamcrest.MatcherAssert.assertThat;
2223
import static org.hamcrest.core.Is.is;
2324
import static org.junit.Assert.assertEquals;
25+
import static org.junit.Assert.assertTrue;
2426
import static org.mockito.ArgumentMatchers.any;
2527
import static org.mockito.Mockito.*;
2628
import static uk.gov.companieshouse.orders.api.util.TestConstants.ERIC_AUTHORISED_USER_VALUE;
@@ -189,6 +191,16 @@ void createCheckoutPopulatesTotalOrderCost() {
189191
assertThat(checkout().getData().getTotalOrderCost(), is(EXPECTED_TOTAL_ORDER_COST + ""));
190192
}
191193

194+
@Test
195+
@DisplayName("createCheckout populates `id` in the format ORD-######-######")
196+
void createCheckoutPopulatesIdCorrectly() {
197+
Item certificateItem = createCertificateItem();
198+
serviceUnderTest.createCheckout(certificateItem, ERIC_IDENTITY_VALUE,
199+
ERIC_AUTHORISED_USER_VALUE, new DeliveryDetails());
200+
verify(checkoutRepository).save(checkoutCaptor.capture());
201+
assertTrue(checkout().getId().matches("^ORD-\\d{6}-\\d{6}$")); ;
202+
}
203+
192204
@Test
193205
@DisplayName("saveCheckout saves updated checkout correctly")
194206
void saveCheckoutSavesUpdatedCheckout() {

0 commit comments

Comments
 (0)