Skip to content

Implemented builder pattern in Reservation and SuperAdmin IT classes.… #130

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ReservationRequest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,23 @@
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;

import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;

import static com.projects.aeroplannerrestapi.constants.PathConstants.API_V1_RESERVATIONS;
import static com.projects.aeroplannerrestapi.constants.PathConstants.ID;
import static com.projects.aeroplannerrestapi.constants.SecurityRoleConstants.USER;
import static com.projects.aeroplannerrestapi.constants.SortingAndPaginationConstants.*;
import static com.projects.aeroplannerrestapi.util.TestConstants.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@AutoConfigureMockMvc
@WithMockUser(roles = "USER")
@ActiveProfiles("integration")
@WithMockUser(roles = USER)
@ActiveProfiles(INTEGRATION)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ReservationControllerIT extends AbstractContainerBaseTest {

Expand All @@ -57,67 +61,71 @@ public void setup() {
@Test
public void givenReservationRequest_whenCreateReservation_thenReturnReservationResponse() throws Exception {
// given
Flight flight = new Flight();
flight.setAirline("Airline");
flight.setFlightNumber("Flight Number");
flight.setDepartureTime("2023-04-19T15:30:00");
flight.setArrivalTime("2024-04-19T15:30:00");
flight.setDuration(Duration.between(LocalDateTime.parse("2023-04-19T15:30:00"),
LocalDateTime.parse("2024-04-19T15:30:00")));
flight.setPrice(BigDecimal.valueOf(0.0));
flight.setAircraftType("Aircraft Type");
flight.setSeatAvailability(0);
flight.setCurrentAvailableSeat(0);
flight.setStatus(FlightStatusEnum.UNKNOWN);
Flight flight = Flight.builder()
.airline(AIRLINE)
.flightNumber(FLIGHT_NUMBER)
.departureTime(VALID_DEPARTURE_TIME)
.arrivalTime(VALID_ARRIVAL_TIME)
.duration(Duration.between(LocalDateTime.parse(VALID_DEPARTURE_TIME), LocalDateTime.parse(VALID_ARRIVAL_TIME)))
.price(VALID_PRICE)
.aircraftType(AIRCRAFT_TYPE)
.seatAvailability(ZERO)
.currentAvailableSeat(ZERO)
.status(FlightStatusEnum.UNKNOWN)
.build();

Flight savedFlight = flightRepository.save(flight);

ReservationRequest reservationRequest = new ReservationRequest();
reservationRequest.setPassengerId(1L);
reservationRequest.setFlightId(savedFlight.getId());
reservationRequest.setSeatNumber(1);
reservationRequest.setReservationDate("2024-05-19T15:30:00");
reservationRequest.setReservationStatus(ReservationStatusEnum.CONFIRMED);
ReservationRequest reservationRequest = ReservationRequest.builder()
.passengerId(Long.parseLong(ONE))
.flightId(savedFlight.getId())
.seatNumber(Integer.parseInt(ONE))
.reservationDate(VALID_RESERVATION_DATE)
.reservationStatus(ReservationStatusEnum.CONFIRMED)
.build();

// when
ResultActions resultActions = mockMvc.perform(post("/api/v1/reservations")
ResultActions resultActions = mockMvc.perform(post(API_V1_RESERVATIONS)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(reservationRequest)));

// then
resultActions.andDo(print())
.andExpect(status().isCreated())
.andExpect(jsonPath("$.passengerId").value(reservationRequest.getPassengerId()))
.andExpect(jsonPath("$.flightId").value(reservationRequest.getFlightId()))
.andExpect(jsonPath("$.seatNumber").value(reservationRequest.getSeatNumber()))
.andExpect(jsonPath("$.reservationDate").value(reservationRequest.getReservationDate()))
.andExpect(jsonPath("$.reservationStatus").value(reservationRequest.getReservationStatus().name()));
.andExpect(jsonPath(PASSENGER_ID_PATH).value(reservationRequest.getPassengerId()))
.andExpect(jsonPath(FLIGHT_ID_PATH).value(reservationRequest.getFlightId()))
.andExpect(jsonPath(SEAT_NUMBER_PATH).value(reservationRequest.getSeatNumber()))
.andExpect(jsonPath(RESERVATION_DATE_PATH).value(reservationRequest.getReservationDate()))
.andExpect(jsonPath(RESERVATION_STATUS_PATH).value(reservationRequest.getReservationStatus().name()));
}

@Test
public void givenListOfReservations_whenGetAllReservations_thenReturnListOfReservations() throws Exception {
// given
Reservation reservation1 = new Reservation();
reservation1.setPassengerId(1L);
reservation1.setFlightId(1L);
reservation1.setSeatNumber(1);
reservation1.setReservationDate("2024-05-19T15:30:00");
reservation1.setReservationStatus(ReservationStatusEnum.CONFIRMED);

Reservation reservation2 = new Reservation();
reservation2.setPassengerId(2L);
reservation2.setFlightId(2L);
reservation2.setSeatNumber(2);
reservation2.setReservationDate("2024-05-19T15:30:00");
reservation2.setReservationStatus(ReservationStatusEnum.CONFIRMED);
Reservation reservation1 = Reservation.builder()
.passengerId(VALID_PASSENGER_ID)
.flightId(VALID_FLIGHT_ID)
.seatNumber(Integer.parseInt(ONE))
.reservationDate(VALID_RESERVATION_DATE)
.reservationStatus(ReservationStatusEnum.CONFIRMED)
.build();

Reservation reservation2 = Reservation.builder()
.passengerId(Long.parseLong(TWO))
.flightId(Long.parseLong(TWO))
.seatNumber(Integer.parseInt(TWO))
.reservationDate(VALID_RESERVATION_DATE)
.reservationStatus(ReservationStatusEnum.CONFIRMED)
.build();

List<Reservation> reservations = reservationRepository.saveAll(List.of(reservation1, reservation2));

// when
ResultActions resultActions = mockMvc.perform(get("/api/v1/reservations")
.param("pageNum", "1")
.param("pageSize", "10")
.param("sortBy", "id")
.param("sortDir", "asc"));
ResultActions resultActions = mockMvc.perform(get(API_V1_RESERVATIONS)
.param(PAGE_NUM, DEFAULT_PAGE_NUM)
.param(PAGE_SIZE, DEFAULT_PAGE_SIZE)
.param(SORT_BY, DEFAULT_SORT_BY)
.param(SORT_DIR, DEFAULT_SORT_DIR));

// then
resultActions.andDo(print())
Expand All @@ -137,104 +145,110 @@ public void givenListOfReservations_whenGetAllReservations_thenReturnListOfReser
@Test
public void givenReservationId_whenGetReservation_thenReturnReservationResponse() throws Exception {
// given
Reservation reservation = new Reservation();
reservation.setPassengerId(1L);
reservation.setFlightId(1L);
reservation.setSeatNumber(1);
reservation.setReservationDate("2024-05-19T15:30:00");
reservation.setReservationStatus(ReservationStatusEnum.CONFIRMED);
Reservation reservation = Reservation.builder()
.passengerId(VALID_PASSENGER_ID)
.flightId(VALID_FLIGHT_ID)
.seatNumber(Integer.parseInt(ONE))
.reservationDate(VALID_RESERVATION_DATE)
.reservationStatus(ReservationStatusEnum.CONFIRMED)
.build();

Reservation savedReservation = reservationRepository.save(reservation);

// when
ResultActions resultActions = mockMvc.perform(get("/api/v1/reservations/{id}", savedReservation.getId()));
ResultActions resultActions = mockMvc.perform(get(API_V1_RESERVATIONS.concat(ID), savedReservation.getId()));

// then
resultActions.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.passengerId").value(savedReservation.getPassengerId()))
.andExpect(jsonPath("$.flightId").value(savedReservation.getFlightId()))
.andExpect(jsonPath("$.seatNumber").value(savedReservation.getSeatNumber()))
.andExpect(jsonPath("$.reservationDate").value(savedReservation.getReservationDate()))
.andExpect(jsonPath("$.reservationStatus").value(savedReservation.getReservationStatus().name()));
.andExpect(jsonPath(PASSENGER_ID_PATH).value(savedReservation.getPassengerId()))
.andExpect(jsonPath(FLIGHT_ID_PATH).value(savedReservation.getFlightId()))
.andExpect(jsonPath(SEAT_NUMBER_PATH).value(savedReservation.getSeatNumber()))
.andExpect(jsonPath(RESERVATION_DATE_PATH).value(savedReservation.getReservationDate()))
.andExpect(jsonPath(RESERVATION_STATUS_PATH).value(savedReservation.getReservationStatus().name()));
}

@Test
public void givenReservationIdAndReservationRequest_whenUpdateReservation_thenReturnUpdatedReservationObject() throws Exception {
// given
Flight flight = new Flight();
flight.setAirline("Airline");
flight.setFlightNumber("Flight Number");
flight.setDepartureTime("2023-04-19T15:30:00");
flight.setArrivalTime("2024-04-19T15:30:00");
flight.setDuration(Duration.between(LocalDateTime.parse("2023-04-19T15:30:00"),
LocalDateTime.parse("2024-04-19T15:30:00")));
flight.setPrice(BigDecimal.valueOf(0.0));
flight.setAircraftType("Aircraft Type");
flight.setSeatAvailability(0);
flight.setCurrentAvailableSeat(0);
flight.setStatus(FlightStatusEnum.UNKNOWN);
Flight flight = Flight.builder()
.airline(AIRLINE)
.flightNumber(FLIGHT_NUMBER)
.departureTime(VALID_DEPARTURE_TIME)
.arrivalTime(VALID_ARRIVAL_TIME)
.duration(Duration.between(LocalDateTime.parse(VALID_DEPARTURE_TIME), LocalDateTime.parse(VALID_ARRIVAL_TIME)))
.price(VALID_PRICE)
.aircraftType(AIRCRAFT_TYPE)
.seatAvailability(ZERO)
.currentAvailableSeat(ZERO)
.status(FlightStatusEnum.UNKNOWN)
.build();

Flight savedFlight = flightRepository.save(flight);

Reservation reservation = new Reservation();
reservation.setPassengerId(1L);
reservation.setFlightId(savedFlight.getId());
reservation.setSeatNumber(1);
reservation.setReservationDate("2024-05-19T15:30:00");
reservation.setReservationStatus(ReservationStatusEnum.CONFIRMED);
Reservation reservation = Reservation.builder()
.passengerId(Long.parseLong(ONE))
.flightId(savedFlight.getId())
.seatNumber(Integer.parseInt(ONE))
.reservationDate(VALID_RESERVATION_DATE)
.reservationStatus(ReservationStatusEnum.CONFIRMED)
.build();

Reservation savedReservation = reservationRepository.save(reservation);

ReservationRequest updatedReservationRequest = new ReservationRequest();
updatedReservationRequest.setPassengerId(2L);
updatedReservationRequest.setFlightId(savedFlight.getId());
updatedReservationRequest.setSeatNumber(2);
updatedReservationRequest.setReservationDate("2024-06-19T15:30:00");
updatedReservationRequest.setReservationStatus(ReservationStatusEnum.CONFIRMED);
ReservationRequest updatedReservationRequest = ReservationRequest.builder()
.passengerId(Long.parseLong(TWO))
.flightId(savedFlight.getId())
.seatNumber(Integer.parseInt(TWO))
.reservationDate(VALID_RESERVATION_DATE)
.reservationStatus(ReservationStatusEnum.CONFIRMED)
.build();

// when
ResultActions resultActions = mockMvc.perform(put("/api/v1/reservations/{id}", savedReservation.getId())
ResultActions resultActions = mockMvc.perform(put(API_V1_RESERVATIONS.concat(ID), savedReservation.getId())
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(updatedReservationRequest)));

// then
resultActions.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.passengerId").value(updatedReservationRequest.getPassengerId()))
.andExpect(jsonPath("$.flightId").value(updatedReservationRequest.getFlightId()))
.andExpect(jsonPath("$.seatNumber").value(updatedReservationRequest.getSeatNumber()))
.andExpect(jsonPath("$.reservationDate").value(updatedReservationRequest.getReservationDate()))
.andExpect(jsonPath("$.reservationStatus").value(updatedReservationRequest.getReservationStatus().name()));
.andExpect(jsonPath(PASSENGER_ID_PATH).value(updatedReservationRequest.getPassengerId()))
.andExpect(jsonPath(FLIGHT_ID_PATH).value(updatedReservationRequest.getFlightId()))
.andExpect(jsonPath(SEAT_NUMBER_PATH).value(updatedReservationRequest.getSeatNumber()))
.andExpect(jsonPath(RESERVATION_DATE_PATH).value(updatedReservationRequest.getReservationDate()))
.andExpect(jsonPath(RESERVATION_STATUS_PATH).value(updatedReservationRequest.getReservationStatus().name()));
}

@Test
public void givenReservationId_whenCancelReservation_thenReturnNothing() throws Exception {
// given
Flight flight = new Flight();
flight.setAirline("Airline");
flight.setFlightNumber("Flight Number");
flight.setDepartureTime("2023-04-19T15:30:00");
flight.setArrivalTime("2024-04-19T15:30:00");
flight.setDuration(Duration.between(LocalDateTime.parse("2023-04-19T15:30:00"),
LocalDateTime.parse("2024-04-19T15:30:00")));
flight.setPrice(BigDecimal.valueOf(0.0));
flight.setAircraftType("Aircraft Type");
flight.setSeatAvailability(0);
flight.setCurrentAvailableSeat(0);
flight.setStatus(FlightStatusEnum.UNKNOWN);
Flight flight = Flight.builder()
.airline(AIRLINE)
.flightNumber(FLIGHT_NUMBER)
.departureTime(VALID_DEPARTURE_TIME)
.arrivalTime(VALID_ARRIVAL_TIME)
.duration(Duration.between(LocalDateTime.parse(VALID_DEPARTURE_TIME), LocalDateTime.parse(VALID_ARRIVAL_TIME)))
.price(VALID_PRICE)
.aircraftType(AIRCRAFT_TYPE)
.seatAvailability(ZERO)
.currentAvailableSeat(ZERO)
.status(FlightStatusEnum.UNKNOWN)
.build();

Flight savedFlight = flightRepository.save(flight);

Reservation reservation = new Reservation();
reservation.setPassengerId(1L);
reservation.setFlightId(savedFlight.getId());
reservation.setSeatNumber(1);
reservation.setReservationDate("2024-05-19T15:30:00");
reservation.setReservationStatus(ReservationStatusEnum.CONFIRMED);
Reservation reservation = Reservation.builder()
.passengerId(Long.parseLong(ONE))
.flightId(savedFlight.getId())
.seatNumber(Integer.parseInt(ONE))
.reservationDate(VALID_RESERVATION_DATE)
.reservationStatus(ReservationStatusEnum.CONFIRMED)
.build();

Reservation savedReservation = reservationRepository.save(reservation);

// when
ResultActions resultActions = mockMvc.perform(delete("/api/v1/reservations/{id}", savedReservation.getId()));
ResultActions resultActions = mockMvc.perform(delete(API_V1_RESERVATIONS.concat(ID), savedReservation.getId()));

// then
resultActions.andDo(print())
Expand Down
Loading
Loading