From c99d0507344dd4ae5e80d5df7c871785336f153b Mon Sep 17 00:00:00 2001 From: preetamnpr <128618622+preetamnpr@users.noreply.github.com> Date: Fri, 24 Nov 2023 15:15:57 +0100 Subject: [PATCH 1/2] DT-619 added UC7 and changed the renamed the booking state --- .../booking/BookingScenarioListBuilder.java | 30 +++++-- .../UC7_Shipper_SubmitBookingAmendment.java | 83 +++++++++++++++++++ .../standards/booking/party/BookingState.java | 2 +- .../standards/booking/party/Carrier.java | 6 +- .../standards/booking/party/Shipper.java | 20 ++++- 5 files changed, 128 insertions(+), 13 deletions(-) create mode 100644 booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingScenarioListBuilder.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingScenarioListBuilder.java index 68459d9c..aecbee74 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingScenarioListBuilder.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingScenarioListBuilder.java @@ -49,7 +49,12 @@ public static BookingScenarioListBuilder buildTree( uc11_carrier_confirmBookingCompleted() .then(shipper_GetBooking(COMPLETED)), uc6_carrier_requestUpdateToConfirmedBooking() - .then(shipper_GetBooking(PENDING_AMENDMENT)), + .then(shipper_GetBooking(PENDING_AMENDMENT) + .then(uc7_shipper_submitBookingAmendment(). + then(shipper_GetBooking(AMENDMENT_RECEIVED)) + )), + uc7_shipper_submitBookingAmendment() + .then(shipper_GetBooking(AMENDMENT_RECEIVED)), uc10_carrier_declineBooking() .then(shipper_GetBooking(DECLINED)))), uc4_carrier_rejectBookingRequest() @@ -78,7 +83,7 @@ private BookingScenarioListBuilder thenAllPathsFrom( .thenEither( uc6_carrier_requestBookingAmendment().thenAllPathsFrom(PENDING_AMENDMENT), uc7_shipper_submitBookingAmendment() - .thenAllPathsFrom(PENDING_AMENDMENT_APPROVAL, CONFIRMED), + .thenAllPathsFrom(AMENDMENT_RECEIVED, CONFIRMED), uc10_carrier_declineBooking().thenAllPathsFrom(DECLINED), uc11_carrier_confirmBookingCompleted().thenAllPathsFrom(COMPLETED), uc12_shipper_cancelBooking().thenHappyPathFrom(CANCELLED))); @@ -114,10 +119,10 @@ private BookingScenarioListBuilder thenAllPathsFrom( .thenEither( uc6_carrier_requestBookingAmendment().thenHappyPathFrom(PENDING_AMENDMENT), uc7_shipper_submitBookingAmendment() - .thenAllPathsFrom(PENDING_AMENDMENT_APPROVAL, PENDING_AMENDMENT), + .thenAllPathsFrom(AMENDMENT_RECEIVED, PENDING_AMENDMENT), uc10_carrier_declineBooking().thenHappyPathFrom(DECLINED), uc12_shipper_cancelBooking().thenHappyPathFrom(CANCELLED))); - case PENDING_AMENDMENT_APPROVAL -> then( + case AMENDMENT_RECEIVED -> then( shipper_GetBooking(bookingState) .thenEither( uc6_carrier_requestBookingAmendment().thenHappyPathFrom(PENDING_AMENDMENT), @@ -134,8 +139,8 @@ private BookingScenarioListBuilder thenHappyPathFrom(BookingState bookingState) case CANCELLED, COMPLETED, DECLINED, REJECTED -> then(noAction()); case CONFIRMED -> then(uc11_carrier_confirmBookingCompleted().thenHappyPathFrom(COMPLETED)); case PENDING_AMENDMENT -> then( - uc7_shipper_submitBookingAmendment().thenHappyPathFrom(PENDING_AMENDMENT_APPROVAL)); - case PENDING_AMENDMENT_APPROVAL -> then( + uc7_shipper_submitBookingAmendment().thenHappyPathFrom(AMENDMENT_RECEIVED)); + case AMENDMENT_RECEIVED -> then( uc8a_carrier_approveBookingAmendment().thenHappyPathFrom(CONFIRMED)); case PENDING_UPDATE -> then( uc3_shipper_submitUpdatedBookingRequest().thenHappyPathFrom(PENDING_UPDATE_CONFIRMATION)); @@ -240,7 +245,18 @@ private static BookingScenarioListBuilder uc6_carrier_requestBookingAmendment() } private static BookingScenarioListBuilder uc7_shipper_submitBookingAmendment() { - return tbdShipperAction(); + BookingComponentFactory componentFactory = threadLocalComponentFactory.get(); + String carrierPartyName = threadLocalCarrierPartyName.get(); + String shipperPartyName = threadLocalShipperPartyName.get(); + return new BookingScenarioListBuilder( + previousAction -> + new UC7_Shipper_SubmitBookingAmendment( + carrierPartyName, + shipperPartyName, + (BookingAction) previousAction, + componentFactory.getMessageSchemaValidator(BOOKING_API, PUT_SCHEMA_NAME), + componentFactory.getMessageSchemaValidator(BOOKING_API, BOOKING_REF_STATUS_SCHEMA) + )); } private static BookingScenarioListBuilder uc8a_carrier_approveBookingAmendment() { diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java new file mode 100644 index 00000000..120459d9 --- /dev/null +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java @@ -0,0 +1,83 @@ +package org.dcsa.conformance.standards.booking.action; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.dcsa.conformance.core.check.*; +import org.dcsa.conformance.core.traffic.HttpMessageType; +import org.dcsa.conformance.standards.booking.party.BookingRole; + +import java.util.stream.Stream; + +@Getter +@Slf4j +public class UC7_Shipper_SubmitBookingAmendment extends BookingAction { + private final JsonSchemaValidator requestSchemaValidator; + private final JsonSchemaValidator responseSchemaValidator; + + public UC7_Shipper_SubmitBookingAmendment( + String carrierPartyName, + String shipperPartyName, + BookingAction previousAction, + JsonSchemaValidator requestSchemaValidator, + JsonSchemaValidator responseSchemaValidator) { + super(shipperPartyName, carrierPartyName, previousAction, "UC7", 200); + this.requestSchemaValidator = requestSchemaValidator; + this.responseSchemaValidator = responseSchemaValidator; + } + + @Override + public String getHumanReadablePrompt() { + return ("UC7: Submit Amendment to confirmed booking"); + } + + @Override + public JsonNode getJsonForHumanReadablePrompt() { + return getCspSupplier().get().toJson(); + } + + @Override + public ObjectNode asJsonNode() { + ObjectNode jsonNode = super.asJsonNode(); + jsonNode.put("cbrr", getDspSupplier().get().carrierBookingRequestReference()); + return jsonNode; + } + + @Override + public ConformanceCheck createCheck(String expectedApiVersion) { + return new ConformanceCheck(getActionTitle()) { + @Override + protected Stream createSubChecks() { + var cbrr = getDspSupplier().get().carrierBookingRequestReference(); + return Stream.of( + new HttpMethodCheck(BookingRole::isShipper, getMatchedExchangeUuid(), "PUT"), + new UrlPathCheck(BookingRole::isShipper, getMatchedExchangeUuid(), "/v2/bookings/%s".formatted(cbrr)), + new ResponseStatusCheck( + BookingRole::isCarrier, getMatchedExchangeUuid(), expectedStatus), + new ApiHeaderCheck( + BookingRole::isShipper, + getMatchedExchangeUuid(), + HttpMessageType.REQUEST, + expectedApiVersion), + new ApiHeaderCheck( + BookingRole::isCarrier, + getMatchedExchangeUuid(), + HttpMessageType.RESPONSE, + expectedApiVersion), + new JsonSchemaCheck( + BookingRole::isShipper, + getMatchedExchangeUuid(), + HttpMessageType.REQUEST, + requestSchemaValidator), + new JsonSchemaCheck( + BookingRole::isCarrier, + getMatchedExchangeUuid(), + HttpMessageType.RESPONSE, + responseSchemaValidator)) + // .filter(Objects::nonNull) + ; + } + }; + } +} diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingState.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingState.java index fe2f457f..fdc4825c 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingState.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingState.java @@ -9,7 +9,7 @@ public enum BookingState { CANCELLED, CONFIRMED, PENDING_AMENDMENT, - PENDING_AMENDMENT_APPROVAL, + AMENDMENT_RECEIVED, DECLINED, COMPLETED, ; diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Carrier.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Carrier.java index 4559c9bf..5d1db694 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Carrier.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Carrier.java @@ -311,7 +311,7 @@ private void declineBooking(JsonNode actionPrompt) { Set.of( BookingState.CONFIRMED, BookingState.PENDING_AMENDMENT, - BookingState.PENDING_AMENDMENT_APPROVAL), + BookingState.AMENDMENT_RECEIVED), ReferenceState.PROVIDE_IF_EXIST, false); addOperatorLogEntry("Declined the booking with CBR '%s'".formatted(cbr)); @@ -562,6 +562,10 @@ private ConformanceResponse _handlePutBookingRequest(ConformanceRequest request) var bookingReference = lastUrlSegment(request.url()); var cbrr = cbrToCbrr.getOrDefault(bookingReference, bookingReference); var bookingData = persistentMap.load(cbrr); + String bookingStatus = bookingData.get("bookingStatus").asText(); + if (bookingStatus.equals(BookingState.CONFIRMED.wireName())) { + bookingState = BookingState.AMENDMENT_RECEIVED; + } ObjectNode booking = (ObjectNode) objectMapper.readTree(request.message().body().getJsonBody().toString()); if (bookingData == null || bookingData.isMissingNode()) { diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Shipper.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Shipper.java index 90a463a2..580af769 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Shipper.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/Shipper.java @@ -16,10 +16,7 @@ import org.dcsa.conformance.core.traffic.ConformanceMessageBody; import org.dcsa.conformance.core.traffic.ConformanceRequest; import org.dcsa.conformance.core.traffic.ConformanceResponse; -import org.dcsa.conformance.standards.booking.action.Shipper_GetBookingAction; -import org.dcsa.conformance.standards.booking.action.UC12_Shipper_CancelEntireBookingAction; -import org.dcsa.conformance.standards.booking.action.UC1_Shipper_SubmitBookingRequestAction; -import org.dcsa.conformance.standards.booking.action.UC3_Shipper_SubmitUpdatedBookingRequestAction; +import org.dcsa.conformance.standards.booking.action.*; @Slf4j public class Shipper extends ConformanceParty { @@ -63,6 +60,7 @@ protected Map, Consumer> getActionP Map.entry(UC1_Shipper_SubmitBookingRequestAction.class, this::sendBookingRequest), Map.entry(Shipper_GetBookingAction.class, this::getBookingRequest), Map.entry(UC3_Shipper_SubmitUpdatedBookingRequestAction.class, this::sendUpdatedBooking), + Map.entry(UC7_Shipper_SubmitBookingAmendment.class, this::sendUpdatedConfirmedBooking), Map.entry(UC12_Shipper_CancelEntireBookingAction.class, this::sendCancelEntireBooking)); } @@ -137,6 +135,20 @@ private void sendUpdatedBooking(JsonNode actionPrompt) { .formatted(cbrr)); } + private void sendUpdatedConfirmedBooking(JsonNode actionPrompt) { + log.info("Shipper.sendUpdatedConfirmedBooking(%s)".formatted(actionPrompt.toPrettyString())); + String cbrr = actionPrompt.get("cbrr").asText(); + + var bookingData = persistentMap.load(cbrr); + ((ObjectNode) bookingData).put(SERVICE_CONTRACT_REF, SERVICE_REF_PUT); + asyncCounterpartPut( + "/v2/bookings/%s".formatted(cbrr),bookingData); + + addOperatorLogEntry( + "Sent an updated confirmed booking with the parameters: %s" + .formatted(cbrr)); + } + @Override public ConformanceResponse handleRequest(ConformanceRequest request) { From fa11276ce84108b7a0af9df0a83b2c5c122712a2 Mon Sep 17 00:00:00 2001 From: preetamnpr <128618622+preetamnpr@users.noreply.github.com> Date: Fri, 24 Nov 2023 15:58:16 +0100 Subject: [PATCH 2/2] DT-619 removed unused method and imports --- .../action/UC1_Shipper_SubmitBookingRequestAction.java | 5 ----- .../UC3_Shipper_SubmitUpdatedBookingRequestAction.java | 8 -------- .../action/UC7_Shipper_SubmitBookingAmendment.java | 6 ------ 3 files changed, 19 deletions(-) diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC1_Shipper_SubmitBookingRequestAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC1_Shipper_SubmitBookingRequestAction.java index a9a5b8b1..65cefcb6 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC1_Shipper_SubmitBookingRequestAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC1_Shipper_SubmitBookingRequestAction.java @@ -33,11 +33,6 @@ public String getHumanReadablePrompt() { return ("UC1: Submit a booking request using the following parameters:"); } - @Override - public JsonNode getJsonForHumanReadablePrompt() { - return getCspSupplier().get().toJson(); - } - @Override public ObjectNode asJsonNode() { ObjectNode jsonNode = super.asJsonNode(); diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC3_Shipper_SubmitUpdatedBookingRequestAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC3_Shipper_SubmitUpdatedBookingRequestAction.java index 4876ca45..61941697 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC3_Shipper_SubmitUpdatedBookingRequestAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC3_Shipper_SubmitUpdatedBookingRequestAction.java @@ -1,14 +1,11 @@ package org.dcsa.conformance.standards.booking.action; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.dcsa.conformance.core.check.*; -import org.dcsa.conformance.core.traffic.ConformanceExchange; import org.dcsa.conformance.core.traffic.HttpMessageType; import org.dcsa.conformance.standards.booking.party.BookingRole; -import org.dcsa.conformance.standards.booking.party.DynamicScenarioParameters; import java.util.stream.Stream; @@ -34,11 +31,6 @@ public String getHumanReadablePrompt() { return ("UC3: Submit an updated booking request"); } - @Override - public JsonNode getJsonForHumanReadablePrompt() { - return getCspSupplier().get().toJson(); - } - @Override public ObjectNode asJsonNode() { ObjectNode jsonNode = super.asJsonNode(); diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java index 120459d9..d8d8c124 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC7_Shipper_SubmitBookingAmendment.java @@ -1,6 +1,5 @@ package org.dcsa.conformance.standards.booking.action; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -32,11 +31,6 @@ public String getHumanReadablePrompt() { return ("UC7: Submit Amendment to confirmed booking"); } - @Override - public JsonNode getJsonForHumanReadablePrompt() { - return getCspSupplier().get().toJson(); - } - @Override public ObjectNode asJsonNode() { ObjectNode jsonNode = super.asJsonNode();