diff --git a/modgy-versions/CHANGELOG.md b/modgy-versions/CHANGELOG.md index 8d9f60c..3f6bdb1 100644 --- a/modgy-versions/CHANGELOG.md +++ b/modgy-versions/CHANGELOG.md @@ -97,4 +97,6 @@ Api: ** \ No newline at end of file +Карточка задачи: ** + +**0.0.26: Добавлена проверка условий для смены статусов бронирований** \ No newline at end of file diff --git a/pom.xml b/pom.xml index 503aa93..888ec09 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ ru.modgy Modgy - 0.0.25-SNAPSHOT + 0.0.26-SNAPSHOT Modgy Booking app for pets hotel diff --git a/specification/pet-hotel-bookings-spec.yaml b/specification/pet-hotel-bookings-spec.yaml index 326a764..2028df4 100644 --- a/specification/pet-hotel-bookings-spec.yaml +++ b/specification/pet-hotel-bookings-spec.yaml @@ -229,6 +229,7 @@ paths: parameters: - $ref: '#/components/parameters/requesterHeader' - $ref: '#/components/parameters/bookingId' + - $ref: '#/components/parameters/date' requestBody: content: application/json: diff --git a/src/main/java/ru/modgy/booking/controller/BookingController.java b/src/main/java/ru/modgy/booking/controller/BookingController.java index 669525d..6ff0a84 100644 --- a/src/main/java/ru/modgy/booking/controller/BookingController.java +++ b/src/main/java/ru/modgy/booking/controller/BookingController.java @@ -33,7 +33,7 @@ public BookingDto addBooking(@RequestHeader(UtilityService.REQUESTER_ID_HEADER) utilityService.checkBossAdminAccess(requesterId); log.info("BookingController: POST/addBooking, requesterId={}, booking={}", requesterId, newBookingDto); utilityService.checkBossAdminAccess(requesterId); - return bookingService.addBooking(requesterId, newBookingDto); + return bookingService.addBooking(newBookingDto); } @GetMapping("/{id}") @@ -42,18 +42,19 @@ public BookingDto getBookingById(@RequestHeader(UtilityService.REQUESTER_ID_HEAD utilityService.checkBossAdminAccess(requesterId); log.info("BookingController: GET/getBookingById, requesterId={}, bookingId={}", requesterId, bookingId); utilityService.checkBossAdminAccess(requesterId); - return bookingService.getBookingById(requesterId, bookingId); + return bookingService.getBookingById(bookingId); } @PatchMapping("/{id}") public BookingDto updateBooking(@RequestHeader(UtilityService.REQUESTER_ID_HEADER) Long requesterId, @RequestBody @Valid UpdateBookingDto updateBookingDto, - @PathVariable("id") Long bookingId) { + @PathVariable("id") Long bookingId, + @RequestParam(value = "date", required = false) @DateTimeFormat(pattern = "dd.MM.yyyy") Optional date) { utilityService.checkBossAdminAccess(requesterId); log.info("BookingController: PATCH/updateBooking, requesterId={}, bookingId={}, requestBody={}", requesterId, bookingId, updateBookingDto); utilityService.checkBossAdminAccess(requesterId); - return bookingService.updateBooking(requesterId, bookingId, updateBookingDto); + return bookingService.updateBooking(bookingId, date.orElseGet(LocalDate::now), updateBookingDto); } @DeleteMapping("/{id}") @@ -63,7 +64,7 @@ public void deleteBookingById(@RequestHeader(UtilityService.REQUESTER_ID_HEADER) utilityService.checkBossAdminAccess(requesterId); log.info("BookingController: DELETE/deleteBookingById, requesterId={}, bookingId={}", requesterId, bookingId); utilityService.checkBossAdminAccess(requesterId); - bookingService.deleteBookingById(requesterId, bookingId); + bookingService.deleteBookingById(bookingId); } @GetMapping("/rooms/{roomId}/crossingBookingsOfRoomInDates") @@ -73,7 +74,7 @@ public List findCrossingBookingsForRoomInDates(@RequestHeader(Utilit @RequestParam("checkOutDate") @DateTimeFormat(pattern = "dd.MM.yyyy") LocalDate checkOutDate) { log.info("BookingController: GET/findBookingsForRoomInDates, requesterId={}, roomId={}", requesterId, roomId); utilityService.checkBossAdminAccess(requesterId); - return bookingService.findCrossingBookingsForRoomInDates(requesterId, roomId, checkInDate, checkOutDate); + return bookingService.findCrossingBookingsForRoomInDates(roomId, checkInDate, checkOutDate); } @GetMapping("/rooms/{roomId}/checkRoomAvailable") @@ -83,7 +84,7 @@ public void checkRoomAvailableInDates(@RequestHeader(UtilityService.REQUESTER_ID @RequestParam("checkOutDate") @DateTimeFormat(pattern = "dd.MM.yyyy") LocalDate checkOutDate) { log.info("BookingController: GET/checkRoomAvailableInDates, requesterId={}, roomId={}", requesterId, roomId); utilityService.checkBossAdminAccess(requesterId); - bookingService.checkRoomAvailableInDates(requesterId, roomId, checkInDate, checkOutDate); + bookingService.checkRoomAvailableInDates(roomId, checkInDate, checkOutDate); } @GetMapping("/{bookingId}/rooms/{roomId}/checkUpdateRoomAvailable") @@ -94,7 +95,7 @@ public void checkUpdateBookingRoomAvailableInDates(@RequestHeader(UtilityService @RequestParam("checkOutDate") @DateTimeFormat(pattern = "dd.MM.yyyy") LocalDate checkOutDate) { log.info("BookingController: GET/checkUpdateRoomAvailableInDates, requesterId={}, roomId={}, bookingId={}", requesterId, roomId, bookingId); utilityService.checkBossAdminAccess(requesterId); - bookingService.checkUpdateBookingRoomAvailableInDates(requesterId, roomId, bookingId, checkInDate, checkOutDate); + bookingService.checkUpdateBookingRoomAvailableInDates(roomId, bookingId, checkInDate, checkOutDate); } @GetMapping("/rooms/{roomId}/blockingBookingsInDates") @@ -104,7 +105,7 @@ public List findBlockingBookingsForRoomInDates(@RequestHeader(Utilit @RequestParam("checkOutDate") @DateTimeFormat(pattern = "dd.MM.yyyy") LocalDate checkOutDate) { log.info("BookingController: GET/findBlockingBookingsForRoomInDates, requesterId={}, roomId={}", requesterId, roomId); utilityService.checkBossAdminAccess(requesterId); - return bookingService.findBlockingBookingsForRoomInDates(requesterId, roomId, checkInDate, checkOutDate); + return bookingService.findBlockingBookingsForRoomInDates(roomId, checkInDate, checkOutDate); } @GetMapping("/inDates") @@ -113,7 +114,7 @@ public List findAllBookingsInDates(@RequestHeader(UtilityService.REQ @RequestParam("endDate") @DateTimeFormat(pattern = "dd.MM.yyyy") LocalDate endDate) { log.info("BookingController: GET/findAllBookingsInDates, requesterId={}", requesterId); utilityService.checkBossAdminAccess(requesterId); - return bookingService.findAllBookingsInDates(requesterId, startDate, endDate); + return bookingService.findAllBookingsInDates(startDate, endDate); } @GetMapping("/allByPet/pets/{petId}") @@ -121,7 +122,7 @@ public List findAllBookingsByPet(@RequestHeader(UtilityService.REQUE @PathVariable("petId") Long petId) { log.info("BookingController: GET/findAllBookingsByPet, requesterId={}, petId={}", requesterId, petId); utilityService.checkBossAdminAccess(requesterId); - return bookingService.findAllBookingsByPet(requesterId, petId); + return bookingService.findAllBookingsByPet(petId); } @GetMapping("/allByOwner/owners/{ownerId}") @@ -129,7 +130,7 @@ public List findAllBookingsByOwner(@RequestHeader(UtilityService.REQ @PathVariable("ownerId") Long ownerId) { log.info("BookingController: GET/findAllBookingsByOwner, requesterId={}, ownerId={}", requesterId, ownerId); utilityService.checkBossAdminAccess(requesterId); - return bookingService.findAllBookingsByOwner(requesterId, ownerId); + return bookingService.findAllBookingsByOwner(ownerId); } @GetMapping("/{bookingId}/availableStatus") @@ -139,6 +140,6 @@ public List getAllAvailableStatuses(@RequestHeader(UtilityService log.info("BookingController: GET/getAllAvailableStatuses, requesterId={}, bookingId={}", requesterId, bookingId); utilityService.checkBossAdminAccess(requesterId); - return bookingService.getAllAvailableStatuses(requesterId, bookingId, date.orElseGet(LocalDate::now)); + return bookingService.getAllAvailableStatuses(bookingId, date.orElseGet(LocalDate::now)); } } diff --git a/src/main/java/ru/modgy/booking/service/BookingService.java b/src/main/java/ru/modgy/booking/service/BookingService.java index 200ce9e..e42f4ed 100644 --- a/src/main/java/ru/modgy/booking/service/BookingService.java +++ b/src/main/java/ru/modgy/booking/service/BookingService.java @@ -12,68 +12,62 @@ public interface BookingService { /** * Добавление нового бронирования (типа бронирование или типа закрытие) * - * @param userId - id пользователя, направляющего запрос * @param newBookingDto - данные добавляемого бронирования * @return данные добавленного бронирования */ - BookingDto addBooking(Long userId, NewBookingDto newBookingDto); + BookingDto addBooking(NewBookingDto newBookingDto); /** * Получение по id информации о бронировании * - * @param userId - id пользователя, направляющего запрос * @param bookingId - id запрашиваемого бронирования * @return данные запрашиваемого бронирования */ - BookingDto getBookingById(Long userId, Long bookingId); + BookingDto getBookingById(Long bookingId); /** * Обновление информации о бронировании * - * @param userId - id пользователя, направляющего запрос * @param bookingId - id обновляемого бронирования + * @param today - дата, заданная в качестве текущей * @param updateBookingDto - обновляемые данные * @return данные обновленного бронирования */ - BookingDto updateBooking(Long userId, Long bookingId, UpdateBookingDto updateBookingDto); + BookingDto updateBooking(Long bookingId, LocalDate today, UpdateBookingDto updateBookingDto); /** * Удаление по id информации о бронировании * - * @param userId - id пользователя, направляющего запрос * @param bookingId - id удаляемого бронирования */ - void deleteBookingById(Long userId, Long bookingId); + void deleteBookingById(Long bookingId); /** * Поиск пересекающихся бронирований. Поиск бронирований, пересекающихся с выбранными датами. * Например, дата окончания имеющегося в БД бронирования = checkInDate в текущем запросе * или дата начала имеющегося в БД бронирования = checkOutDate в текущем запросе. * - * @param userId - id пользователя, направляющего запрос * @param roomId - id номера, бронирования которого проверяются * @param checkInDate - дата заезда, по которой ведется поиск пересечений * @param checkOutDate - дата выезда, по которой ведется поиск пересечений * @return список пересекающихся бронирований */ - List findCrossingBookingsForRoomInDates(Long userId, Long roomId, LocalDate checkInDate, LocalDate checkOutDate); + List findCrossingBookingsForRoomInDates(Long roomId, LocalDate checkInDate, LocalDate checkOutDate); /** * Проверка доступности номера для создания нового бронирования в выбранные даты * - * @param userId - id пользователя, направляющего запрос * @param roomId - id номера, бронирования которого проверяются * @param checkInDate - дата заезда, с которой начинается временной интервал для проверки доступности номера * @param checkOutDate - дата выезда, на которой заканчивается временной интервал для проверки доступности номера * * Если номер недоступен к брони в указанные даты - возвращается исключение ConflictException. */ - void checkRoomAvailableInDates(Long userId, Long roomId, LocalDate checkInDate, LocalDate checkOutDate); + void checkRoomAvailableInDates(Long roomId, LocalDate checkInDate, LocalDate checkOutDate); /** * Проверка доступности номера для редактирования бронирования в выбранные даты * - * @param userId - id пользователя, направляющего запрос * @param roomId - id номера, бронирования которого проверяются * @param bookingId - id бронирования, которое в процессе редактирования * @param checkInDate - дата заезда, с которой начинается временной интервал для проверки доступности номера @@ -81,55 +75,50 @@ public interface BookingService { * * Если номер недоступен к брони в указанные даты - возвращается исключение ConflictException. */ - void checkUpdateBookingRoomAvailableInDates(Long userId, Long roomId, Long bookingId, LocalDate checkInDate, LocalDate checkOutDate); + void checkUpdateBookingRoomAvailableInDates(Long roomId, Long bookingId, LocalDate checkInDate, LocalDate checkOutDate); /** * Поиск блокирующих бронирований, накладывающихся на выбранные даты, которые не позволяют добавить новое бронирование * - * @param userId - id пользователя, направляющего запрос * @param roomId - id номера, бронирования которого проверяются * @param checkInDate - дата заезда, с которой начинается временной интервал для проверки наличия блокирующих бронирований * @param checkOutDate - дата выезда, на которой заканчивается временной интервал для проверки наличия блокирующих бронирований * @return список блокирующих бронирований */ - List findBlockingBookingsForRoomInDates(Long userId, Long roomId, LocalDate checkInDate, LocalDate checkOutDate); + List findBlockingBookingsForRoomInDates(Long roomId, LocalDate checkInDate, LocalDate checkOutDate); /** * Поиск всех имеющихся бронирований в заданные даты, кроме отмененных. * - * @param userId - id пользователя, направляющего запрос * @param startDate - дата начала периода, за который отбираются бронирования * @param endDate - дата окончания периода, за который отбираются бронирования * @return список бронирований в указанные даты с любым статусом, кроме "отменено" */ - List findAllBookingsInDates(Long userId, LocalDate startDate, LocalDate endDate); + List findAllBookingsInDates(LocalDate startDate, LocalDate endDate); /** * Поиск всех имеющихся бронирований на пребывание конкретного питомца. * - * @param userId - id пользователя, направляющего запрос * @param petId - id питомца, чьи бронирования отбираются * @return список всех имеющихся бронирований на пребывание конкретного питомца */ - List findAllBookingsByPet(Long userId, Long petId); + List findAllBookingsByPet(Long petId); /** * Поиск всех имеющихся бронирований на пребывание всех питомцев конкретного клиента. * - * @param userId - id пользователя, направляющего запрос * @param ownerId - id клиента, чьи бронирования отбираются * @return список всех имеющихся бронирований на пребывание всех питомцев конкретного клиента */ - List findAllBookingsByOwner(Long userId, Long ownerId); + List findAllBookingsByOwner(Long ownerId); /** * Получение всех доступных для установки статусов для заданного бронирования * (в том числе тех, для которых требуется выполнение дополнительных условий). * - * @param userId - id пользователя, направляющего запрос * @param bookingId - id бронирования, для которого отбираются доступные статусы * @param date - дата, на которую производится проверка доступности статусов * @return HashMap, где ключ - допустимый к установке статус, значение - список необходимых для установки условий. */ - List getAllAvailableStatuses(Long userId, Long bookingId, LocalDate date); + List getAllAvailableStatuses(Long bookingId, LocalDate date); } diff --git a/src/main/java/ru/modgy/booking/service/BookingServiceImpl.java b/src/main/java/ru/modgy/booking/service/BookingServiceImpl.java index d9e5931..09b8453 100644 --- a/src/main/java/ru/modgy/booking/service/BookingServiceImpl.java +++ b/src/main/java/ru/modgy/booking/service/BookingServiceImpl.java @@ -36,10 +36,11 @@ public class BookingServiceImpl implements BookingService { private final OwnerMapper ownerMapper; private final EntityService entityService; private final UtilityService utilityService; + private final BookingStatusService statusService; @Transactional @Override - public BookingDto addBooking(Long userId, NewBookingDto newBookingDto) { + public BookingDto addBooking(NewBookingDto newBookingDto) { utilityService.checkDatesOfBooking(newBookingDto.getCheckInDate(), newBookingDto.getCheckOutDate()); checkReasonWhenTypeClosing(newBookingDto.getType(), newBookingDto.getReasonOfStop()); checkRoomAvailabilityByDates( @@ -71,22 +72,22 @@ public BookingDto addBooking(Long userId, NewBookingDto newBookingDto) { List petDtoList = addPetsDtoListForOwner(pets, bookingDto); bookingDto.setPets(petDtoList); - log.info("BookingService: addBooking, userId={}, bookingDto={}", userId, addedBooking); + log.info("BookingService: addBooking, bookingDto={}", addedBooking); return bookingDto; } @Transactional(readOnly = true) @Override - public BookingDto getBookingById(Long userId, Long bookingId) { + public BookingDto getBookingById(Long bookingId) { Booking booking = entityService.getBookingIfExists(bookingId); BookingDto bookingDto = addOwnerShortDtoInPetDto(booking); - log.info("BookingService: getBookingById, userId={}, bookingId={}", userId, bookingId); + log.info("BookingService: getBookingById, bookingId={}", bookingId); return bookingDto; } @Transactional @Override - public BookingDto updateBooking(Long userId, Long bookingId, UpdateBookingDto updateBookingDto) { + public BookingDto updateBooking(Long bookingId, LocalDate today, UpdateBookingDto updateBookingDto) { Booking oldBooking = entityService.getBookingIfExists(bookingId); Booking newBooking = bookingMapper.toBooking(updateBookingDto); newBooking.setId(oldBooking.getId()); @@ -160,12 +161,17 @@ public BookingDto updateBooking(Long userId, Long bookingId, UpdateBookingDto up newBooking.setPets(pets); } - if (newBooking.getStatus().equals(StatusBooking.STATUS_INITIAL) && newBooking.getIsPrepaid()) { + utilityService.checkDatesOfBooking(newBooking.getCheckInDate(), newBooking.getCheckOutDate()); + statusService.checkChangeStatusRestrictions(oldBooking.getStatus(), newBooking, today); + checkUpdateBookingRoomAvailableByDates( + newBooking.getRoom().getId(), + newBooking.getId(), + newBooking.getCheckInDate(), + newBooking.getCheckOutDate()); + if (newBooking.getIsPrepaid() && newBooking.getStatus().equals(StatusBooking.STATUS_INITIAL)) { newBooking.setStatus(StatusBooking.STATUS_CONFIRMED); } - utilityService.checkDatesOfBooking(newBooking.getCheckInDate(), newBooking.getCheckOutDate()); - Booking updatedBooking = bookingRepository.save(newBooking); List petsIds = updatedBooking.getPets().stream().map(Pet::getId).toList(); @@ -177,27 +183,26 @@ public BookingDto updateBooking(Long userId, Long bookingId, UpdateBookingDto up List petDtoList = addPetsDtoListForOwner(pets, updatedBookingDto); updatedBookingDto.setPets(petDtoList); - log.info("BookingService: updateBooking, userId={}, bookingId={}, updateBookingDto={}", - userId, bookingId, updateBookingDto); + log.info("BookingService: updateBooking, bookingId={}, updateBookingDto={}", + bookingId, updateBookingDto); return updatedBookingDto; } @Transactional @Override - public void deleteBookingById(Long userId, Long bookingId) { + public void deleteBookingById(Long bookingId) { int result = bookingRepository.deleteBookingById(bookingId); if (result == 0) { throw new NotFoundException(String.format("booking with id=%d not found", bookingId)); } - log.info("BookingService: deleteBookingById, userId={}, bookingId={}", userId, bookingId); + log.info("BookingService: deleteBookingById, bookingId={}", bookingId); } @Transactional(readOnly = true) @Override - public List findCrossingBookingsForRoomInDates(Long userId, - Long roomId, + public List findCrossingBookingsForRoomInDates(Long roomId, LocalDate checkInDate, LocalDate checkOutDate) { utilityService.checkDatesOfBooking(checkInDate, checkOutDate); @@ -207,43 +212,40 @@ public List findCrossingBookingsForRoomInDates(Long userId, List bookingDtoList = addOwnerShortDtoInPetDtoList(foundBookings); - log.info("BookingService: findCrossingBookingsForRoomInDates, userId={}, roomId={}, checkInDate={}, checkOutDate={}", - userId, roomId, checkInDate, checkOutDate); + log.info("BookingService: findCrossingBookingsForRoomInDates, roomId={}, checkInDate={}, checkOutDate={}", + roomId, checkInDate, checkOutDate); return bookingDtoList; } @Transactional(readOnly = true) @Override - public void checkRoomAvailableInDates(Long userId, - Long roomId, + public void checkRoomAvailableInDates(Long roomId, LocalDate checkInDate, LocalDate checkOutDate) { utilityService.checkDatesOfBooking(checkInDate, checkOutDate); entityService.getRoomIfExists(roomId); - log.info("BookingService: checkRoomAvailableInDates, userId={}, roomId={}, checkInDate={}, checkOutDate={}", - userId, roomId, checkInDate, checkOutDate); + log.info("BookingService: checkRoomAvailableInDates, roomId={}, checkInDate={}, checkOutDate={}", + roomId, checkInDate, checkOutDate); checkRoomAvailabilityByDates(roomId, checkInDate, checkOutDate); } @Transactional(readOnly = true) @Override - public void checkUpdateBookingRoomAvailableInDates(Long userId, - Long roomId, + public void checkUpdateBookingRoomAvailableInDates(Long roomId, Long bookingId, LocalDate checkInDate, LocalDate checkOutDate) { utilityService.checkDatesOfBooking(checkInDate, checkOutDate); entityService.getBookingIfExists(bookingId); entityService.getRoomIfExists(roomId); - log.info("BookingService: checkUpdateRoomAvailableInDates, userId={}, roomId={}, checkInDate={}, checkOutDate={}", - userId, roomId, checkInDate, checkOutDate); - checkUpdateBookingRoomAvailableInDates(roomId, bookingId, checkInDate, checkOutDate); + log.info("BookingService: checkUpdateRoomAvailableInDates, roomId={}, checkInDate={}, checkOutDate={}", + roomId, checkInDate, checkOutDate); + checkUpdateBookingRoomAvailableByDates(roomId, bookingId, checkInDate, checkOutDate); } @Transactional(readOnly = true) @Override - public List findBlockingBookingsForRoomInDates(Long userId, - Long roomId, + public List findBlockingBookingsForRoomInDates(Long roomId, LocalDate checkInDate, LocalDate checkOutDate) { utilityService.checkDatesOfBooking(checkInDate, checkOutDate); @@ -252,62 +254,54 @@ public List findBlockingBookingsForRoomInDates(Long userId, List bookingDtoList = addOwnerShortDtoInPetDtoList(foundBookings); - log.info("BookingService: findBlockingBookingsForRoomInDates, userId={}, roomId={}, checkInDate={}, checkOutDate={}", - userId, roomId, checkInDate, checkOutDate); + log.info("BookingService: findBlockingBookingsForRoomInDates, roomId={}, checkInDate={}, checkOutDate={}", + roomId, checkInDate, checkOutDate); return bookingDtoList; } @Transactional(readOnly = true) @Override - public List findAllBookingsInDates(Long userId, LocalDate startDate, LocalDate endDate) { + public List findAllBookingsInDates(LocalDate startDate, LocalDate endDate) { utilityService.checkDatesOfBooking(startDate, endDate); List foundBookings = bookingRepository.findAllBookingsInDates(startDate, endDate) .orElse(Collections.emptyList()); List bookingDtoList = addOwnerShortDtoInPetDtoList(foundBookings); - log.info("BookingService: findAllBookingsInDates, userId={}, startDate={}, endDate={}", - userId, startDate, endDate); + log.info("BookingService: findAllBookingsInDates, startDate={}, endDate={}", + startDate, endDate); return bookingDtoList; } @Transactional(readOnly = true) @Override - public List findAllBookingsByPet(Long userId, Long petId) { + public List findAllBookingsByPet(Long petId) { entityService.getPetIfExists(petId); List foundBookings = bookingRepository.findAllBookingsByPet(petId).orElse(Collections.emptyList()); List bookingDtoList = addOwnerShortDtoInPetDtoList(foundBookings); - log.info("BookingService: findAllBookingsByPet, userId={}, petId={}", userId, petId); + log.info("BookingService: findAllBookingsByPet, petId={}", petId); return bookingDtoList; } @Transactional(readOnly = true) @Override - public List findAllBookingsByOwner(Long userId, Long ownerId) { + public List findAllBookingsByOwner(Long ownerId) { entityService.getOwnerIfExists(ownerId); List foundBookings = bookingRepository.findAllBookingsByOwner(ownerId).orElse(Collections.emptyList()); List bookingDtoList = addOwnerShortDtoInPetDtoList(foundBookings); - log.info("BookingService: findAllBookingsByOwner, userId={}, petId={}", userId, ownerId); + log.info("BookingService: findAllBookingsByOwner, petId={}", ownerId); return bookingDtoList; } @Transactional(readOnly = true) @Override - public List getAllAvailableStatuses(Long userId, Long bookingId, LocalDate today) { + public List getAllAvailableStatuses(Long bookingId, LocalDate date) { Booking booking = entityService.getBookingIfExists(bookingId); - if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL)) { - return getStatusesForInitialBooking(booking, today); - } else if (booking.getStatus().equals(StatusBooking.STATUS_CONFIRMED)) { - return getStatusesForConfirmedBooking(booking, today); - } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { - return getStatusesForCheckedInBooking(booking, today); - } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { - return getStatusesForCheckedOutBooking(booking, today); - } else { - return getStatusesForCancelledBooking(booking, today); - } + + log.info("BookingService: getAllAvailableStatuses, bookingId={}, date={}", bookingId, date); + return statusService.getAllAvailableStatuses(booking, date); } private List findBookingsForRoomInDates(Long roomId, LocalDate checkInDate, LocalDate checkOutDate) { @@ -325,7 +319,7 @@ private void checkRoomAvailabilityByDates(Long roomId, } } - private void checkUpdateBookingRoomAvailableInDates(Long roomId, + private void checkUpdateBookingRoomAvailableByDates(Long roomId, Long bookingId, LocalDate checkInDate, LocalDate checkOutDate) { @@ -404,91 +398,4 @@ private List addPetsDtoListForOwner(List pets, BookingDto bookingDt } return petsDto; } - - private List getStatusesForInitialBooking(Booking booking, LocalDate date) { - List result = new ArrayList<>(); - result.add(StatusBooking.STATUS_CONFIRMED); - result.add(StatusBooking.STATUS_CANCELLED); - - if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { - result.add(StatusBooking.STATUS_CHECKED_OUT); - } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date)) || - (booking.getCheckInDate().isAfter(date) && booking.getCheckOutDate().isAfter(date))) { - result.add(StatusBooking.STATUS_CHECKED_IN); - } - return result; - } - - private List getStatusesForConfirmedBooking(Booking booking, LocalDate date) { - List result = new ArrayList<>(); - result.add(StatusBooking.STATUS_INITIAL); - result.add(StatusBooking.STATUS_CANCELLED); - - if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { - result.add(StatusBooking.STATUS_CHECKED_OUT); - } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date)) || - (booking.getCheckInDate().isAfter(date) && booking.getCheckOutDate().isAfter(date))) { - result.add(StatusBooking.STATUS_CHECKED_IN); - } - return result; - } - - private List getStatusesForCheckedInBooking(Booking booking, LocalDate date) { - List result = new ArrayList<>(); - - if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { - result.add(StatusBooking.STATUS_CHECKED_OUT); - result.add(StatusBooking.STATUS_CANCELLED); - } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date))) { - result.add(StatusBooking.STATUS_INITIAL); - result.add(StatusBooking.STATUS_CONFIRMED); - result.add(StatusBooking.STATUS_CHECKED_OUT); - result.add(StatusBooking.STATUS_CANCELLED); - } - return result; - } - - private List getStatusesForCheckedOutBooking(Booking booking, LocalDate date) { - List result = new ArrayList<>(); - - if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) || - (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date))) { - result.add(StatusBooking.STATUS_CANCELLED); - result.add(StatusBooking.STATUS_CHECKED_IN); - } - return result; - } - - private List getStatusesForCancelledBooking(Booking booking, LocalDate date) { - List result = new ArrayList<>(); - - if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { - result.add(StatusBooking.STATUS_CHECKED_OUT); - } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date))) { - result.add(StatusBooking.STATUS_INITIAL); - result.add(StatusBooking.STATUS_CONFIRMED); - result.add(StatusBooking.STATUS_CHECKED_IN); - result.add(StatusBooking.STATUS_CHECKED_OUT); - } else if (booking.getCheckInDate().isAfter(date) && booking.getCheckOutDate().isAfter(date)) { - result.add(StatusBooking.STATUS_INITIAL); - result.add(StatusBooking.STATUS_CONFIRMED); - } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || - (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date))) { - result.add(StatusBooking.STATUS_INITIAL); - result.add(StatusBooking.STATUS_CONFIRMED); - result.add(StatusBooking.STATUS_CHECKED_IN); - } - return result; - } } diff --git a/src/main/java/ru/modgy/booking/service/BookingStatusService.java b/src/main/java/ru/modgy/booking/service/BookingStatusService.java new file mode 100644 index 0000000..62bb8dc --- /dev/null +++ b/src/main/java/ru/modgy/booking/service/BookingStatusService.java @@ -0,0 +1,319 @@ +package ru.modgy.booking.service; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.modgy.booking.model.Booking; +import ru.modgy.booking.model.StatusBooking; +import ru.modgy.exception.BadRequestException; +import ru.modgy.exception.ConflictException; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class BookingStatusService { + + public List getAllAvailableStatuses(Booking booking, LocalDate date) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL)) { + return getStatusesForInitialBooking(booking, date); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CONFIRMED)) { + return getStatusesForConfirmedBooking(booking, date); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { + return getStatusesForCheckedInBooking(booking, date); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + return getStatusesForCheckedOutBooking(booking, date); + } else { + return getStatusesForCancelledBooking(booking, date); + } + } + + public void checkChangeStatusRestrictions(StatusBooking previousStatus, Booking booking, LocalDate today) { + if (previousStatus.equals(StatusBooking.STATUS_CANCELLED)) { + checkCancelledStatusRestrictions(booking, today); + } + + if (previousStatus.equals(StatusBooking.STATUS_INITIAL)) { + checkInitialStatusRestrictions(booking, today); + } + + if (previousStatus.equals(StatusBooking.STATUS_CONFIRMED)) { + checkConfirmedStatusRestrictions(booking, today); + } + + if (previousStatus.equals(StatusBooking.STATUS_CHECKED_IN)) { + checkCheckedInStatusRestrictions(booking, today); + } + + if (previousStatus.equals(StatusBooking.STATUS_CHECKED_OUT)) { + checkCheckedOutStatusRestrictions(booking, today); + } + } + + private List getStatusesForInitialBooking(Booking booking, LocalDate date) { + List result = new ArrayList<>(); + result.add(StatusBooking.STATUS_CONFIRMED); + result.add(StatusBooking.STATUS_CANCELLED); + + if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { + result.add(StatusBooking.STATUS_CHECKED_OUT); + } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date)) || + (booking.getCheckInDate().isAfter(date) && booking.getCheckOutDate().isAfter(date))) { + result.add(StatusBooking.STATUS_CHECKED_IN); + } + return result; + } + + private List getStatusesForConfirmedBooking(Booking booking, LocalDate date) { + List result = new ArrayList<>(); + result.add(StatusBooking.STATUS_INITIAL); + result.add(StatusBooking.STATUS_CANCELLED); + + if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { + result.add(StatusBooking.STATUS_CHECKED_OUT); + } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date)) || + (booking.getCheckInDate().isAfter(date) && booking.getCheckOutDate().isAfter(date))) { + result.add(StatusBooking.STATUS_CHECKED_IN); + } + return result; + } + + private List getStatusesForCheckedInBooking(Booking booking, LocalDate date) { + List result = new ArrayList<>(); + + if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { + result.add(StatusBooking.STATUS_CHECKED_OUT); + result.add(StatusBooking.STATUS_CANCELLED); + } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date))) { + result.add(StatusBooking.STATUS_INITIAL); + result.add(StatusBooking.STATUS_CONFIRMED); + result.add(StatusBooking.STATUS_CHECKED_OUT); + result.add(StatusBooking.STATUS_CANCELLED); + } + return result; + } + + private List getStatusesForCheckedOutBooking(Booking booking, LocalDate date) { + List result = new ArrayList<>(); + + if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) || + (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date))) { + result.add(StatusBooking.STATUS_CANCELLED); + result.add(StatusBooking.STATUS_CHECKED_IN); + } + return result; + } + + private List getStatusesForCancelledBooking(Booking booking, LocalDate date) { + List result = new ArrayList<>(); + + if (booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isBefore(date)) { + result.add(StatusBooking.STATUS_CHECKED_OUT); + } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isEqual(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isEqual(date))) { + result.add(StatusBooking.STATUS_INITIAL); + result.add(StatusBooking.STATUS_CONFIRMED); + result.add(StatusBooking.STATUS_CHECKED_IN); + result.add(StatusBooking.STATUS_CHECKED_OUT); + } else if (booking.getCheckInDate().isAfter(date) && booking.getCheckOutDate().isAfter(date)) { + result.add(StatusBooking.STATUS_INITIAL); + result.add(StatusBooking.STATUS_CONFIRMED); + } else if ((booking.getCheckInDate().isBefore(date) && booking.getCheckOutDate().isAfter(date)) || + (booking.getCheckInDate().isEqual(date) && booking.getCheckOutDate().isAfter(date))) { + result.add(StatusBooking.STATUS_INITIAL); + result.add(StatusBooking.STATUS_CONFIRMED); + result.add(StatusBooking.STATUS_CHECKED_IN); + } + return result; + } + + private void checkCancelledStatusRestrictions(Booking booking, LocalDate today) { + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isBefore(today) && + !booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if ((booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isEqual(today)) || + (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isEqual(today))) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } + } + + if ((booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isAfter(today)) || + (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isAfter(today))) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + + if (booking.getCheckInDate().isAfter(today) && booking.getCheckOutDate().isAfter(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT) || booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + } + + private void checkInitialStatusRestrictions(Booking booking, LocalDate today) { + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isBefore(today) && + booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if (((booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isEqual(today)) || + (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isEqual(today))) && + booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if ((booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isAfter(today)) && + booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if ((booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isAfter(today)) && + booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if (booking.getCheckInDate().isAfter(today) && booking.getCheckOutDate().isAfter(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { + throw new ConflictException(String.format("CheckInDate=%s is after today=%s", + booking.getCheckInDate(), today)); + } + } + } + + private void checkConfirmedStatusRestrictions(Booking booking, LocalDate today) { + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isBefore(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + + if ((booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isEqual(today)) || + (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isEqual(today))) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isAfter(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + + if (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isAfter(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + + if (booking.getCheckInDate().isAfter(today) && booking.getCheckOutDate().isAfter(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { + throw new ConflictException(String.format("CheckInDate=%s is after today=%s", + booking.getCheckInDate(), today)); + } + } + } + + private void checkCheckedInStatusRestrictions(Booking booking, LocalDate today) { + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isBefore(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) || + booking.getStatus().equals(StatusBooking.STATUS_CONFIRMED)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + + if ((booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isEqual(today)) || + (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isEqual(today))) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } + } + + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isAfter(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("CheckOutDate=%s is after today=%s", + booking.getCheckOutDate(), today)); + } + } + + if (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isAfter(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) && booking.getIsPrepaid()) { + throw new BadRequestException("Prepaid booking can not be INITIAL. Set isPrepaid=false or set STATUS_CONFIRMED."); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_OUT)) { + throw new BadRequestException(String.format("CheckOutDate=%s is after today=%s", + booking.getCheckOutDate(), today)); + } + } + + if (booking.getCheckInDate().isAfter(today) && booking.getCheckOutDate().isAfter(today)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + + private void checkCheckedOutStatusRestrictions(Booking booking, LocalDate today) { + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isBefore(today)) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) || booking.getStatus().equals(StatusBooking.STATUS_CONFIRMED)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } else if (booking.getStatus().equals(StatusBooking.STATUS_CHECKED_IN)) { + throw new BadRequestException(String.format("CheckOutDate=%s is before today=%s", + booking.getCheckOutDate(), today)); + } + } + + if ((booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isEqual(today)) || + (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isEqual(today))) { + if (booking.getStatus().equals(StatusBooking.STATUS_INITIAL) || booking.getStatus().equals(StatusBooking.STATUS_CONFIRMED)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if (booking.getCheckInDate().isBefore(today) && booking.getCheckOutDate().isAfter(today)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if (booking.getCheckInDate().isEqual(today) && booking.getCheckOutDate().isAfter(today)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + + if (booking.getCheckInDate().isAfter(today) && booking.getCheckOutDate().isAfter(today)) { + throw new BadRequestException(String.format("Status=%s is not available for this booking", booking.getStatus())); + } + } + } +} diff --git a/src/main/java/ru/modgy/utility/StatusChangingConditions.java b/src/main/java/ru/modgy/utility/StatusChangingConditions.java deleted file mode 100644 index 1456d4f..0000000 --- a/src/main/java/ru/modgy/utility/StatusChangingConditions.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.modgy.utility; - -public class StatusChangingConditions { - public static final String CONDITION_TO_PUT_CHECKED_IN = "Для смены статуса на Заселен требуется изменение даты " + - "начала бронирования на <= текущая дата + должен быть выбран доступный номер. "; - public static final String CONDITION_TO_PUT_INITIAL = "Для смены статуса на Первичное, если Предоплата внесена = " + - "Да, смена статуса невозможна. Нужно установить в поле Предоплата внесена значение = Нет. "; - public static final String CONDITION_TO_PUT_CHECKED_OUT = "Для смены статуса на Выселен требуется изменить " + - "дату окончания бронирования на текущую дату. "; - public static final String CONDITION_TO_SWITCH_CANCELLED = "Должен быть выбран доступный номер. "; -} diff --git a/src/test/java/ru/modgy/booking/BookingControllerTest.java b/src/test/java/ru/modgy/booking/BookingControllerTest.java index a0739ce..1bc796e 100644 --- a/src/test/java/ru/modgy/booking/BookingControllerTest.java +++ b/src/test/java/ru/modgy/booking/BookingControllerTest.java @@ -87,7 +87,7 @@ class BookingControllerTest { @Test @SneakyThrows void addBooking() { - when(bookingService.addBooking(anyLong(), any(NewBookingDto.class))).thenReturn(bookingDto); + when(bookingService.addBooking(any(NewBookingDto.class))).thenReturn(bookingDto); mockMvc.perform(post("/bookings") .header(requesterHeader, requesterId) @@ -106,7 +106,7 @@ void addBooking() { .andExpect(jsonPath("$.amount").value(bookingDto.getAmount())) .andExpect(jsonPath("$.prepaymentAmount").value(bookingDto.getPrepaymentAmount())); - verify(bookingService).addBooking(anyLong(), any(NewBookingDto.class)); + verify(bookingService).addBooking(any(NewBookingDto.class)); mockMvc.perform(post("/bookings") .accept(MediaType.APPLICATION_JSON) @@ -121,13 +121,13 @@ void addBooking() { .content(objectMapper.writeValueAsString(new BookingDto()))) .andExpect(status().isBadRequest()); - verify(bookingService, times(1)).addBooking(anyLong(), any(NewBookingDto.class)); + verify(bookingService, times(1)).addBooking(any(NewBookingDto.class)); } @Test @SneakyThrows void getBookingById() { - when(bookingService.getBookingById(anyLong(), anyLong())).thenReturn(bookingDto); + when(bookingService.getBookingById(anyLong())).thenReturn(bookingDto); mockMvc.perform(get("/bookings/{id}", bookingId) .header(requesterHeader, requesterId) @@ -144,20 +144,20 @@ void getBookingById() { .andExpect(jsonPath("$.amount").value(bookingDto.getAmount())) .andExpect(jsonPath("$.prepaymentAmount").value(bookingDto.getPrepaymentAmount())); - verify(bookingService).getBookingById(requesterId, bookingId); + verify(bookingService).getBookingById(bookingId); - when(bookingService.getBookingById(anyLong(), anyLong())).thenThrow(NotFoundException.class); + when(bookingService.getBookingById(anyLong())).thenThrow(NotFoundException.class); mockMvc.perform(get("/bookings/{id}", roomId) .header(requesterHeader, requesterId) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()); - verify(bookingService, times(2)).getBookingById(requesterId, bookingId); + verify(bookingService, times(2)).getBookingById(bookingId); } @Test @SneakyThrows void updateBooking() { - when(bookingService.updateBooking(anyLong(), eq(bookingId), any(UpdateBookingDto.class))).thenReturn(bookingDto); + when(bookingService.updateBooking(eq(bookingId), any(LocalDate.class), any(UpdateBookingDto.class))).thenReturn(bookingDto); mockMvc.perform(patch("/bookings/{id}", roomId) .header(requesterHeader, requesterId) @@ -177,7 +177,7 @@ void updateBooking() { .andExpect(jsonPath("$.prepaymentAmount").value(bookingDto.getPrepaymentAmount())); - when(bookingService.updateBooking(anyLong(), eq(bookingId), any(UpdateBookingDto.class))) + when(bookingService.updateBooking(eq(bookingId), any(LocalDate.class), any(UpdateBookingDto.class))) .thenThrow(NotFoundException.class); mockMvc.perform(patch("/bookings/{id}", roomId) @@ -195,18 +195,18 @@ void deleteBookingById() { .accept(MediaType.ALL_VALUE)) .andExpect(status().isNoContent()); - verify(bookingService).deleteBookingById(requesterId, bookingId); + verify(bookingService).deleteBookingById(bookingId); doThrow(NotFoundException.class) .when(bookingService) - .deleteBookingById(requesterId, bookingId); + .deleteBookingById(bookingId); mockMvc.perform(delete("/bookings/{Id}", bookingId) .header(requesterHeader, requesterId) .accept(MediaType.ALL_VALUE)) .andExpect(status().isNotFound()); - verify(bookingService, times(2)).deleteBookingById(requesterId, bookingId); + verify(bookingService, times(2)).deleteBookingById(bookingId); } @Test @@ -220,11 +220,11 @@ void checkRoomAvailableInDates() { .param("checkOutDate", "02.01.2024")) .andExpect(status().isOk()); - verify(bookingService).checkRoomAvailableInDates(requesterId, roomId, checkIn, checkOut); + verify(bookingService).checkRoomAvailableInDates(roomId, checkIn, checkOut); doThrow(ConflictException.class) .when(bookingService) - .checkRoomAvailableInDates(anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class)); + .checkRoomAvailableInDates(anyLong(), any(LocalDate.class), any(LocalDate.class)); mockMvc.perform(get("/bookings/rooms/{roomId}/checkRoomAvailable", roomId) .header(requesterHeader, requesterId) @@ -234,7 +234,7 @@ void checkRoomAvailableInDates() { .andExpect(status().isConflict()); verify(bookingService, times(2)) - .checkRoomAvailableInDates(requesterId, roomId, checkIn, checkOut); + .checkRoomAvailableInDates(roomId, checkIn, checkOut); } @Test @@ -248,12 +248,12 @@ void checkUpdateBookingRoomAvailableInDates() { .param("checkOutDate", "02.01.2024")) .andExpect(status().isOk()); - verify(bookingService).checkUpdateBookingRoomAvailableInDates(requesterId, roomId, bookingId, checkIn, checkOut); + verify(bookingService).checkUpdateBookingRoomAvailableInDates(roomId, bookingId, checkIn, checkOut); doThrow(ConflictException.class) .when(bookingService) - .checkUpdateBookingRoomAvailableInDates(anyLong(), anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class)); + .checkUpdateBookingRoomAvailableInDates(anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class)); mockMvc.perform(get("/bookings/{roomId}/rooms/{bookingId}/checkUpdateRoomAvailable", roomId, bookingId) .header(requesterHeader, requesterId) @@ -263,14 +263,14 @@ void checkUpdateBookingRoomAvailableInDates() { .andExpect(status().isConflict()); verify(bookingService, times(2)) - .checkUpdateBookingRoomAvailableInDates(requesterId, roomId, bookingId, checkIn, checkOut); + .checkUpdateBookingRoomAvailableInDates(roomId, bookingId, checkIn, checkOut); } @Test @SneakyThrows @DateTimeFormat(iso= DateTimeFormat.ISO.DATE) void findBlockingBookingsForRoomInDates() { - when(bookingService.findBlockingBookingsForRoomInDates(anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class))) + when(bookingService.findBlockingBookingsForRoomInDates(anyLong(), any(LocalDate.class), any(LocalDate.class))) .thenReturn(List.of(bookingDto)); mockMvc.perform(get("/bookings/rooms/{roomId}/blockingBookingsInDates", roomId) @@ -280,16 +280,16 @@ void findBlockingBookingsForRoomInDates() { .param("checkOutDate", "02.01.2024")) .andExpect(status().isOk()); - verify(bookingService).findBlockingBookingsForRoomInDates(requesterId, roomId, checkIn, checkOut); + verify(bookingService).findBlockingBookingsForRoomInDates(roomId, checkIn, checkOut); verify(bookingService, times(1)) - .findBlockingBookingsForRoomInDates(requesterId, roomId, checkIn, checkOut); + .findBlockingBookingsForRoomInDates(roomId, checkIn, checkOut); } @Test @SneakyThrows @DateTimeFormat(iso= DateTimeFormat.ISO.DATE) void findCrossingBookingsForRoomInDates() { - when(bookingService.findCrossingBookingsForRoomInDates(anyLong(), anyLong(), any(LocalDate.class), any(LocalDate.class))) + when(bookingService.findCrossingBookingsForRoomInDates(anyLong(), any(LocalDate.class), any(LocalDate.class))) .thenReturn(List.of(bookingDto)); mockMvc.perform(get("/bookings/rooms/{roomId}/crossingBookingsOfRoomInDates", roomId) @@ -299,16 +299,16 @@ void findCrossingBookingsForRoomInDates() { .param("checkOutDate", "02.01.2024")) .andExpect(status().isOk()); - verify(bookingService).findCrossingBookingsForRoomInDates(requesterId, roomId, checkIn, checkOut); + verify(bookingService).findCrossingBookingsForRoomInDates(roomId, checkIn, checkOut); verify(bookingService, times(1)) - .findCrossingBookingsForRoomInDates(requesterId, roomId, checkIn, checkOut); + .findCrossingBookingsForRoomInDates(roomId, checkIn, checkOut); } @Test @SneakyThrows @DateTimeFormat(iso= DateTimeFormat.ISO.DATE) void findAllBookingsInDates() { - when(bookingService.findAllBookingsInDates(anyLong(), any(LocalDate.class), any(LocalDate.class))) + when(bookingService.findAllBookingsInDates(any(LocalDate.class), any(LocalDate.class))) .thenReturn(List.of(bookingDto)); mockMvc.perform(get("/bookings/inDates") @@ -318,15 +318,15 @@ void findAllBookingsInDates() { .param("endDate", "02.01.2024")) .andExpect(status().isOk()); - verify(bookingService).findAllBookingsInDates(requesterId, checkIn, checkOut); + verify(bookingService).findAllBookingsInDates(checkIn, checkOut); verify(bookingService, times(1)) - .findAllBookingsInDates(requesterId, checkIn, checkOut); + .findAllBookingsInDates(checkIn, checkOut); } @Test @SneakyThrows void findAllBookingsByPet() { - when(bookingService.findAllBookingsByPet(anyLong(), anyLong())) + when(bookingService.findAllBookingsByPet(anyLong())) .thenReturn(List.of(bookingDto)); mockMvc.perform(get("/bookings/allByPet/pets/{petId}", petId) @@ -334,15 +334,15 @@ void findAllBookingsByPet() { .accept(MediaType.ALL_VALUE)) .andExpect(status().isOk()); - verify(bookingService).findAllBookingsByPet(requesterId, petId); + verify(bookingService).findAllBookingsByPet(petId); verify(bookingService, times(1)) - .findAllBookingsByPet(requesterId, petId); + .findAllBookingsByPet(petId); } @Test @SneakyThrows void findAllBookingsByOwner() { - when(bookingService.findAllBookingsByOwner(anyLong(), anyLong())) + when(bookingService.findAllBookingsByOwner(anyLong())) .thenReturn(List.of(bookingDto)); mockMvc.perform(get("/bookings/allByOwner/owners/{ownerId}", ownerId) @@ -350,15 +350,15 @@ void findAllBookingsByOwner() { .accept(MediaType.ALL_VALUE)) .andExpect(status().isOk()); - verify(bookingService).findAllBookingsByOwner(requesterId, ownerId); + verify(bookingService).findAllBookingsByOwner(ownerId); verify(bookingService, times(1)) - .findAllBookingsByOwner(requesterId, ownerId); + .findAllBookingsByOwner(ownerId); } @Test @SneakyThrows void getAllAvailableStatuses() { - when(bookingService.getAllAvailableStatuses(anyLong(), anyLong(), any())) + when(bookingService.getAllAvailableStatuses(anyLong(), any())) .thenReturn(List.of(bookingDto.getStatus())); mockMvc.perform(get("/bookings/{bookingId}/availableStatus", bookingId) @@ -367,8 +367,8 @@ void getAllAvailableStatuses() { .param("date", "01.01.2025" )) .andExpect(status().isOk()); - verify(bookingService).getAllAvailableStatuses(requesterId, bookingId, checkDate); + verify(bookingService).getAllAvailableStatuses(bookingId, checkDate); verify(bookingService, times(1)) - .getAllAvailableStatuses(requesterId, bookingId, checkDate); + .getAllAvailableStatuses(bookingId, checkDate); } } diff --git a/src/test/java/ru/modgy/booking/service/BookingServiceImplTest.java b/src/test/java/ru/modgy/booking/service/BookingServiceImplTest.java index 5310d6b..767c7b2 100644 --- a/src/test/java/ru/modgy/booking/service/BookingServiceImplTest.java +++ b/src/test/java/ru/modgy/booking/service/BookingServiceImplTest.java @@ -50,7 +50,6 @@ class BookingServiceImplTest { private final LocalDate checkIn = LocalDate.of(2024, 1, 1); private final LocalDate checkOut = LocalDate.of(2024, 1, 2); private final LocalDate checkDate = LocalDate.of(2025, 1,1); - private final LocalDate futureDate = LocalDate.of(2025, 12, 1); private final LocalDateTime registrationDate = LocalDateTime.now(); private final Owner owner = Owner.builder() .id(1L) @@ -203,6 +202,8 @@ class BookingServiceImplTest { @Mock private UtilityService utilityService; @Mock + private BookingStatusService statusService; + @Mock private BookingMapper bookingMapper; @Mock private OwnerMapper ownerMapper; @@ -217,7 +218,7 @@ void addBooking_whenAddBookingByBoss_thenBookingAdded() { when(bookingMapper.toBookingDto(any(Booking.class))).thenReturn(bookingDto); when(ownerMapper.toOwnerShortDto(any(Owner.class))).thenReturn(ownerShortDto); - BookingDto result = bookingService.addBooking(boss.getId(), newBookingDto); + BookingDto result = bookingService.addBooking(newBookingDto); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.getId()); @@ -242,7 +243,7 @@ void addBooking_whenAddBookingAndRoomNotFound_thenNotFoundException() { .when(entityService).getRoomIfExists(anyLong()); assertThrows(NotFoundException.class, - () -> bookingService.addBooking(user.getId(), newBookingDto)); + () -> bookingService.addBooking(newBookingDto)); } @Test @@ -252,7 +253,7 @@ void getBookingById_whenGetBookingByBoss_thenReturnedBooking() { when(entityService.getListOfPetsByIds(any())).thenReturn(List.of(pet)); when(bookingMapper.toBookingDto(any(Booking.class))).thenReturn(bookingDto); - BookingDto result = bookingService.getBookingById(boss.getId(), bookingId); + BookingDto result = bookingService.getBookingById(bookingId); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.getId()); @@ -276,7 +277,7 @@ void getBookingById_whenGetBookingByIdAndBookingNotFound_thenNotFoundException() .when(entityService).getBookingIfExists(anyLong()); assertThrows(NotFoundException.class, - () -> bookingService.getBookingById(user.getId(), bookingId)); + () -> bookingService.getBookingById(bookingId)); } @Test @@ -290,7 +291,7 @@ void updateBookingById_whenRequesterBossAndBookingFound_thenUpdateAllFields() { when(bookingMapper.toBookingDto(any(Booking.class))).thenReturn(updatedBookingDto); when(bookingRepository.save(any(Booking.class))).thenReturn(updatedBooking); - BookingDto result = bookingService.updateBooking(boss.getId(), bookingId, updateBookingDto); + BookingDto result = bookingService.updateBooking(bookingId, checkDate, updateBookingDto); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.getId()); @@ -307,6 +308,7 @@ void updateBookingById_whenRequesterBossAndBookingFound_thenUpdateAllFields() { Assertions.assertEquals(updatedBookingDto.getPets(), result.getPets()); verify(bookingRepository, times(1)).save(any(Booking.class)); + verify(bookingRepository, times(1)).findBookingsForRoomInDates(anyLong(), any(), any()); verifyNoMoreInteractions(bookingRepository); } @@ -318,7 +320,7 @@ void updateBookingById_whenRequesterFoundAndBookingNotFound_thenNotFoundExceptio .when(entityService).getBookingIfExists(anyLong()); assertThrows(NotFoundException.class, - () -> bookingService.updateBooking(boss.getId(), bookingId, new UpdateBookingDto())); + () -> bookingService.updateBooking(bookingId, checkDate, new UpdateBookingDto())); } @Test @@ -326,7 +328,7 @@ void deleteBookingId_whenRequesterBossAndBookingFound_thenBookingDeleted() { when(entityService.getUserIfExists(anyLong())).thenReturn(boss); when(bookingRepository.deleteBookingById(anyLong())).thenReturn(1); - bookingService.deleteBookingById(boss.getId(), bookingId); + bookingService.deleteBookingById(bookingId); verify(bookingRepository, times(1)).deleteBookingById(anyLong()); verifyNoMoreInteractions(bookingRepository); @@ -337,7 +339,7 @@ void deleteBookingById_whenRequesterNotFound_thenNotFoundException() { when(entityService.getUserIfExists(anyLong())).thenReturn(null); assertThrows(NotFoundException.class, - () -> bookingService.deleteBookingById(boss.getId(), bookingId)); + () -> bookingService.deleteBookingById(bookingId)); } @Test @@ -346,7 +348,7 @@ void deleteBookingById_whenRequesterFoundAndBookingNotFound_thenNotFoundExceptio when(entityService.getBookingIfExists(anyLong())).thenReturn(null); assertThrows(NotFoundException.class, - () -> bookingService.deleteBookingById(boss.getId(), bookingId)); + () -> bookingService.deleteBookingById(bookingId)); } @Test @@ -355,7 +357,7 @@ void findCrossingBookingsForRoomInDates_whenOneCrossingBooking_thenReturnedListO when(bookingMapper.toBookingDto(booking)).thenReturn(bookingDto); when(entityService.getListOfPetsByIds(any())).thenReturn(List.of(pet)); - List result = bookingService.findCrossingBookingsForRoomInDates(boss.getId(), room.getId(), checkIn, checkOut); + List result = bookingService.findCrossingBookingsForRoomInDates(room.getId(), checkIn, checkOut); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.get(0).getId()); @@ -381,7 +383,7 @@ void findBlockingBookingsForRoomInDates_whenOneBlockingBooking_thenReturnedListO when(bookingMapper.toBookingDto(booking)).thenReturn(bookingDto); when(entityService.getListOfPetsByIds(any())).thenReturn(List.of(pet)); - List result = bookingService.findBlockingBookingsForRoomInDates(boss.getId(), room.getId(), checkIn, checkOut); + List result = bookingService.findBlockingBookingsForRoomInDates(room.getId(), checkIn, checkOut); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.get(0).getId()); @@ -406,21 +408,21 @@ void checkRoomAvailableInDates_whenOneBlockingBooking_thenConflictException() { when(bookingRepository.findBookingsForRoomInDates(anyLong(), any(), any())).thenReturn(Optional.of(List.of(booking))); assertThrows(ConflictException.class, - () -> bookingService.checkRoomAvailableInDates(boss.getId(), room.getId(), checkIn, checkOut)); + () -> bookingService.checkRoomAvailableInDates(room.getId(), checkIn, checkOut)); } @Test void checkRoomAvailableInDates_whenNoBlockingBooking_thenNoConflictException() { when(bookingRepository.findBookingsForRoomInDates(anyLong(), any(), any())).thenReturn(Optional.empty()); - Assertions.assertDoesNotThrow(() -> bookingService.checkRoomAvailableInDates(boss.getId(), room.getId(), checkIn, checkOut)); + Assertions.assertDoesNotThrow(() -> bookingService.checkRoomAvailableInDates(room.getId(), checkIn, checkOut)); } @Test void checkUpdateBookingRoomAvailableInDates_whenOneUpdatingBookingAndNoBlocking_thenNoConflictException() { when(bookingRepository.findBookingsForRoomInDates(anyLong(), any(), any())).thenReturn(Optional.of(List.of(booking))); - Assertions.assertDoesNotThrow(() -> bookingService.checkUpdateBookingRoomAvailableInDates(boss.getId(), room.getId(), bookingId, checkIn, checkOut)); + Assertions.assertDoesNotThrow(() -> bookingService.checkUpdateBookingRoomAvailableInDates(room.getId(), bookingId, checkIn, checkOut)); } @Test @@ -441,7 +443,7 @@ void checkUpdateBookingRoomAvailableInDates_whenOneBlockingBooking_thenConflictE when(bookingRepository.findBookingsForRoomInDates(anyLong(), any(), any())).thenReturn(Optional.of(List.of(booking, blockingBooking))); assertThrows(ConflictException.class, - () -> bookingService.checkRoomAvailableInDates(boss.getId(), room.getId(), checkIn, checkOut)); + () -> bookingService.checkRoomAvailableInDates(room.getId(), checkIn, checkOut)); } @Test @@ -450,7 +452,7 @@ void findAllBookingsInDates_whenOneBooking_thenReturnedListOfBooking() { when(bookingMapper.toBookingDto(booking)).thenReturn(bookingDto); when(entityService.getListOfPetsByIds(any())).thenReturn(List.of(pet)); - List result = bookingService.findAllBookingsInDates(boss.getId(), checkIn, checkOut); + List result = bookingService.findAllBookingsInDates(checkIn, checkOut); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.get(0).getId()); @@ -476,7 +478,7 @@ void findAllBookingsByPet_whenOneBooking_thenReturnedListOfBooking() { when(bookingMapper.toBookingDto(booking)).thenReturn(bookingDto); when(entityService.getListOfPetsByIds(any())).thenReturn(List.of(pet)); - List result = bookingService.findAllBookingsByPet(boss.getId(), pet.getId()); + List result = bookingService.findAllBookingsByPet(pet.getId()); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.get(0).getId()); @@ -502,7 +504,7 @@ void findAllBookingsByOwner_whenOneBooking_thenReturnedListOfBooking() { when(bookingMapper.toBookingDto(booking)).thenReturn(bookingDto); when(entityService.getListOfPetsByIds(any())).thenReturn(List.of(pet)); - List result = bookingService.findAllBookingsByOwner(boss.getId(), owner.getId()); + List result = bookingService.findAllBookingsByOwner(owner.getId()); Assertions.assertNotNull(result); Assertions.assertEquals(1L, result.get(0).getId()); @@ -526,470 +528,12 @@ void findAllBookingsByOwner_whenOneBooking_thenReturnedListOfBooking() { void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { when(entityService.getUserIfExists(anyLong())).thenReturn(boss); when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); + when(statusService.getAllAvailableStatuses(any(Booking.class), any(LocalDate.class))).thenReturn(List.of(StatusBooking.STATUS_INITIAL)); - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setCheckInDate(futureDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CONFIRMED); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CONFIRMED); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CONFIRMED); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CONFIRMED); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CONFIRMED); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CONFIRMED); - booking.setCheckInDate(futureDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_IN); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(2, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_IN); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(4, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_IN); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(4, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_IN); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(4, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_IN); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(4, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_IN); - booking.setCheckInDate(futureDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(0, result.size()); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(2, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(1)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(2, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(1)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(2, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(1)); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(0, result.size()); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(0, result.size()); - } - - @Test - void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); - booking.setCheckInDate(futureDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(0, result.size()); - } - - @Test - void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CANCELLED); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); + List result = bookingService.getAllAvailableStatuses(booking.getId(), checkDate); Assertions.assertNotNull(result); Assertions.assertEquals(1, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(0)); - } - - @Test - void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CANCELLED); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(4, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(3)); - } - - @Test - void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CANCELLED); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(checkDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(4, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(3)); - } - - @Test - void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CANCELLED); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CANCELLED); - booking.setCheckInDate(checkDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(3, result.size()); - Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); - Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); - } - - @Test - void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { - booking.setStatus(StatusBooking.STATUS_CANCELLED); - booking.setCheckInDate(futureDate); - booking.setCheckOutDate(futureDate); - when(entityService.getUserIfExists(anyLong())).thenReturn(boss); - when(entityService.getBookingIfExists(anyLong())).thenReturn(booking); - - List result = bookingService.getAllAvailableStatuses(boss.getId(), booking.getId(), checkDate); - - Assertions.assertNotNull(result); - Assertions.assertEquals(2, result.size()); Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); - Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); } } diff --git a/src/test/java/ru/modgy/booking/service/BookingServiceIntegrationTest.java b/src/test/java/ru/modgy/booking/service/BookingServiceIntegrationTest.java index a689aad..50e37ba 100644 --- a/src/test/java/ru/modgy/booking/service/BookingServiceIntegrationTest.java +++ b/src/test/java/ru/modgy/booking/service/BookingServiceIntegrationTest.java @@ -152,7 +152,7 @@ void addBooking() { newBookingDto.setRoomId(room.getId()); newBookingDto.setPetIds(List.of(pet.getId())); - BookingDto result = service.addBooking(requesterAdmin.getId(), newBookingDto); + BookingDto result = service.addBooking(newBookingDto); assertThat(result.getId(), notNullValue()); assertThat(result.getType(), equalTo(bookingDto.getType())); @@ -177,7 +177,7 @@ void getBookingById() { em.persist(pet); em.persist(booking); - BookingDto result = service.getBookingById(requesterAdmin.getId(), booking.getId()); + BookingDto result = service.getBookingById(booking.getId()); assertThat(result.getId(), notNullValue()); assertThat(result.getType(), equalTo(bookingDto.getType())); @@ -206,7 +206,7 @@ void updateBooking() { em.persist(pet); em.persist(booking); - BookingDto result = service.updateBooking(requesterAdmin.getId(), booking.getId(), updateBookingDto); + BookingDto result = service.updateBooking(booking.getId(), LocalDate.now(), updateBookingDto); assertThat(result.getId(), notNullValue()); assertThat(result.getType(), equalTo(bookingDto.getType())); @@ -231,12 +231,12 @@ void deleteBookingById() { em.persist(pet); em.persist(booking); - service.deleteBookingById(requesterAdmin.getId(), booking.getId()); + service.deleteBookingById(booking.getId()); String error = String.format("Booking with id=%d is not found", booking.getId()); NotFoundException exception = assertThrows( NotFoundException.class, - () -> service.getBookingById(requesterAdmin.getId(), booking.getId()) + () -> service.getBookingById(booking.getId()) ); assertEquals(error, exception.getMessage()); @@ -253,8 +253,7 @@ void findCrossingBookingsForRoomInDates() { em.persist(pet); em.persist(booking); - List result = service.findCrossingBookingsForRoomInDates( - requesterAdmin.getId(), room.getId(), checkIn, checkOut); + List result = service.findCrossingBookingsForRoomInDates(room.getId(), checkIn, checkOut); assertThat(result, hasSize(1)); assertThat(result.get(0).getId(), notNullValue()); @@ -280,8 +279,7 @@ void findBlockingBookingsForRoomInDates() { em.persist(pet); em.persist(booking); - List result = service.findBlockingBookingsForRoomInDates( - requesterAdmin.getId(), room.getId(), checkIn, checkOut); + List result = service.findBlockingBookingsForRoomInDates(room.getId(), checkIn, checkOut); assertThat(result, hasSize(1)); assertThat(result.get(0).getId(), notNullValue()); @@ -310,7 +308,7 @@ void checkRoomAvailableInDates_whenRoomNotAvailable() { String error = String.format("Room with id=%d is not available for current dates", room.getId()); ConflictException exception = assertThrows( ConflictException.class, - () -> service.checkRoomAvailableInDates(requesterAdmin.getId(), room.getId(), checkIn, checkOut) + () -> service.checkRoomAvailableInDates(room.getId(), checkIn, checkOut) ); assertEquals(error, exception.getMessage()); @@ -326,7 +324,7 @@ void checkRoomAvailableInDates_whenRoomAvailable() { em.persist(booking); Assertions.assertDoesNotThrow(() -> service.checkRoomAvailableInDates( - requesterAdmin.getId(), room.getId(), checkIn.plusDays(2), checkOut.plusDays(4))); + room.getId(), checkIn.plusDays(2), checkOut.plusDays(4))); } @Test @@ -354,7 +352,7 @@ void checkUpdateRoomAvailableInDates_whenRoomNotAvailable() { String error = String.format("Room with id=%d is not available for current dates", room.getId()); ConflictException exception = assertThrows( ConflictException.class, - () -> service.checkUpdateBookingRoomAvailableInDates(requesterAdmin.getId(), room.getId(), booking.getId(), checkIn, checkOut) + () -> service.checkUpdateBookingRoomAvailableInDates(room.getId(), booking.getId(), checkIn, checkOut) ); assertEquals(error, exception.getMessage()); @@ -369,8 +367,7 @@ void findAllBookingsInDates() { em.persist(pet); em.persist(booking); - List result = service.findAllBookingsInDates( - requesterAdmin.getId(), checkIn, checkOut); + List result = service.findAllBookingsInDates(checkIn, checkOut); assertThat(result, hasSize(1)); assertThat(result.get(0).getId(), notNullValue()); @@ -396,8 +393,7 @@ void findAllBookingsByPet() { em.persist(pet); em.persist(booking); - List result = service.findAllBookingsByPet( - requesterAdmin.getId(), pet.getId()); + List result = service.findAllBookingsByPet(pet.getId()); assertThat(result, hasSize(1)); assertThat(result.get(0).getId(), notNullValue()); @@ -423,8 +419,7 @@ void findAllBookingsByOwner() { em.persist(pet); em.persist(booking); - List result = service.findAllBookingsByOwner( - requesterAdmin.getId(), owner.getId()); + List result = service.findAllBookingsByOwner(owner.getId()); assertThat(result, hasSize(1)); assertThat(result.get(0).getId(), notNullValue()); @@ -450,8 +445,7 @@ void getAllAvailableStatuses() { em.persist(pet); em.persist(booking); - List result = service.getAllAvailableStatuses( - requesterAdmin.getId(), booking.getId(), LocalDate.now()); + List result = service.getAllAvailableStatuses(booking.getId(), LocalDate.now()); assertThat(result, hasSize(3)); assertThat(result.get(0), notNullValue()); diff --git a/src/test/java/ru/modgy/booking/service/BookingStatuseServiceTest.java b/src/test/java/ru/modgy/booking/service/BookingStatuseServiceTest.java new file mode 100644 index 0000000..5a6b6e7 --- /dev/null +++ b/src/test/java/ru/modgy/booking/service/BookingStatuseServiceTest.java @@ -0,0 +1,490 @@ +package ru.modgy.booking.service; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; +import org.mockito.quality.Strictness; +import ru.modgy.booking.model.Booking; +import ru.modgy.booking.model.StatusBooking; +import ru.modgy.booking.model.TypesBooking; +import ru.modgy.owner.model.Owner; +import ru.modgy.pet.model.Pet; +import ru.modgy.pet.model.Sex; +import ru.modgy.pet.model.TypeOfPet; +import ru.modgy.room.category.model.Category; +import ru.modgy.room.model.Room; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@ExtendWith(MockitoExtension.class) +@MockitoSettings(strictness = Strictness.LENIENT) +public class BookingStatuseServiceTest { + private final LocalDate checkIn = LocalDate.of(2024, 1, 1); + private final LocalDate checkOut = LocalDate.of(2024, 1, 2); + private final LocalDate checkDate = LocalDate.of(2025, 1,1); + private final LocalDate futureDate = LocalDate.of(2025, 12, 1); + private final LocalDateTime registrationDate = LocalDateTime.now(); + private final Owner owner = Owner.builder() + .id(1L) + .firstName("Ivan") + .lastName("Ivanov") + .middleName("Ivanovich") + .mainPhone("89000000000") + .optionalPhone("89000000001") + .otherContacts("other contacts") + .actualAddress("actual address") + .trustedMan("trusted man") + .source("source") + .comment("comment") + .rating(5) + .registrationDate(registrationDate) + .build(); + private final Pet pet = Pet.builder() + .id(1L) + .owner(owner) + .type(TypeOfPet.DOG) + .name("Шарик") + .breed("Spaniel") + .birthDate(LocalDate.of(2023, 1, 1)) + .sex(Sex.FEMALE) + .build(); + private final Room room = Room.builder() + .id(1L) + .area(5.0) + .number("standard room") + .category(new Category(1L, "name", "description")) + .isVisible(true) + .build(); + private final Long bookingId = 1L; + private final Booking booking = Booking.builder() + .id(bookingId) + .type(TypesBooking.TYPE_BOOKING) + .checkInDate(checkIn) + .checkOutDate(checkOut) + .status(StatusBooking.STATUS_INITIAL) + .price(0.0) + .amount(0.0) + .prepaymentAmount(0.0) + .isPrepaid(false) + .room(room) + .pets(List.of(pet)) + .build(); + + @InjectMocks + private BookingStatusService statusService; + + @Test + void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingInitialStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setCheckInDate(futureDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CONFIRMED); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CONFIRMED); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CONFIRMED); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CONFIRMED); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CONFIRMED); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingConfirmedStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CONFIRMED); + booking.setCheckInDate(futureDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_IN); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(2, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(1)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_IN); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(4, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_IN); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(4, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_IN); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(4, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_IN); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(4, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(2)); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(3)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedInStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_IN); + booking.setCheckInDate(futureDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(0, result.size()); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(2, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(1)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(2, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(1)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(2, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CANCELLED, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(1)); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(0, result.size()); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(0, result.size()); + } + + @Test + void getAllAvailableStatuses_whenBookingCheckedOutStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CHECKED_OUT); + booking.setCheckInDate(futureDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(0, result.size()); + } + + @Test + void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateAndEndDateInPast_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CANCELLED); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(1, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(0)); + } + + @Test + void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateInPastAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CANCELLED); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(4, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(3)); + } + + @Test + void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateTodayAndEndDateToday_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CANCELLED); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(checkDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(4, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_OUT, result.get(3)); + } + + @Test + void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateInPastAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CANCELLED); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateTodayAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CANCELLED); + booking.setCheckInDate(checkDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(3, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + Assertions.assertEquals(StatusBooking.STATUS_CHECKED_IN, result.get(2)); + } + + @Test + void getAllAvailableStatuses_whenBookingCancelledStatusAndStartDateInFutureAndEndDateInFuture_thenReturnedListOfStatuses() { + booking.setStatus(StatusBooking.STATUS_CANCELLED); + booking.setCheckInDate(futureDate); + booking.setCheckOutDate(futureDate); + + List result = statusService.getAllAvailableStatuses(booking, checkDate); + + Assertions.assertNotNull(result); + Assertions.assertEquals(2, result.size()); + Assertions.assertEquals(StatusBooking.STATUS_INITIAL, result.get(0)); + Assertions.assertEquals(StatusBooking.STATUS_CONFIRMED, result.get(1)); + } +} diff --git a/src/test/java/ru/modgy/room/service/RoomServiceIntegrationTest.java b/src/test/java/ru/modgy/room/service/RoomServiceIntegrationTest.java index d546656..8b03190 100644 --- a/src/test/java/ru/modgy/room/service/RoomServiceIntegrationTest.java +++ b/src/test/java/ru/modgy/room/service/RoomServiceIntegrationTest.java @@ -217,7 +217,7 @@ void checkUniqueRoomNumber_whenNumberUnique_thenReturnedTrue() { em.persist(category); em.persist(room); - String roomNumber = "1F"; + String roomNumber = "uniqueRoomNumber"; boolean result = roomService.checkUniqueRoomNumber(requesterAdmin.getId(), roomNumber); assertTrue(result);