Skip to content

Commit 7a227da

Browse files
authored
Merge pull request #157 from Femcoders-SleepUp/refactor/reservation-exceptions
refactor(reservation): extract exceptions AccommodationConstraintsExc…
2 parents da8c19d + 9429fef commit 7a227da

4 files changed

Lines changed: 19 additions & 16 deletions

File tree

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.SleepUp.SU.reservation.exceptions;
22

3+
import com.SleepUp.SU.accommodation.entity.Accommodation;
34
import com.SleepUp.SU.exceptions.AppException;
5+
import com.SleepUp.SU.reservation.dto.ReservationRequest;
46

57
public class AccommodationConstraintsException extends AppException {
6-
public AccommodationConstraintsException(String message) {
7-
super(message);
8+
public AccommodationConstraintsException(Accommodation accommodation, ReservationRequest reservationRequest) {
9+
super(String.format("Accommodation supports maximum %d guests, but %d guests requested",
10+
accommodation.getGuestNumber(), reservationRequest.guestNumber()));
811
}
912
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.SleepUp.SU.reservation.exceptions;
22

3+
import com.SleepUp.SU.accommodation.entity.Accommodation;
34
import com.SleepUp.SU.exceptions.AppException;
4-
55
public class AccommodationUnavailableException extends AppException {
6-
public AccommodationUnavailableException(String message) {
7-
super(message);
6+
public AccommodationUnavailableException(Accommodation accommodation) {
7+
super(String.format("Accommodation is only available from %s to %s", accommodation.getAvailableFrom(), accommodation.getAvailableTo()));
88
}
99
}

src/main/java/com/SleepUp/SU/reservation/utils/ReservationServiceHelper.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,12 @@ public void validateAccommodationAvailability(Accommodation accommodation, Reser
8484

8585
if (reservationRequest.checkInDate().isBefore(availableFrom) ||
8686
reservationRequest.checkOutDate().isAfter(availableTo)) {
87-
throw new AccommodationUnavailableException(
88-
String.format("Accommodation is only available from %s to %s",
89-
availableFrom, availableTo)
90-
);
91-
}
87+
throw new AccommodationUnavailableException(accommodation);
88+
}
9289

9390
if (reservationRequest.guestNumber() > accommodation.getGuestNumber()) {
94-
throw new AccommodationConstraintsException(
95-
String.format("Accommodation supports maximum %d guests, but %d guests requested",
96-
accommodation.getGuestNumber(), reservationRequest.guestNumber())
97-
);
98-
}
91+
throw new AccommodationConstraintsException(accommodation, reservationRequest);
92+
}
9993
}
10094

10195
public void validateUserReservationOverlap(Long userId, ReservationRequest reservationRequest) {

src/test/java/com/SleepUp/SU/exceptions/GlobalExceptionHandlerTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.SleepUp.SU.exceptions;
22

3+
import com.SleepUp.SU.accommodation.entity.Accommodation;
34
import com.SleepUp.SU.accommodation.exceptions.AccommodationAlreadyExistsByNameException;
45
import com.SleepUp.SU.accommodation.exceptions.AccommodationNotFoundByIdException;
6+
import com.SleepUp.SU.reservation.dto.ReservationRequest;
57
import com.SleepUp.SU.reservation.exceptions.*;
68
import com.SleepUp.SU.utils.exceptions.*;
79
import jakarta.servlet.http.HttpServletRequest;
@@ -21,6 +23,7 @@
2123
import org.springframework.validation.FieldError;
2224
import org.springframework.web.bind.MethodArgumentNotValidException;
2325

26+
import java.time.LocalDate;
2427
import java.util.Collections;
2528
import java.util.HashSet;
2629
import java.util.Map;
@@ -82,9 +85,12 @@ public void testHandleBadRequest_InvalidDateRange() {
8285

8386
@Test
8487
public void testHandleBadRequest_AccommodationUnavailable() {
85-
AccommodationUnavailableException ex = new AccommodationUnavailableException("Unavailable");
88+
Accommodation accommodation = mock(Accommodation.class);
89+
AccommodationUnavailableException ex = new AccommodationUnavailableException(accommodation);
8690
ResponseEntity<ErrorResponse> response = handler.handleBadRequest(ex, request);
8791
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
92+
String expectedMessage = String.format("Accommodation is only available from %s to %s", accommodation.getAvailableFrom(), accommodation.getAvailableTo());
93+
assertEquals(expectedMessage, response.getBody().message().toString());
8894
}
8995

9096
// === Validation Handlers ===

0 commit comments

Comments
 (0)