diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingComponentFactory.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingComponentFactory.java index 3a207f04..d0eac45b 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingComponentFactory.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/BookingComponentFactory.java @@ -100,7 +100,6 @@ public Set getReportRoleNames( public JsonSchemaValidator getMessageSchemaValidator(String apiName, String jsonSchema) { String schemaFilePath = "/standards/booking/schemas/booking-%s-v%s0.json" .formatted(apiName, standardVersion.charAt(0)); - return JsonSchemaValidator.getInstance(schemaFilePath, jsonSchema); } } 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 cb4aa064..f2462f47 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 @@ -34,7 +34,7 @@ class BookingScenarioListBuilder extends ScenarioListBuilder createConforman .then( shipperGetBooking(PENDING_UPDATE) .then( - uc3_shipper_submitUpdatedBookingRequest() + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED) .then( shipperGetBooking(UPDATE_RECEIVED) .then( @@ -81,7 +81,7 @@ private static LinkedHashMap createConforman .then( shipperGetBooking( COMPLETED)))))))), - uc3_shipper_submitUpdatedBookingRequest() + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED) .then( shipperGetBooking(UPDATE_RECEIVED) .then( @@ -107,13 +107,13 @@ private static LinkedHashMap createConforman .then( shipperGetBooking( COMPLETED)))), - uc7_shipper_submitBookingAmendment() + uc7_shipper_submitBookingAmendment(CONFIRMED,AMENDMENT_RECEIVED) .then( shipperGetBooking( CONFIRMED, AMENDMENT_RECEIVED,null, true) .thenEither( - uc8a_carrier_approveBookingAmendment() + uc8a_carrier_approveBookingAmendment(CONFIRMED, AMENDMENT_CONFIRMED) .then( shipperGetBooking( CONFIRMED, @@ -123,7 +123,7 @@ private static LinkedHashMap createConforman .then( shipperGetBooking( COMPLETED)))), - uc8b_carrier_declineBookingAmendment() + uc8b_carrier_declineBookingAmendment(CONFIRMED, AMENDMENT_DECLINED) .then( shipperGetBooking( CONFIRMED, @@ -133,7 +133,7 @@ private static LinkedHashMap createConforman .then( shipperGetBooking( COMPLETED)))), - uc9_shipper_cancelBookingAmendment() + uc9_shipper_cancelBookingAmendment(CONFIRMED, AMENDMENT_CANCELLED) .then( shipperGetBooking( CONFIRMED, @@ -143,11 +143,11 @@ private static LinkedHashMap createConforman .then( shipperGetBooking( COMPLETED)))))), - uc10_carrier_declineBooking() + uc10_carrier_declineBooking(AMENDMENT_DECLINED) .then(shipperGetBooking(DECLINED)), uc12_carrier_confirmBookingCompleted() .then(shipperGetBooking(COMPLETED)))), - uc11_shipper_cancelBooking() + uc11_shipper_cancelBooking(CANCELLED) .then(shipperGetBooking(CANCELLED)))))), Map.entry( "Dangerous goods", @@ -157,7 +157,7 @@ private static LinkedHashMap createConforman .then( shipperGetBooking(RECEIVED) .thenEither( - uc3_shipper_submitUpdatedBookingRequest() + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED) .then( shipperGetBooking(UPDATE_RECEIVED) .then( @@ -185,7 +185,7 @@ private static LinkedHashMap createConforman .then( shipperGetBooking(RECEIVED) .thenEither( - uc3_shipper_submitUpdatedBookingRequest() + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED) .then( shipperGetBooking(UPDATE_RECEIVED) .then( @@ -277,38 +277,39 @@ private BookingScenarioListBuilder thenAllPathsFrom( .thenEither( uc5_carrier_confirmBookingRequest().thenHappyPathFrom(CONFIRMED), uc6_carrier_requestToAmendConfirmedBooking().thenAllPathsFrom(PENDING_AMENDMENT), - uc7_shipper_submitBookingAmendment() + uc7_shipper_submitBookingAmendment(CONFIRMED, AMENDMENT_RECEIVED) .thenAllPathsFrom(AMENDMENT_RECEIVED, CONFIRMED), - uc10_carrier_declineBooking().thenAllPathsFrom(DECLINED), + uc10_carrier_declineBooking(null).thenAllPathsFrom(DECLINED), uc12_carrier_confirmBookingCompleted().thenAllPathsFrom(COMPLETED), - uc13ShipperCancelConfirmedBooking().thenAllPathsFrom(CANCELLATION_RECEIVED, CONFIRMED, null))); + uc13ShipperCancelConfirmedBooking(CONFIRMED,null, CANCELLATION_RECEIVED) + .thenAllPathsFrom(CANCELLATION_RECEIVED, CONFIRMED, null))); case PENDING_UPDATE -> then( shipperGetBooking(bookingState) .thenEither( uc2_carrier_requestUpdateToBookingRequest().thenHappyPathFrom(PENDING_UPDATE), - uc3_shipper_submitUpdatedBookingRequest() + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED) .thenHappyPathFrom(UPDATE_RECEIVED), uc4_carrier_rejectBookingRequest().thenHappyPathFrom(REJECTED), - uc11_shipper_cancelBooking().thenHappyPathFrom(CANCELLED))); + uc11_shipper_cancelBooking(CANCELLED).thenHappyPathFrom(CANCELLED))); case UPDATE_RECEIVED -> then( shipperGetBooking(bookingState) .thenEither( uc2_carrier_requestUpdateToBookingRequest().thenHappyPathFrom(PENDING_UPDATE), - uc3_shipper_submitUpdatedBookingRequest() + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED) .thenHappyPathFrom(UPDATE_RECEIVED), uc4_carrier_rejectBookingRequest().thenHappyPathFrom(REJECTED), uc5_carrier_confirmBookingRequest().thenHappyPathFrom(CONFIRMED), - uc11_shipper_cancelBooking().thenHappyPathFrom(CANCELLED))); + uc11_shipper_cancelBooking(CANCELLED).thenHappyPathFrom(CANCELLED))); case RECEIVED -> then( shipperGetBooking(bookingState) .thenEither( auc_shipper_sendInvalidBookingAction(CANCEL_BOOKING_AMENDMENT).then(shipperGetBooking(bookingState)), uc2_carrier_requestUpdateToBookingRequest().thenAllPathsFrom(PENDING_UPDATE), - uc3_shipper_submitUpdatedBookingRequest() + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED) .thenAllPathsFrom(UPDATE_RECEIVED), uc4_carrier_rejectBookingRequest().thenAllPathsFrom(REJECTED), uc5_carrier_confirmBookingRequest().thenAllPathsFrom(CONFIRMED), - uc11_shipper_cancelBooking().thenAllPathsFrom(CANCELLED) + uc11_shipper_cancelBooking(CANCELLED).thenAllPathsFrom(CANCELLED) )); case START -> thenEither( uc1_shipper_SubmitBookingRequest().thenAllPathsFrom(RECEIVED)); @@ -316,21 +317,30 @@ private BookingScenarioListBuilder thenAllPathsFrom( shipperGetBooking(bookingState) .thenEither( uc6_carrier_requestToAmendConfirmedBooking().thenHappyPathFrom(PENDING_AMENDMENT), - uc7_shipper_submitBookingAmendment() - .thenAllPathsFrom(AMENDMENT_RECEIVED, PENDING_AMENDMENT), - uc10_carrier_declineBooking().thenHappyPathFrom(DECLINED), - uc11_shipper_cancelBooking().thenHappyPathFrom(CANCELLED), - uc13ShipperCancelConfirmedBooking().thenAllPathsFrom(CANCELLATION_RECEIVED, PENDING_AMENDMENT,null))); + uc10_carrier_declineBooking(null).thenHappyPathFrom(DECLINED), + uc11_shipper_cancelBooking(CANCELLED).thenHappyPathFrom(CANCELLED), + uc13ShipperCancelConfirmedBooking(PENDING_AMENDMENT, null, CANCELLATION_RECEIVED).thenAllPathsFrom(CANCELLATION_RECEIVED, PENDING_AMENDMENT,null))); case AMENDMENT_RECEIVED -> then( - shipperGetBooking(originalBookingState, AMENDMENT_RECEIVED,null,true) + originalBookingState.equals(PENDING_AMENDMENT) ? + shipperGetBooking(PENDING_AMENDMENT, AMENDMENT_RECEIVED,null,true) .thenEither( - uc6_carrier_requestToAmendConfirmedBooking().thenHappyPathFrom(PENDING_AMENDMENT), - uc8a_carrier_approveBookingAmendment().thenAllPathsFrom(AMENDMENT_CONFIRMED, CONFIRMED), - uc8b_carrier_declineBookingAmendment().thenAllPathsFrom(AMENDMENT_DECLINED, originalBookingState), - uc9_shipper_cancelBookingAmendment().thenAllPathsFrom(AMENDMENT_CANCELLED, originalBookingState), - uc10_carrier_declineBooking().thenHappyPathFrom(DECLINED), - uc13ShipperCancelConfirmedBooking().thenAllPathsFrom(CANCELLATION_RECEIVED, originalBookingState, AMENDMENT_RECEIVED ) - ) + uc7_shipper_submitBookingAmendment(CONFIRMED, AMENDMENT_RECEIVED) + .thenAllPathsFrom(AMENDMENT_RECEIVED, CONFIRMED), + uc8a_carrier_approveBookingAmendment(PENDING_AMENDMENT, AMENDMENT_CONFIRMED ).thenAllPathsFrom(AMENDMENT_CONFIRMED, PENDING_AMENDMENT), + uc8b_carrier_declineBookingAmendment(PENDING_AMENDMENT, AMENDMENT_DECLINED ).thenAllPathsFrom(AMENDMENT_DECLINED, PENDING_AMENDMENT), + uc9_shipper_cancelBookingAmendment(originalBookingState, AMENDMENT_CANCELLED).thenAllPathsFrom(AMENDMENT_CANCELLED, PENDING_AMENDMENT), + uc10_carrier_declineBooking(AMENDMENT_DECLINED).thenHappyPathFrom(DECLINED), + uc13ShipperCancelConfirmedBooking(originalBookingState, AMENDMENT_RECEIVED, CANCELLATION_RECEIVED).thenAllPathsFrom(CANCELLATION_RECEIVED, PENDING_AMENDMENT, AMENDMENT_RECEIVED ) + ) : + shipperGetBooking(CONFIRMED, AMENDMENT_RECEIVED,null,true) + .thenEither( + uc6_carrier_requestToAmendConfirmedBooking().thenHappyPathFrom(PENDING_AMENDMENT), + uc8a_carrier_approveBookingAmendment(CONFIRMED, AMENDMENT_CONFIRMED).thenAllPathsFrom(AMENDMENT_CONFIRMED, CONFIRMED), + uc8b_carrier_declineBookingAmendment(CONFIRMED, AMENDMENT_DECLINED).thenAllPathsFrom(AMENDMENT_DECLINED, CONFIRMED), + uc9_shipper_cancelBookingAmendment(CONFIRMED, AMENDMENT_CANCELLED), + uc10_carrier_declineBooking(AMENDMENT_DECLINED).thenHappyPathFrom(DECLINED), + uc13ShipperCancelConfirmedBooking(CONFIRMED, AMENDMENT_RECEIVED, CANCELLATION_RECEIVED).thenAllPathsFrom(CANCELLATION_RECEIVED, CONFIRMED, AMENDMENT_RECEIVED ) + ) ); case AMENDMENT_CONFIRMED -> then( shipperGetBooking(CONFIRMED,bookingState) @@ -339,7 +349,7 @@ private BookingScenarioListBuilder thenAllPathsFrom( .then(shipperGetBooking(CONFIRMED,bookingState)), uc5_carrier_confirmBookingRequest().thenHappyPathFrom(CONFIRMED), uc12_carrier_confirmBookingCompleted().then(shipperGetBooking(COMPLETED)), - uc13ShipperCancelConfirmedBooking().thenAllPathsFrom(CANCELLATION_RECEIVED, originalBookingState, AMENDMENT_CONFIRMED ) + uc13ShipperCancelConfirmedBooking(CONFIRMED, AMENDMENT_CONFIRMED, CANCELLATION_RECEIVED).thenAllPathsFrom(CANCELLATION_RECEIVED, originalBookingState, AMENDMENT_CONFIRMED ) ) ); case AMENDMENT_CANCELLED, AMENDMENT_DECLINED -> then( @@ -349,14 +359,14 @@ private BookingScenarioListBuilder thenAllPathsFrom( uc6_carrier_requestToAmendConfirmedBooking().thenHappyPathFrom(originalBookingState), auc_shipper_sendInvalidBookingAction(CANCEL_BOOKING_AMENDMENT) .then(shipperGetBooking(PENDING_AMENDMENT,bookingState)), - uc13ShipperCancelConfirmedBooking().thenAllPathsFrom(CANCELLATION_RECEIVED, PENDING_AMENDMENT, bookingState ) + uc13ShipperCancelConfirmedBooking(PENDING_AMENDMENT, bookingState, CANCELLATION_RECEIVED).thenAllPathsFrom(CANCELLATION_RECEIVED, PENDING_AMENDMENT, bookingState ) ): shipperGetBooking(CONFIRMED,bookingState).thenEither( noAction().thenHappyPathFrom(originalBookingState), uc5_carrier_confirmBookingRequest().thenHappyPathFrom(CONFIRMED), auc_shipper_sendInvalidBookingAction(CANCEL_BOOKING_AMENDMENT) .then(shipperGetBooking(CONFIRMED,bookingState)), - uc13ShipperCancelConfirmedBooking().thenAllPathsFrom(CANCELLATION_RECEIVED, CONFIRMED, bookingState ) + uc13ShipperCancelConfirmedBooking(CONFIRMED, bookingState, CANCELLATION_RECEIVED).thenAllPathsFrom(CANCELLATION_RECEIVED, CONFIRMED, bookingState ) ) ); }; @@ -366,8 +376,8 @@ private BookingScenarioListBuilder thenAllPathsFrom(BookingCancellationState can return switch (cancellationStatus) { case CANCELLATION_RECEIVED -> then ( shipperGetBooking(bookingStatus, amendedBookingStatus, CANCELLATION_RECEIVED).thenEither( - uc14CarrierBookingCancellationConfirmed().thenAllPathsFrom(CANCELLATION_CONFIRMED,bookingStatus,amendedBookingStatus), - uc14CarrierBookingCancellationDeclined().thenAllPathsFrom(CANCELLATION_DECLINED,bookingStatus,amendedBookingStatus)) + uc14CarrierBookingCancellationConfirmed(bookingStatus, amendedBookingStatus).thenAllPathsFrom(CANCELLATION_CONFIRMED, bookingStatus, amendedBookingStatus), + uc14CarrierBookingCancellationDeclined(bookingStatus, amendedBookingStatus).thenAllPathsFrom(CANCELLATION_DECLINED, bookingStatus, amendedBookingStatus)) ); case CANCELLATION_CONFIRMED -> then ( shipperGetBooking(bookingStatus, amendedBookingStatus, CANCELLATION_CONFIRMED)); @@ -396,13 +406,13 @@ private BookingScenarioListBuilder thenHappyPathFrom(BookingState bookingState, uc12_carrier_confirmBookingCompleted().thenHappyPathFrom(COMPLETED))); case PENDING_AMENDMENT -> then( shipperGetBooking(PENDING_AMENDMENT).then( - uc7_shipper_submitBookingAmendment().thenHappyPathFrom(AMENDMENT_RECEIVED,PENDING_AMENDMENT,scenarioType))); + uc7_shipper_submitBookingAmendment(PENDING_AMENDMENT, AMENDMENT_RECEIVED).thenHappyPathFrom(AMENDMENT_RECEIVED,PENDING_AMENDMENT,scenarioType))); case AMENDMENT_RECEIVED -> then( shipperGetBooking(originalBookingState,AMENDMENT_RECEIVED).then( - uc8a_carrier_approveBookingAmendment().thenHappyPathFrom(AMENDMENT_CONFIRMED,CONFIRMED,scenarioType))); + uc8a_carrier_approveBookingAmendment(CONFIRMED, AMENDMENT_CONFIRMED ).thenHappyPathFrom(AMENDMENT_CONFIRMED,CONFIRMED,scenarioType))); case PENDING_UPDATE -> then( shipperGetBooking(PENDING_UPDATE).then( - uc3_shipper_submitUpdatedBookingRequest().thenHappyPathFrom(UPDATE_RECEIVED, scenarioType))); + uc3_shipper_submitUpdatedBookingRequest(UPDATE_RECEIVED).thenHappyPathFrom(UPDATE_RECEIVED, scenarioType))); case UPDATE_RECEIVED -> then( shipperGetBooking(bookingState).thenEither( uc5_carrier_confirmBookingRequest().thenHappyPathFrom(CONFIRMED, scenarioType))); @@ -451,6 +461,8 @@ private static BookingScenarioListBuilder shipperGetBooking( return shipperGetBooking(expectedBookingStatus, expectedAmendedBookingStatus,null, false); } + + //TODO:: private static BookingScenarioListBuilder shipperGetBooking( BookingState expectedBookingStatus, BookingState expectedAmendedBookingStatus, BookingCancellationState bookingCancellationStatus) { return shipperGetBooking(expectedBookingStatus, expectedAmendedBookingStatus,null, false); @@ -485,7 +497,7 @@ private static BookingScenarioListBuilder uc1_shipper_SubmitBookingRequest() { shipperPartyName, (BookingAction) previousAction, componentFactory.getMessageSchemaValidator(BOOKING_API, CREATE_BOOKING_SCHEMA_NAME), - componentFactory.getMessageSchemaValidator(BOOKING_API, BOOKING_REF_STATUS_SCHEMA), + componentFactory.getMessageSchemaValidator(BOOKING_API, BOOKING_202_RESPONSE_SCHEMA), componentFactory.getMessageSchemaValidator( BOOKING_NOTIFICATIONS_API, BOOKING_NOTIFICATION_SCHEMA_NAME))); } @@ -509,7 +521,7 @@ private static BookingScenarioListBuilder uc2_carrier_requestUpdateToBookingRequ return carrierStateChange(UC2_Carrier_RequestUpdateToBookingRequestAction::new); } - private static BookingScenarioListBuilder uc3_shipper_submitUpdatedBookingRequest() { + private static BookingScenarioListBuilder uc3_shipper_submitUpdatedBookingRequest(BookingState expectedBookingState) { BookingComponentFactory componentFactory = threadLocalComponentFactory.get(); String carrierPartyName = threadLocalCarrierPartyName.get(); String shipperPartyName = threadLocalShipperPartyName.get(); @@ -519,8 +531,9 @@ private static BookingScenarioListBuilder uc3_shipper_submitUpdatedBookingReques carrierPartyName, shipperPartyName, (BookingAction) previousAction, + expectedBookingState, componentFactory.getMessageSchemaValidator(BOOKING_API, UPDATE_BOOKING_SCHEMA_NAME), - componentFactory.getMessageSchemaValidator(BOOKING_API, BOOKING_REF_STATUS_SCHEMA), + componentFactory.getMessageSchemaValidator(BOOKING_API, BOOKING_202_RESPONSE_SCHEMA), componentFactory.getMessageSchemaValidator( BOOKING_NOTIFICATIONS_API, BOOKING_NOTIFICATION_SCHEMA_NAME))); } @@ -537,7 +550,7 @@ private static BookingScenarioListBuilder uc6_carrier_requestToAmendConfirmedBoo return carrierStateChange(UC6_Carrier_RequestToAmendConfirmedBookingAction::new); } - private static BookingScenarioListBuilder uc7_shipper_submitBookingAmendment() { + private static BookingScenarioListBuilder uc7_shipper_submitBookingAmendment(BookingState bookingState, BookingState amendedBookingState) { BookingComponentFactory componentFactory = threadLocalComponentFactory.get(); String carrierPartyName = threadLocalCarrierPartyName.get(); String shipperPartyName = threadLocalShipperPartyName.get(); @@ -547,23 +560,25 @@ private static BookingScenarioListBuilder uc7_shipper_submitBookingAmendment() { carrierPartyName, shipperPartyName, (BookingAction) previousAction, + bookingState, + amendedBookingState, componentFactory.getMessageSchemaValidator(BOOKING_API, UPDATE_BOOKING_SCHEMA_NAME), - componentFactory.getMessageSchemaValidator(BOOKING_API, BOOKING_REF_STATUS_SCHEMA), + componentFactory.getMessageSchemaValidator(BOOKING_API, BOOKING_202_RESPONSE_SCHEMA), componentFactory.getMessageSchemaValidator( BOOKING_NOTIFICATIONS_API, BOOKING_NOTIFICATION_SCHEMA_NAME))); } - private static BookingScenarioListBuilder uc8a_carrier_approveBookingAmendment() { + private static BookingScenarioListBuilder uc8a_carrier_approveBookingAmendment(BookingState bookingStatus, BookingState amendedBookingStatus) { return carrierStateChange((carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator) -> - new UC8_Carrier_ProcessAmendmentAction(carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator, true)); + new UC8_Carrier_ProcessAmendmentAction(carrierPartyName, shipperPartyName, previousAction, bookingStatus, amendedBookingStatus, requestSchemaValidator, true)); } - private static BookingScenarioListBuilder uc8b_carrier_declineBookingAmendment() { + private static BookingScenarioListBuilder uc8b_carrier_declineBookingAmendment(BookingState bookingStatus, BookingState amendedBookingStatus) { return carrierStateChange((carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator) -> - new UC8_Carrier_ProcessAmendmentAction(carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator, false)); + new UC8_Carrier_ProcessAmendmentAction(carrierPartyName, shipperPartyName, previousAction, bookingStatus, amendedBookingStatus, requestSchemaValidator, false)); } - private static BookingScenarioListBuilder uc9_shipper_cancelBookingAmendment() { + private static BookingScenarioListBuilder uc9_shipper_cancelBookingAmendment(BookingState bookingStatus, BookingState amendedBookingStatus) { BookingComponentFactory componentFactory = threadLocalComponentFactory.get(); String carrierPartyName = threadLocalCarrierPartyName.get(); String shipperPartyName = threadLocalShipperPartyName.get(); @@ -573,23 +588,26 @@ private static BookingScenarioListBuilder uc9_shipper_cancelBookingAmendment() { carrierPartyName, shipperPartyName, (BookingAction) previousAction, + bookingStatus, + amendedBookingStatus, componentFactory.getMessageSchemaValidator(BOOKING_API, CANCEL_SCHEMA_NAME), componentFactory.getMessageSchemaValidator( - BOOKING_API, BOOKING_REF_STATUS_SCHEMA), + BOOKING_API, BOOKING_202_RESPONSE_SCHEMA), componentFactory.getMessageSchemaValidator( BOOKING_NOTIFICATIONS_API, BOOKING_NOTIFICATION_SCHEMA_NAME)) ); } - private static BookingScenarioListBuilder uc10_carrier_declineBooking() { - return carrierStateChange(UC10_Carrier_DeclineBookingAction::new); + private static BookingScenarioListBuilder uc10_carrier_declineBooking(BookingState amendedBookingStatus) { + return carrierStateChange((carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator) -> + new UC10_Carrier_DeclineBookingAction(carrierPartyName, shipperPartyName, previousAction, amendedBookingStatus, requestSchemaValidator)); } private static BookingScenarioListBuilder uc12_carrier_confirmBookingCompleted() { return carrierStateChange(UC12_Carrier_ConfirmBookingCompletedAction::new); } - private static BookingScenarioListBuilder uc11_shipper_cancelBooking() { + private static BookingScenarioListBuilder uc11_shipper_cancelBooking(BookingState expectedBookingStatus) { BookingComponentFactory componentFactory = threadLocalComponentFactory.get(); String carrierPartyName = threadLocalCarrierPartyName.get(); String shipperPartyName = threadLocalShipperPartyName.get(); @@ -599,14 +617,15 @@ private static BookingScenarioListBuilder uc11_shipper_cancelBooking() { carrierPartyName, shipperPartyName, (BookingAction) previousAction, + expectedBookingStatus, componentFactory.getMessageSchemaValidator(BOOKING_API, CANCEL_SCHEMA_NAME), componentFactory.getMessageSchemaValidator( - BOOKING_API, BOOKING_REF_STATUS_SCHEMA), + BOOKING_API, BOOKING_202_RESPONSE_SCHEMA), componentFactory.getMessageSchemaValidator( BOOKING_NOTIFICATIONS_API, BOOKING_NOTIFICATION_SCHEMA_NAME))); } - private static BookingScenarioListBuilder uc13ShipperCancelConfirmedBooking() { + private static BookingScenarioListBuilder uc13ShipperCancelConfirmedBooking(BookingState bookingStatus, BookingState amendedBookingStatus, BookingCancellationState cancellationBookingStatus) { BookingComponentFactory componentFactory = threadLocalComponentFactory.get(); String carrierPartyName = threadLocalCarrierPartyName.get(); String shipperPartyName = threadLocalShipperPartyName.get(); @@ -616,21 +635,24 @@ private static BookingScenarioListBuilder uc13ShipperCancelConfirmedBooking() { carrierPartyName, shipperPartyName, (BookingAction) previousAction, + bookingStatus, + amendedBookingStatus, + cancellationBookingStatus, componentFactory.getMessageSchemaValidator(BOOKING_API, CANCEL_SCHEMA_NAME), componentFactory.getMessageSchemaValidator( - BOOKING_API, BOOKING_REF_STATUS_SCHEMA), + BOOKING_API, BOOKING_202_RESPONSE_SCHEMA), componentFactory.getMessageSchemaValidator( BOOKING_NOTIFICATIONS_API, BOOKING_NOTIFICATION_SCHEMA_NAME))); } - private static BookingScenarioListBuilder uc14CarrierBookingCancellationConfirmed() { + private static BookingScenarioListBuilder uc14CarrierBookingCancellationConfirmed(BookingState bookingStatus, BookingState amendedBookingStatus) { return carrierStateChange((carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator) -> - new UC14CarrierProcessBookingCancellationAction(carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator, true)); + new UC14CarrierProcessBookingCancellationAction(carrierPartyName, shipperPartyName, previousAction, bookingStatus, amendedBookingStatus, requestSchemaValidator, true)); } - private static BookingScenarioListBuilder uc14CarrierBookingCancellationDeclined() { + private static BookingScenarioListBuilder uc14CarrierBookingCancellationDeclined(BookingState bookingStatus, BookingState amendedBookingStatus) { return carrierStateChange((carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator) -> - new UC14CarrierProcessBookingCancellationAction(carrierPartyName, shipperPartyName, previousAction, requestSchemaValidator, false)); + new UC14CarrierProcessBookingCancellationAction(carrierPartyName, shipperPartyName, previousAction, bookingStatus, amendedBookingStatus, requestSchemaValidator, false)); } private static BookingScenarioListBuilder auc_shipper_sendInvalidBookingAction(InvalidBookingMessageType invalidBookingMessageType) { diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/BookingAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/BookingAction.java index 85472527..155ac1c4 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/BookingAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/BookingAction.java @@ -32,7 +32,7 @@ protected BookingAction( this.expectedStatus = expectedStatus; this.dspReference = previousAction == null - ? new OverwritingReference<>(null, new DynamicScenarioParameters(ScenarioType.REGULAR, null, null, null, null, null, null, null)) + ? new OverwritingReference<>(null, new DynamicScenarioParameters(ScenarioType.REGULAR, null, null, null, null)) : new OverwritingReference<>(previousAction.dspReference, null); } @@ -127,16 +127,10 @@ protected void updateDSPFromResponsePayload(ConformanceExchange exchange) { getCbrFromNotificationPayload(requestJsonNode) : responseJsonNode.path("carrierBookingReference").asText(null); var newCbrr = responseJsonNode.path("carrierBookingRequestReference").asText(null); - var newBookingStatus = parseBookingState(responseJsonNode.path("bookingStatus").asText(null)); - var newAmendedBookingStatus = parseBookingState(responseJsonNode.path("amendedBookingStatus").asText(null)); - var newBookingCancellationStatus = parseBookingCancellationState(responseJsonNode.path("bookingCancellationStatus").asText(null)); var updatedDsp = dsp; updatedDsp = updateIfNotNull(updatedDsp, newCbrr, updatedDsp::withCarrierBookingRequestReference); updatedDsp = updateIfNotNull(updatedDsp, newCbr, updatedDsp::withCarrierBookingReference); - updatedDsp = updateIfNotNull(updatedDsp, newBookingStatus, updatedDsp::withBookingStatus); - updatedDsp = updateIfNotNull(updatedDsp, newAmendedBookingStatus, updatedDsp::withAmendedBookingStatus); - updatedDsp = updateIfNotNull(updatedDsp, newBookingCancellationStatus, updatedDsp::withBookingCancellationStatus); updatedDsp = updateDSPFromBookingAction(exchange, updatedDsp); diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC10_Carrier_DeclineBookingAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC10_Carrier_DeclineBookingAction.java index 1ec8e8f8..5544267d 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC10_Carrier_DeclineBookingAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC10_Carrier_DeclineBookingAction.java @@ -12,14 +12,17 @@ @Getter public class UC10_Carrier_DeclineBookingAction extends StateChangingBookingAction { private final JsonSchemaValidator requestSchemaValidator; + private final BookingState expectedAmendedBookingStatus; public UC10_Carrier_DeclineBookingAction( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedAmendedBookingStatus, JsonSchemaValidator requestSchemaValidator) { super(carrierPartyName, shipperPartyName, previousAction, "UC10", 204); this.requestSchemaValidator = requestSchemaValidator; + this.expectedAmendedBookingStatus = expectedAmendedBookingStatus; } @Override @@ -53,7 +56,7 @@ protected Stream createSubChecks() { new CarrierBookingNotificationDataPayloadRequestConformanceCheck( getMatchedExchangeUuid(), BookingState.DECLINED, - dsp.amendedBookingStatus() != null ? BookingState.AMENDMENT_DECLINED : null), + expectedAmendedBookingStatus), ApiHeaderCheck.createNotificationCheck( BookingRole::isCarrier, getMatchedExchangeUuid(), diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC11_Shipper_CancelBookingRequestAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC11_Shipper_CancelBookingRequestAction.java index 66d2a058..b5146523 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC11_Shipper_CancelBookingRequestAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC11_Shipper_CancelBookingRequestAction.java @@ -18,18 +18,21 @@ public class UC11_Shipper_CancelBookingRequestAction extends StateChangingBookin private final JsonSchemaValidator requestSchemaValidator; private final JsonSchemaValidator responseSchemaValidator; private final JsonSchemaValidator notificationSchemaValidator; + private final BookingState expectedBookingStatus; public UC11_Shipper_CancelBookingRequestAction( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedBookingStatus, JsonSchemaValidator requestSchemaValidator, JsonSchemaValidator responseSchemaValidator, JsonSchemaValidator notificationSchemaValidator) { - super(shipperPartyName, carrierPartyName, previousAction, "UC11", 200); + super(shipperPartyName, carrierPartyName, previousAction, "UC11", 202); this.requestSchemaValidator = requestSchemaValidator; this.responseSchemaValidator = responseSchemaValidator; this.notificationSchemaValidator = notificationSchemaValidator; + this.expectedBookingStatus = expectedBookingStatus; } @Override @@ -63,15 +66,7 @@ protected Stream createSubChecks() { String cbrr = dsp.carrierBookingRequestReference(); return Stream.concat( Stream.concat(createPrimarySubChecks("PATCH", expectedApiVersion, "/v2/bookings/%s".formatted(cbrr)), - Stream.of(new CarrierBookingRefStatusPayloadResponseConformanceCheck( - getMatchedExchangeUuid(), - BookingState.CANCELLED - ), - new JsonSchemaCheck( - BookingRole::isCarrier, - getMatchedExchangeUuid(), - HttpMessageType.RESPONSE, - responseSchemaValidator), + Stream.of( new JsonSchemaCheck( BookingRole::isShipper, getMatchedExchangeUuid(), @@ -80,7 +75,7 @@ protected Stream createSubChecks() { getNotificationChecks( expectedApiVersion, notificationSchemaValidator, - BookingState.CANCELLED, + expectedBookingStatus, null)); } }; diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC13ShipperCancelConfirmedBookingAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC13ShipperCancelConfirmedBookingAction.java index 8e73a508..aecdc57b 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC13ShipperCancelConfirmedBookingAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC13ShipperCancelConfirmedBookingAction.java @@ -8,7 +8,9 @@ import org.dcsa.conformance.core.traffic.ConformanceExchange; import org.dcsa.conformance.core.traffic.HttpMessageType; import org.dcsa.conformance.standards.booking.checks.CarrierBookingRefStatusPayloadResponseConformanceCheck; +import org.dcsa.conformance.standards.booking.party.BookingCancellationState; import org.dcsa.conformance.standards.booking.party.BookingRole; +import org.dcsa.conformance.standards.booking.party.BookingState; import org.dcsa.conformance.standards.booking.party.DynamicScenarioParameters; import java.util.Objects; @@ -20,18 +22,27 @@ public class UC13ShipperCancelConfirmedBookingAction extends StateChangingBookin private final JsonSchemaValidator requestSchemaValidator; private final JsonSchemaValidator responseSchemaValidator; private final JsonSchemaValidator notificationSchemaValidator; + private final BookingState expectedBookingStatus; + private final BookingState expectedAmendedBookingStatus; + private final BookingCancellationState expectedBookingCancellationStatus; public UC13ShipperCancelConfirmedBookingAction( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedBookingStatus, + BookingState expectedAmendedBookingStatus, + BookingCancellationState expectedBookingCancellationStatus, JsonSchemaValidator requestSchemaValidator, JsonSchemaValidator responseSchemaValidator, JsonSchemaValidator notificationSchemaValidator) { - super(shipperPartyName, carrierPartyName, previousAction, "UC13", 200); + super(shipperPartyName, carrierPartyName, previousAction, "UC13", 202); this.requestSchemaValidator = requestSchemaValidator; this.responseSchemaValidator = responseSchemaValidator; this.notificationSchemaValidator = notificationSchemaValidator; + this.expectedBookingStatus = expectedBookingStatus; + this.expectedAmendedBookingStatus = expectedAmendedBookingStatus; + this.expectedBookingCancellationStatus = expectedBookingCancellationStatus; } @Override @@ -69,28 +80,14 @@ public ConformanceCheck createCheck(String expectedApiVersion) { protected Stream createSubChecks() { var dsp = getDspSupplier().get(); String cbr = dsp.carrierBookingReference(); - var expectedBookingStatus = getDspSupplier().get().bookingStatus(); - var expectedAmendedBookingStatus = getDspSupplier().get().amendedBookingStatus(); - var expectedBookingCancellationStatus = getDspSupplier().get().bookingCancellationStatus(); return Stream.concat( Stream.concat(createPrimarySubChecks("PATCH",expectedApiVersion,"/v2/bookings/%s".formatted(cbr)), Stream.of( - expectedBookingStatus == null ? null: new CarrierBookingRefStatusPayloadResponseConformanceCheck( - getMatchedExchangeUuid(), - expectedBookingStatus, - expectedAmendedBookingStatus, - expectedBookingCancellationStatus - ), new JsonSchemaCheck( BookingRole::isShipper, getMatchedExchangeUuid(), HttpMessageType.REQUEST, - requestSchemaValidator), - new JsonSchemaCheck( - BookingRole::isCarrier, - getMatchedExchangeUuid(), - HttpMessageType.RESPONSE, - responseSchemaValidator)).filter(Objects::nonNull)), + requestSchemaValidator))), expectedBookingStatus != null ? getNotificationChecks( expectedApiVersion, notificationSchemaValidator, diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC14CarrierProcessBookingCancellationAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC14CarrierProcessBookingCancellationAction.java index a798bdba..fb662de8 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC14CarrierProcessBookingCancellationAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC14CarrierProcessBookingCancellationAction.java @@ -7,6 +7,7 @@ import org.dcsa.conformance.standards.booking.checks.CarrierBookingNotificationDataPayloadRequestConformanceCheck; import org.dcsa.conformance.standards.booking.party.BookingCancellationState; import org.dcsa.conformance.standards.booking.party.BookingRole; +import org.dcsa.conformance.standards.booking.party.BookingState; import java.util.Objects; import java.util.stream.Stream; @@ -15,16 +16,22 @@ public class UC14CarrierProcessBookingCancellationAction extends StateChangingBookingAction { private final JsonSchemaValidator requestSchemaValidator; private final boolean isCancellationConfirmed; + private final BookingState expectedBookingStatus; + private final BookingState expectedAmendedBookingStatus; public UC14CarrierProcessBookingCancellationAction( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedBookingStatus, + BookingState expectedAmendedBookingStatus, JsonSchemaValidator requestSchemaValidator, boolean isCancellationConfirmed) { super(carrierPartyName, shipperPartyName, previousAction, "UC14", 204); this.requestSchemaValidator = requestSchemaValidator; this.isCancellationConfirmed = isCancellationConfirmed; + this.expectedBookingStatus = expectedBookingStatus; + this.expectedAmendedBookingStatus = expectedAmendedBookingStatus; } @Override @@ -48,21 +55,18 @@ public ConformanceCheck createCheck(String expectedApiVersion) { return new ConformanceCheck(getActionTitle()) { @Override protected Stream createSubChecks() { - var dsp = getDspSupplier().get(); - var bookingStatus = dsp.bookingStatus(); - var amendedBookingStatus = dsp.amendedBookingStatus(); - var isCancelled = isCancellationConfirmed ? + var cancelledStatus = isCancellationConfirmed ? BookingCancellationState.CANCELLATION_CONFIRMED : BookingCancellationState.CANCELLATION_DECLINED; return Stream.of( new UrlPathCheck( BookingRole::isCarrier, getMatchedExchangeUuid(), "/v2/booking-notifications"), new ResponseStatusCheck( BookingRole::isShipper, getMatchedExchangeUuid(), expectedStatus), - bookingStatus == null ? null: new CarrierBookingNotificationDataPayloadRequestConformanceCheck( + new CarrierBookingNotificationDataPayloadRequestConformanceCheck( getMatchedExchangeUuid(), - bookingStatus, - amendedBookingStatus, - isCancelled), + expectedBookingStatus, + expectedAmendedBookingStatus, + cancelledStatus), ApiHeaderCheck.createNotificationCheck( BookingRole::isCarrier, getMatchedExchangeUuid(), 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 582d6234..d067a32b 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 @@ -28,7 +28,7 @@ public UC1_Shipper_SubmitBookingRequestAction( JsonSchemaValidator requestSchemaValidator, JsonSchemaValidator responseSchemaValidator, JsonSchemaValidator notificationSchemaValidator) { - super(shipperPartyName, carrierPartyName, previousAction, "UC1", 201); + super(shipperPartyName, carrierPartyName, previousAction, "UC1", 202); this.requestSchemaValidator = requestSchemaValidator; this.responseSchemaValidator = responseSchemaValidator; this.notificationSchemaValidator = notificationSchemaValidator; @@ -63,24 +63,14 @@ public ConformanceCheck createCheck(String expectedApiVersion) { return new ConformanceCheck(getActionTitle()) { @Override protected Stream createSubChecks() { - return Stream.concat( Stream.of( - new CarrierBookingRefStatusPayloadResponseConformanceCheck( - getMatchedExchangeUuid(), - BookingState.RECEIVED - ), BookingChecks.requestContentChecks(getMatchedExchangeUuid(), expectedApiVersion, getCspSupplier(), getDspSupplier()), new JsonSchemaCheck( BookingRole::isShipper, getMatchedExchangeUuid(), HttpMessageType.REQUEST, - requestSchemaValidator), - new JsonSchemaCheck( - BookingRole::isCarrier, - getMatchedExchangeUuid(), - HttpMessageType.RESPONSE, - responseSchemaValidator)), + requestSchemaValidator)), Stream.concat(createPrimarySubChecks("POST", expectedApiVersion, "/v2/bookings"), getNotificationChecks( expectedApiVersion, 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 bfb611b7..5b5b1897 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 @@ -18,18 +18,21 @@ public class UC3_Shipper_SubmitUpdatedBookingRequestAction extends StateChanging private final JsonSchemaValidator requestSchemaValidator; private final JsonSchemaValidator responseSchemaValidator; private final JsonSchemaValidator notificationSchemaValidator; + private final BookingState expectedBookingState; public UC3_Shipper_SubmitUpdatedBookingRequestAction( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedBookingState, JsonSchemaValidator requestSchemaValidator, JsonSchemaValidator responseSchemaValidator, JsonSchemaValidator notificationSchemaValidator) { - super(shipperPartyName, carrierPartyName, previousAction, "UC3", 200); + super(shipperPartyName, carrierPartyName, previousAction, "UC3", 202); this.requestSchemaValidator = requestSchemaValidator; this.responseSchemaValidator = responseSchemaValidator; this.notificationSchemaValidator = notificationSchemaValidator; + this.expectedBookingState = expectedBookingState; } @Override @@ -68,18 +71,13 @@ protected Stream createSubChecks() { getMatchedExchangeUuid(), HttpMessageType.REQUEST, requestSchemaValidator), - new JsonSchemaCheck( - BookingRole::isCarrier, - getMatchedExchangeUuid(), - HttpMessageType.RESPONSE, - responseSchemaValidator), BookingChecks.requestContentChecks(getMatchedExchangeUuid(),expectedApiVersion, getCspSupplier(), getDspSupplier())), Stream.concat( createPrimarySubChecks("PUT", expectedApiVersion, "/v2/bookings/%s".formatted(cbrr)), getNotificationChecks( expectedApiVersion, notificationSchemaValidator, - BookingState.UPDATE_RECEIVED, + expectedBookingState, null))); } }; 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 ffba5f2c..b02b91d0 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 @@ -20,18 +20,24 @@ public class UC7_Shipper_SubmitBookingAmendment extends StateChangingBookingActi private final JsonSchemaValidator requestSchemaValidator; private final JsonSchemaValidator responseSchemaValidator; private final JsonSchemaValidator notificationSchemaValidator; + private final BookingState expectedBookingStatus; + private final BookingState expectedAmendedBookingStatus; public UC7_Shipper_SubmitBookingAmendment( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedBookingStatus, + BookingState expectedAmendedBookingStatus, JsonSchemaValidator requestSchemaValidator, JsonSchemaValidator responseSchemaValidator, JsonSchemaValidator notificationSchemaValidator) { - super(shipperPartyName, carrierPartyName, previousAction, "UC7", 200); + super(shipperPartyName, carrierPartyName, previousAction, "UC7", 202); this.requestSchemaValidator = requestSchemaValidator; this.responseSchemaValidator = responseSchemaValidator; this.notificationSchemaValidator = notificationSchemaValidator; + this.expectedBookingStatus = expectedBookingStatus; + this.expectedAmendedBookingStatus = expectedAmendedBookingStatus; } @Override @@ -65,29 +71,19 @@ public ConformanceCheck createCheck(String expectedApiVersion) { protected Stream createSubChecks() { var dsp = getDspSupplier().get(); String reference = dsp.carrierBookingReference() != null ? dsp.carrierBookingReference() : dsp.carrierBookingRequestReference(); - var expectedBookingStatus = dsp.bookingStatus(); return Stream.concat( Stream.concat( createPrimarySubChecks("PUT", expectedApiVersion, "/v2/bookings/%s".formatted(reference)), - Stream.of(new CarrierBookingRefStatusPayloadResponseConformanceCheck( - getMatchedExchangeUuid(), - expectedBookingStatus, - BookingState.AMENDMENT_RECEIVED - ), + Stream.of( new JsonSchemaCheck( BookingRole::isShipper, getMatchedExchangeUuid(), HttpMessageType.REQUEST, - requestSchemaValidator), - new JsonSchemaCheck( - BookingRole::isCarrier, - getMatchedExchangeUuid(), - HttpMessageType.RESPONSE, - responseSchemaValidator))), + requestSchemaValidator))), getNotificationChecks( expectedApiVersion, notificationSchemaValidator, expectedBookingStatus, - BookingState.AMENDMENT_RECEIVED)); + expectedAmendedBookingStatus)); } }; } diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC8_Carrier_ProcessAmendmentAction.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC8_Carrier_ProcessAmendmentAction.java index 86a287c7..2713ed98 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC8_Carrier_ProcessAmendmentAction.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC8_Carrier_ProcessAmendmentAction.java @@ -12,6 +12,8 @@ @Getter public class UC8_Carrier_ProcessAmendmentAction extends StateChangingBookingAction { private final JsonSchemaValidator requestSchemaValidator; + private final BookingState expectedBookingStatus; + private final BookingState expectedAmendedBookingStatus; private final boolean acceptAmendment; @@ -19,6 +21,8 @@ public UC8_Carrier_ProcessAmendmentAction( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedBookingStatus, + BookingState expectedAmendedBookingStatus, JsonSchemaValidator requestSchemaValidator, boolean acceptAmendment) { super( @@ -29,6 +33,8 @@ public UC8_Carrier_ProcessAmendmentAction( 204); this.requestSchemaValidator = requestSchemaValidator; this.acceptAmendment = acceptAmendment; + this.expectedBookingStatus = expectedBookingStatus; + this.expectedAmendedBookingStatus = expectedAmendedBookingStatus; } @Override @@ -54,8 +60,6 @@ public ConformanceCheck createCheck(String expectedApiVersion) { return new ConformanceCheck(getActionTitle()) { @Override protected Stream createSubChecks() { - var dsp = getDspSupplier().get(); - var bookingStatus = dsp.bookingStatus(); return Stream.of( new UrlPathCheck( BookingRole::isCarrier, getMatchedExchangeUuid(), "/v2/booking-notifications"), @@ -63,10 +67,8 @@ protected Stream createSubChecks() { BookingRole::isShipper, getMatchedExchangeUuid(), expectedStatus), new CarrierBookingNotificationDataPayloadRequestConformanceCheck( getMatchedExchangeUuid(), - acceptAmendment ? BookingState.CONFIRMED : bookingStatus, - acceptAmendment - ? BookingState.AMENDMENT_CONFIRMED - : BookingState.AMENDMENT_DECLINED), + expectedBookingStatus, + expectedAmendedBookingStatus), ApiHeaderCheck.createNotificationCheck( BookingRole::isCarrier, getMatchedExchangeUuid(), diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC9_Shipper_CancelBookingAmendment.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC9_Shipper_CancelBookingAmendment.java index 461771fa..187eb1ae 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC9_Shipper_CancelBookingAmendment.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/action/UC9_Shipper_CancelBookingAmendment.java @@ -17,18 +17,24 @@ public class UC9_Shipper_CancelBookingAmendment extends StateChangingBookingActi private final JsonSchemaValidator requestSchemaValidator; private final JsonSchemaValidator responseSchemaValidator; private final JsonSchemaValidator notificationSchemaValidator; + private final BookingState expectedBookingStatus; + private final BookingState expectedAmendedBookingStatus; public UC9_Shipper_CancelBookingAmendment( String carrierPartyName, String shipperPartyName, BookingAction previousAction, + BookingState expectedBookingStatus, + BookingState expectedAmendedBookingStatus, JsonSchemaValidator requestSchemaValidator, JsonSchemaValidator responseSchemaValidator, JsonSchemaValidator notificationSchemaValidator) { - super(shipperPartyName, carrierPartyName, previousAction, "UC9", 200); + super(shipperPartyName, carrierPartyName, previousAction, "UC9", 202); this.requestSchemaValidator = requestSchemaValidator; this.responseSchemaValidator = responseSchemaValidator; this.notificationSchemaValidator = notificationSchemaValidator; + this.expectedBookingStatus = expectedBookingStatus; + this.expectedAmendedBookingStatus = expectedAmendedBookingStatus; } @Override @@ -56,28 +62,19 @@ public ConformanceCheck createCheck(String expectedApiVersion) { protected Stream createSubChecks() { var dsp = getDspSupplier().get(); String reference = dsp.carrierBookingReference() != null ? dsp.carrierBookingReference() : dsp.carrierBookingRequestReference(); - var expectedBookingStatus = getDspSupplier().get().bookingStatus(); return Stream.concat( Stream.concat(createPrimarySubChecks("PATCH", expectedApiVersion, "/v2/bookings/%s".formatted(reference)), - Stream.of(new CarrierBookingRefStatusPayloadResponseConformanceCheck( - getMatchedExchangeUuid(), - expectedBookingStatus, - BookingState.AMENDMENT_CANCELLED), + Stream.of( new JsonSchemaCheck( BookingRole::isShipper, getMatchedExchangeUuid(), HttpMessageType.REQUEST, - requestSchemaValidator), - new JsonSchemaCheck( - BookingRole::isCarrier, - getMatchedExchangeUuid(), - HttpMessageType.RESPONSE, - responseSchemaValidator))), + requestSchemaValidator))), getNotificationChecks( expectedApiVersion, notificationSchemaValidator, expectedBookingStatus, - BookingState.AMENDMENT_CANCELLED)); + expectedAmendedBookingStatus)); } }; } diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingCarrier.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingCarrier.java index ffa29f63..d7271e1c 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingCarrier.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/BookingCarrier.java @@ -504,7 +504,7 @@ private ConformanceResponse _handlePutBookingRequest(ConformanceRequest request) .subscriptionReference(persistableCarrierBooking.getSubscriptionReference()) .build() .asJsonNode()); - return returnBookingStatusResponse(200, request, booking, cbrr); + return returnEmpty202Response( request, booking, cbrr); } private ConformanceResponse _handlePatchBookingRequest(ConformanceRequest request) { @@ -551,46 +551,46 @@ private ConformanceResponse _handlePatchBookingRequest(ConformanceRequest reques .build() .asJsonNode()); - return returnBookingStatusResponse( - 200, request, persistableCarrierBooking.getBooking(), bookingReference); + return returnEmpty202Response( + request, persistableCarrierBooking.getBooking(), bookingReference); } - private ConformanceResponse returnBookingStatusResponse( - int responseCode, ConformanceRequest request, ObjectNode booking, String bookingReference) { + private ConformanceResponse returnBookingCBRRResponse(ConformanceRequest request, ObjectNode booking, String bookingReference) { var cbrr = booking.get(CARRIER_BOOKING_REQUEST_REFERENCE).asText(); var bookingStatus = booking.get("bookingStatus").asText(); var statusObject = - OBJECT_MAPPER - .createObjectNode() - .put("bookingStatus", bookingStatus) - .put(CARRIER_BOOKING_REQUEST_REFERENCE, cbrr); - var cbr = booking.get(CARRIER_BOOKING_REFERENCE); - var amendedBookingStatus = booking.get("amendedBookingStatus"); - var bookingCancellationStatus = booking.get(BOOKING_CANCELLATION_STATUS); + OBJECT_MAPPER + .createObjectNode() + .put(CARRIER_BOOKING_REQUEST_REFERENCE, cbrr); var reason = booking.get("reason"); - if (cbr != null) { - statusObject.set(CARRIER_BOOKING_REFERENCE, cbr); - } - if (amendedBookingStatus != null) { - statusObject.set("amendedBookingStatus", amendedBookingStatus); - } - if (bookingCancellationStatus != null) { - statusObject.set(BOOKING_CANCELLATION_STATUS, bookingCancellationStatus); - } if (reason != null) { statusObject.set("reason", reason); } ConformanceResponse response = - request.createResponse( - responseCode, - Map.of("Api-Version", List.of(apiVersion)), - new ConformanceMessageBody(statusObject)); + request.createResponse( + 202, + Map.of("Api-Version", List.of(apiVersion)), + new ConformanceMessageBody(statusObject)); + addOperatorLogEntry( + "Responded %d to %s booking '%s' (resulting state '%s')" + .formatted(202, request.method(), bookingReference, bookingStatus)); + return response; + } + + private ConformanceResponse returnEmpty202Response(ConformanceRequest request, ObjectNode booking, String bookingReference) { + var bookingStatus = booking.get("bookingStatus").asText(); + ConformanceResponse response = + request.createResponse( + 202, + Map.of("Api-Version", List.of(apiVersion)), + new ConformanceMessageBody("")); addOperatorLogEntry( - "Responded %d to %s booking '%s' (resulting state '%s')" - .formatted(responseCode, request.method(), bookingReference, bookingStatus)); + "Responded %d to %s booking '%s' (resulting state '%s')" + .formatted(202, request.method(), bookingReference, bookingStatus)); return response; } + private ConformanceResponse _handleGetBookingRequest(ConformanceRequest request) { var amendedContentRaw = readAmendedContent(request); boolean amendedContent; @@ -651,8 +651,7 @@ private ConformanceResponse _handlePostBookingRequest(ConformanceRequest request .build() .asJsonNode()); - return returnBookingStatusResponse( - 201, + return returnBookingCBRRResponse( request, bookingRequestPayload, persistableCarrierBooking.getCarrierBookingRequestReference()); diff --git a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/DynamicScenarioParameters.java b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/DynamicScenarioParameters.java index d38b9c51..924a6b03 100644 --- a/booking/src/main/java/org/dcsa/conformance/standards/booking/party/DynamicScenarioParameters.java +++ b/booking/src/main/java/org/dcsa/conformance/standards/booking/party/DynamicScenarioParameters.java @@ -15,9 +15,6 @@ public record DynamicScenarioParameters( ScenarioType scenarioType, String carrierBookingRequestReference, String carrierBookingReference, - BookingState bookingStatus, - BookingState amendedBookingStatus, - BookingCancellationState bookingCancellationStatus, JsonNode booking, JsonNode updatedBooking ) { @@ -30,15 +27,6 @@ public ObjectNode toJson() { if (carrierBookingReference != null) { dspNode.put("carrierBookingReference", carrierBookingReference); } - if (bookingStatus != null) { - dspNode.put("bookingStatus", bookingStatus.name()); - } - if (amendedBookingStatus != null) { - dspNode.put("amendedBookingStatus", amendedBookingStatus.name()); - } - if (bookingCancellationStatus != null) { - dspNode.put("bookingCancellationStatus", bookingCancellationStatus.name()); - } if (booking != null) { dspNode.replace("booking", booking); } @@ -75,9 +63,6 @@ public static DynamicScenarioParameters fromJson(JsonNode jsonNode) { readEnum(jsonNode.required("scenarioType").asText(), ScenarioType::valueOf), dspNode.path("carrierBookingRequestReference").asText(null), dspNode.path("carrierBookingReference").asText(null), - bookingState(dspNode.path("bookingStatus").asText(null)), - bookingState(dspNode.path("amendedBookingStatus").asText(null)), - bookingCancellationState(dspNode.path("bookingCancellationStatus").asText(null)), dspNode.path("booking"), dspNode.path("updatedBooking") );