Skip to content

Commit

Permalink
SD-589 Handle exception and add unit test cases (#238)
Browse files Browse the repository at this point in the history
  • Loading branch information
preetamnpr authored Dec 6, 2024
1 parent 7dcce1f commit 1ef13f3
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ private static JsonNode getShipmentLocationTypeCode(JsonNode body, @NonNull Stri
body -> {
var bookingStatus = body.path("bookingStatus").asText("");
var issues = new LinkedHashSet<String>();
if (PENDING_CHANGES_STATES.contains(BookingState.valueOf(bookingStatus))) {
if (PENDING_CHANGES_STATES.contains(BookingState.fromString(bookingStatus))) {
var feedbacks = body.get("feedbacks");
if (feedbacks == null) {
issues.add("feedbacks is missing in allowed booking states %s".formatted(PENDING_CHANGES_STATES));
Expand All @@ -428,11 +428,11 @@ private static JsonNode getShipmentLocationTypeCode(JsonNode body, @NonNull Stri
var issues = new LinkedHashSet<String>();
var status = amendedBookingStatus.isMissingNode() || amendedBookingStatus.isNull() ? bookingStatus : amendedBookingStatus;
var reason = body.get("reason");
if (REASON_PRESENCE_STATES.contains(BookingState.valueOf(status.asText())) && reason == null) {
if (REASON_PRESENCE_STATES.contains(BookingState.fromString(status.asText())) && reason == null) {
issues.add("reason is missing in the Booking States %s".formatted(REASON_PRESENCE_STATES));
}
if(!bookingCancellationStatus.isMissingNode() && REASON_PRESENCE_CANCELLATION_STATES
.contains(BookingCancellationState.valueOf(bookingCancellationStatus.asText()))
.contains(BookingCancellationState.fromString(bookingCancellationStatus.asText()))
&& reason == null) {
issues.add("reason is missing in the Booking States %s".formatted(REASON_PRESENCE_CANCELLATION_STATES));
}
Expand All @@ -448,7 +448,7 @@ private static JsonNode getShipmentLocationTypeCode(JsonNode body, @NonNull Stri
var bookingCancellationStatus = body.path(ATTR_BOOKING_CANCELLATION_STATUS);
var issues = new LinkedHashSet<String>();
var status = amendedBookingStatus.isMissingNode() || amendedBookingStatus.isNull() ? bookingStatus : amendedBookingStatus;
if (REASON_ABSENCE_STATES.contains(BookingState.valueOf(status.asText())) && bookingCancellationStatus == null) {
if (REASON_ABSENCE_STATES.contains(BookingState.fromString(status.asText())) && bookingCancellationStatus == null) {
if (body.hasNonNull("reason")) {
issues.add("reason must not be in the Booking States %s".formatted(REASON_ABSENCE_STATES));
}
Expand All @@ -463,7 +463,7 @@ private static JsonNode getShipmentLocationTypeCode(JsonNode body, @NonNull Stri
body -> {
var issues = new LinkedHashSet<String>();
var bookingStatus = body.path("bookingStatus").asText("");
if (NON_CONFIRMED_BOOKING_STATES.contains(BookingState.valueOf(bookingStatus))) {
if (NON_CONFIRMED_BOOKING_STATES.contains(BookingState.fromString(bookingStatus))) {
if (body.hasNonNull("termsAndConditions")) {
issues.add("termsAndConditions must not be present in %s".formatted(bookingStatus));
}
Expand Down Expand Up @@ -494,7 +494,7 @@ private static JsonNode getShipmentLocationTypeCode(JsonNode body, @NonNull Stri
body -> {
var issues = new LinkedHashSet<String>();
var bookingStatus = body.path("bookingStatus").asText("");
if (CONFIRMED_BOOKING_STATES.contains(BookingState.valueOf(bookingStatus))) {
if (CONFIRMED_BOOKING_STATES.contains(BookingState.fromString(bookingStatus))) {
if (body.path("confirmedEquipments").isEmpty()) {
issues.add("confirmedEquipments for confirmed booking is not present");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,19 +351,19 @@ private void ensureFeedbacksExist(ObjectNode booking) {

public BookingState getOriginalBookingState() {
var booking = getBooking();
return BookingState.valueOf(booking.required(BOOKING_STATUS).asText());
return BookingState.fromString(booking.required(BOOKING_STATUS).asText());
}

public BookingState getBookingAmendedState() {
var booking = getBooking();
var s = booking.path(AMENDED_BOOKING_STATUS);
return !s.asText("").isEmpty()? BookingState.valueOf(s.asText()) : null;
return !s.asText("").isEmpty()? BookingState.fromString(s.asText()) : null;
}

public BookingCancellationState getBookingCancellationState() {
var booking = getBooking();
var s = booking.path(CANCELLATION_BOOKING_STATUS);
return !s.asText("").isEmpty()? BookingCancellationState.valueOf(s.asText()) : null;
return !s.asText("").isEmpty()? BookingCancellationState.fromString(s.asText()) : null;
}

public static PersistableCarrierBooking initializeFromBookingRequest(ObjectNode bookingRequest) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,13 @@
public enum BookingCancellationState {
CANCELLATION_RECEIVED,
CANCELLATION_CONFIRMED,
CANCELLATION_DECLINED
CANCELLATION_DECLINED;

public static BookingCancellationState fromString(String bookingCancellationStateName) {
try {
return valueOf(bookingCancellationStateName);
} catch (IllegalArgumentException | NullPointerException e) {
throw new IllegalArgumentException("Unknown booking cancellation state: " + bookingCancellationStateName);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,14 @@ public enum BookingState {
AMENDMENT_CONFIRMED,
AMENDMENT_DECLINED,
AMENDMENT_CANCELLED,
COMPLETED
COMPLETED;

public static BookingState fromString(String bookingStateName) {
try {
return valueOf(bookingStateName); // Case-sensitive
} catch (IllegalArgumentException | NullPointerException e) {
throw new IllegalArgumentException("Unknown booking state: " + bookingStateName);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.dcsa.conformance.standards.booking.party;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class BookingCancellationStateTest {

@Test
void testFromString_validInput() {
assertEquals(
BookingCancellationState.CANCELLATION_RECEIVED,
BookingCancellationState.fromString("CANCELLATION_RECEIVED"));
assertEquals(
BookingCancellationState.CANCELLATION_CONFIRMED,
BookingCancellationState.fromString("CANCELLATION_CONFIRMED"));
assertEquals(
BookingCancellationState.CANCELLATION_DECLINED,
BookingCancellationState.fromString("CANCELLATION_DECLINED"));
}

@Test
void testFromString_invalidInput() {
assertThrows(
IllegalArgumentException.class, () -> BookingCancellationState.fromString("INVALID_STATE"));
assertThrows(IllegalArgumentException.class, () -> BookingCancellationState.fromString(null));
assertThrows(IllegalArgumentException.class, () -> BookingCancellationState.fromString(" "));
assertThrows(IllegalArgumentException.class, () -> BookingCancellationState.fromString(""));
}

@Test
void testFromString_caseInsensitiveInput() {
assertThrows(
IllegalArgumentException.class,
() -> BookingCancellationState.fromString("cancellation_confirmed"));
assertThrows(
IllegalArgumentException.class,
() -> BookingCancellationState.fromString("Cancellation_received"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.dcsa.conformance.standards.booking.party;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class BookingStateTest {

@Test
void testFromString_validInput() {
assertEquals(BookingState.START, BookingState.fromString("START"));
assertEquals(BookingState.RECEIVED, BookingState.fromString("RECEIVED"));
}

@Test
void testFromString_invalidInput() {
assertThrowsExactly(
IllegalArgumentException.class, () -> BookingState.fromString("INVALID_STATE"));
assertThrowsExactly(IllegalArgumentException.class, () -> BookingState.fromString(null));
assertThrowsExactly(IllegalArgumentException.class, () -> BookingState.fromString(" "));
assertThrowsExactly(IllegalArgumentException.class, () -> BookingState.fromString(""));
}

@Test
void testFromString_caseInsensitiveInput() {
assertThrowsExactly(IllegalArgumentException.class, () -> BookingState.fromString("start"));
assertThrowsExactly(IllegalArgumentException.class, () -> BookingState.fromString("received"));
}
}

0 comments on commit 1ef13f3

Please sign in to comment.