Skip to content

Commit

Permalink
Merge branch 'dev' into DT-620
Browse files Browse the repository at this point in the history
  • Loading branch information
preetamnpr committed Nov 28, 2023
2 parents 239c4ad + 1dceec9 commit a5fa9d4
Show file tree
Hide file tree
Showing 11 changed files with 336 additions and 92 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,16 @@ public static BookingScenarioListBuilder buildTree(
uc2_carrier_requestUpdateToBookingRequest()
.then(shipper_GetBooking(PENDING_UPDATE)),
uc3_shipper_submitUpdatedBookingRequest()
.then(shipper_GetBooking(PENDING_UPDATE_CONFIRMATION)))));
.then(shipper_GetBooking(PENDING_UPDATE_CONFIRMATION)),
shipper_GetAmendedBooking404().then(
uc5_carrier_confirmBookingRequest().then(
shipper_GetAmendedBooking404().then(uc7_shipper_submitBookingAmendment()
.then(
shipper_GetBooking(
CONFIRMED,
AMENDMENT_RECEIVED,
true
))))))));
}
return carrier_SupplyScenarioParameters().thenAllPathsFrom(START);
}
Expand Down Expand Up @@ -182,19 +191,35 @@ private static BookingScenarioListBuilder shipper_GetBooking(BookingState expect

private static BookingScenarioListBuilder shipper_GetBooking(
BookingState expectedBookingStatus, BookingState expectedAmendedBookingStatus) {
return shipper_GetBooking(expectedBookingStatus, expectedAmendedBookingStatus, false);
}

private static BookingScenarioListBuilder shipper_GetBooking(
BookingState expectedBookingStatus, BookingState expectedAmendedBookingStatus, boolean requestAmendedContent) {
BookingComponentFactory componentFactory = threadLocalComponentFactory.get();
String carrierPartyName = threadLocalCarrierPartyName.get();
String shipperPartyName = threadLocalShipperPartyName.get();
return new BookingScenarioListBuilder(
previousAction ->
new Shipper_GetBookingAction(
carrierPartyName,
shipperPartyName,
(BookingAction) previousAction,
expectedBookingStatus,
expectedAmendedBookingStatus,
componentFactory.getMessageSchemaValidator(BOOKING_API, GET_BOOKING_SCHEMA_NAME),
false));
previousAction ->
new Shipper_GetBookingAction(
carrierPartyName,
shipperPartyName,
(BookingAction) previousAction,
expectedBookingStatus,
expectedAmendedBookingStatus,
componentFactory.getMessageSchemaValidator(BOOKING_API, GET_BOOKING_SCHEMA_NAME),
requestAmendedContent));
}

private static BookingScenarioListBuilder shipper_GetAmendedBooking404() {
String carrierPartyName = threadLocalCarrierPartyName.get();
String shipperPartyName = threadLocalShipperPartyName.get();
return new BookingScenarioListBuilder(
previousAction ->
new Shipper_GetAmendedBooking404Action(
carrierPartyName,
shipperPartyName,
(BookingAction) previousAction));
}

private static BookingScenarioListBuilder uc1_shipper_SubmitBookingRequest() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,15 @@

import com.fasterxml.jackson.core.JsonPointer;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Stream;

import com.fasterxml.jackson.databind.node.ObjectNode;
import org.dcsa.conformance.core.check.*;
import org.dcsa.conformance.core.scenario.ConformanceAction;
import org.dcsa.conformance.core.scenario.OverwritingReference;
import org.dcsa.conformance.core.traffic.ConformanceExchange;
import org.dcsa.conformance.core.traffic.HttpMessageType;
import org.dcsa.conformance.standards.booking.checks.CarrierBookingNotificationDataPayloadRequestConformanceCheck;
Expand All @@ -12,14 +19,9 @@
import org.dcsa.conformance.standards.booking.party.CarrierScenarioParameters;
import org.dcsa.conformance.standards.booking.party.DynamicScenarioParameters;

import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Stream;

public abstract class BookingAction extends ConformanceAction {
protected final int expectedStatus;
private final OverwritingReference<DynamicScenarioParameters> dspReference;

public BookingAction(
String sourcePartyName,
Expand All @@ -29,6 +31,36 @@ public BookingAction(
int expectedStatus) {
super(sourcePartyName, targetPartyName, previousAction, actionTitle);
this.expectedStatus = expectedStatus;
this.dspReference =
previousAction == null
? new OverwritingReference<>(null, new DynamicScenarioParameters(null, null))
: new OverwritingReference<>(previousAction.dspReference, null);
}

@Override
public void reset() {
super.reset();
if (previousAction != null) {
this.dspReference.set(null);
}
}

@Override
public ObjectNode exportJsonState() {
ObjectNode jsonState = super.exportJsonState();
if (dspReference.hasCurrentValue()) {
jsonState.set("currentDsp", dspReference.get().toJson());
}
return jsonState;
}

@Override
public void importJsonState(JsonNode jsonState) {
super.importJsonState(jsonState);
JsonNode dspNode = jsonState.get("currentDsp");
if (dspNode != null) {
dspReference.set(DynamicScenarioParameters.fromJson(dspNode));
}
}

protected BookingAction getPreviousBookingAction() {
Expand All @@ -39,37 +71,32 @@ protected Consumer<CarrierScenarioParameters> getCspConsumer() {
return getPreviousBookingAction().getCspConsumer();
}

protected Consumer<DynamicScenarioParameters> getDspConsumer() {
return getPreviousBookingAction().getDspConsumer();
}

protected Supplier<CarrierScenarioParameters> getCspSupplier() {
return getPreviousBookingAction().getCspSupplier();
}

protected Supplier<DynamicScenarioParameters> getDspSupplier() {
return getPreviousBookingAction().getDspSupplier();
return dspReference::get;
}

protected void storeCbrAndCbrrIfPresent(ConformanceExchange exchange) {
DynamicScenarioParameters dsp = dspReference.get();
String oldCbrr = dsp.carrierBookingRequestReference();
String oldCbr = dsp.carrierBookingReference();

JsonNode responseJsonNode = exchange.getResponse().message().body().getJsonBody();
if (getDspSupplier().get().carrierBookingRequestReference() == null) {
if (responseJsonNode.has("carrierBookingRequestReference")) {
getDspConsumer()
.accept(
new DynamicScenarioParameters(
responseJsonNode.get("carrierBookingRequestReference").asText(),
getDspSupplier().get().carrierBookingReference()));
}
}
if (getDspSupplier().get().carrierBookingReference() == null) {
if (responseJsonNode.has("carrierBookingReference")) {
getDspConsumer()
.accept(
new DynamicScenarioParameters(
getDspSupplier().get().carrierBookingRequestReference(),
responseJsonNode.get("carrierBookingReference").asText()));
}
String newCbrr =
responseJsonNode.has("carrierBookingRequestReference")
? responseJsonNode.get("carrierBookingRequestReference").asText()
: oldCbrr;
String newCbr =
responseJsonNode.has("carrierBookingReference")
? responseJsonNode.get("carrierBookingReference").asText()
: oldCbr;

if ((newCbrr != null && !newCbrr.equals(oldCbrr))
|| (newCbr != null && !newCbr.equals(oldCbr))) {
dspReference.set(new DynamicScenarioParameters(newCbrr, newCbr));
}
}

Expand All @@ -79,8 +106,8 @@ protected Stream<ActionCheck> getNotificationChecks(
BookingState bookingState,
BookingState amendedBookingState) {
String titlePrefix = "[Notification]";
var cbr = getDspSupplier().get().carrierBookingReference();
var cbrr = getDspSupplier().get().carrierBookingRequestReference();
var cbr = dspReference.get().carrierBookingReference();
var cbrr = dspReference.get().carrierBookingRequestReference();
return Stream.of(
new HttpMethodCheck(
titlePrefix, BookingRole::isCarrier, getMatchedNotificationExchangeUuid(), "POST"),
Expand All @@ -92,10 +119,7 @@ protected Stream<ActionCheck> getNotificationChecks(
new ResponseStatusCheck(
titlePrefix, BookingRole::isShipper, getMatchedNotificationExchangeUuid(), 204),
new CarrierBookingNotificationDataPayloadRequestConformanceCheck(
getMatchedNotificationExchangeUuid(),
bookingState,
amendedBookingState
),
getMatchedNotificationExchangeUuid(), bookingState, amendedBookingState),
new ApiHeaderCheck(
titlePrefix,
BookingRole::isCarrier,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@
import java.util.function.Consumer;
import java.util.function.Supplier;
import org.dcsa.conformance.standards.booking.party.CarrierScenarioParameters;
import org.dcsa.conformance.standards.booking.party.DynamicScenarioParameters;

public class Carrier_SupplyScenarioParametersAction extends BookingAction {
private CarrierScenarioParameters carrierScenarioParameters = null;
private DynamicScenarioParameters dynamicScenarioParameters = new DynamicScenarioParameters(null, null);

public Carrier_SupplyScenarioParametersAction(String carrierPartyName) {
super(carrierPartyName, null, null, "SupplyCSP", -1);
Expand All @@ -19,7 +17,6 @@ public Carrier_SupplyScenarioParametersAction(String carrierPartyName) {
public void reset() {
super.reset();
carrierScenarioParameters = null;
dynamicScenarioParameters = new DynamicScenarioParameters(null, null);
}

@Override
Expand All @@ -28,9 +25,6 @@ public ObjectNode exportJsonState() {
if (carrierScenarioParameters != null) {
jsonState.set("carrierScenarioParameters", carrierScenarioParameters.toJson());
}
if (dynamicScenarioParameters != null) {
jsonState.set("dynamicScenarioParameters", dynamicScenarioParameters.toJson());
}
return jsonState;
}

Expand All @@ -41,10 +35,6 @@ public void importJsonState(JsonNode jsonState) {
if (cspNode != null) {
carrierScenarioParameters = CarrierScenarioParameters.fromJson(cspNode);
}
JsonNode dspNode = jsonState.get("dynamicScenarioParameters");
if (dspNode != null) {
dynamicScenarioParameters = DynamicScenarioParameters.fromJson(dspNode);
}
}

@Override
Expand Down Expand Up @@ -73,18 +63,8 @@ protected Consumer<CarrierScenarioParameters> getCspConsumer() {
return csp -> this.carrierScenarioParameters = csp;
}

@Override
protected Consumer<DynamicScenarioParameters> getDspConsumer() {
return dsp -> this.dynamicScenarioParameters = dsp;
}

@Override
protected Supplier<CarrierScenarioParameters> getCspSupplier() {
return () -> carrierScenarioParameters;
}

@Override
protected Supplier<DynamicScenarioParameters> getDspSupplier() {
return () -> dynamicScenarioParameters;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package org.dcsa.conformance.standards.booking.action;

import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Stream;
import org.dcsa.conformance.core.check.*;
import org.dcsa.conformance.core.toolkit.JsonToolkit;
import org.dcsa.conformance.core.traffic.ConformanceExchange;
import org.dcsa.conformance.core.traffic.HttpMessageType;
import org.dcsa.conformance.standards.booking.checks.CarrierGetBookingPayloadResponseConformanceCheck;
import org.dcsa.conformance.standards.booking.party.BookingRole;
import org.dcsa.conformance.standards.booking.party.BookingState;

public class Shipper_GetAmendedBooking404Action extends BookingAction {

public Shipper_GetAmendedBooking404Action(
String carrierPartyName,
String shipperPartyName,
BookingAction previousAction) {
super(shipperPartyName, carrierPartyName, previousAction, "GET (amended content, non-existing)", 404);
}

@Override
public ObjectNode asJsonNode() {
return super.asJsonNode()
.put("cbrr", getDspSupplier().get().carrierBookingRequestReference())
.put("amendedContent", true);
}

@Override
public String getHumanReadablePrompt() {
return "GET the (non-existing) amendment to the booking with CBR '%s'"
.formatted(getDspSupplier().get().carrierBookingReference());
}

@Override
public ConformanceCheck createCheck(String expectedApiVersion) {
return new ConformanceCheck(getActionTitle()) {
@Override
protected Stream<? extends ConformanceCheck> createSubChecks() {
return Stream.of(
new UrlPathCheck(
BookingRole::isShipper,
getMatchedExchangeUuid(),
"/v2/bookings/" + getDspSupplier().get().carrierBookingRequestReference()),
new QueryParamCheck(
BookingRole::isShipper,
getMatchedExchangeUuid(),
"amendedContent",
"true"
),
new ResponseStatusCheck(
BookingRole::isCarrier, getMatchedExchangeUuid(), expectedStatus),
new ApiHeaderCheck(
BookingRole::isShipper,
getMatchedExchangeUuid(),
HttpMessageType.REQUEST,
expectedApiVersion),
new ApiHeaderCheck(
BookingRole::isCarrier,
getMatchedExchangeUuid(),
HttpMessageType.RESPONSE,
expectedApiVersion))
// .filter(Objects::nonNull)
;
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class Shipper_GetBookingAction extends BookingAction {
private final BookingState expectedBookingStatus;
private final BookingState expectedAmendedBookingStatus;
private final JsonSchemaValidator responseSchemaValidator;
private final boolean requestAmendedStatus;
private final boolean requestAmendedContent;

public Shipper_GetBookingAction(
String carrierPartyName,
Expand All @@ -28,18 +28,18 @@ public Shipper_GetBookingAction(
BookingState expectedAmendedBookingStatus,
JsonSchemaValidator responseSchemaValidator,
boolean requestAmendedStatus) {
super(shipperPartyName, carrierPartyName, previousAction, "GET", 200);
super(shipperPartyName, carrierPartyName, previousAction, requestAmendedStatus ? "GET (amended content)" : "GET", 200);
this.expectedBookingStatus = expectedBookingStatus;
this.expectedAmendedBookingStatus = expectedAmendedBookingStatus;
this.responseSchemaValidator = responseSchemaValidator;
this.requestAmendedStatus = requestAmendedStatus;
this.requestAmendedContent = requestAmendedStatus;
}

@Override
public ObjectNode asJsonNode() {
ObjectNode jsonNode = super.asJsonNode();
jsonNode.put("cbrr", getDspSupplier().get().carrierBookingRequestReference());
return jsonNode;
return super.asJsonNode()
.put("cbrr", getDspSupplier().get().carrierBookingRequestReference())
.put("amendedContent", requestAmendedContent);
}

@Override
Expand Down Expand Up @@ -70,11 +70,17 @@ protected Stream<? extends ConformanceCheck> createSubChecks() {
getMatchedExchangeUuid(),
HttpMessageType.RESPONSE,
expectedApiVersion),
new JsonSchemaCheck(
BookingRole::isCarrier,
getMatchedExchangeUuid(),
HttpMessageType.RESPONSE,
responseSchemaValidator
),
new CarrierGetBookingPayloadResponseConformanceCheck(
getMatchedExchangeUuid(),
expectedBookingStatus,
expectedAmendedBookingStatus,
requestAmendedStatus
requestAmendedContent
),
new ActionCheck(
"GET returns the expected Booking data",
Expand Down
Loading

0 comments on commit a5fa9d4

Please sign in to comment.