Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DT-619 added UC7 and changed the renamed the booking state #12

Merged
merged 2 commits into from
Nov 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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)));
Expand Down Expand Up @@ -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),
Expand All @@ -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));
Expand Down Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.dcsa.conformance.standards.booking.action;

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 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<? extends ConformanceCheck> 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)
;
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public enum BookingState {
CANCELLED,
CONFIRMED,
PENDING_AMENDMENT,
PENDING_AMENDMENT_APPROVAL,
AMENDMENT_RECEIVED,
DECLINED,
COMPLETED,
;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -63,6 +60,7 @@ protected Map<Class<? extends ConformanceAction>, Consumer<JsonNode>> 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));
}

Expand Down Expand Up @@ -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) {
Expand Down
Loading