diff --git a/src/main/java/com/projects/aeroplannerrestapi/constants/SecurityRoleConstants.java b/src/main/java/com/projects/aeroplannerrestapi/constants/SecurityRoleConstants.java index 78e9723..491b611 100644 --- a/src/main/java/com/projects/aeroplannerrestapi/constants/SecurityRoleConstants.java +++ b/src/main/java/com/projects/aeroplannerrestapi/constants/SecurityRoleConstants.java @@ -12,6 +12,8 @@ private SecurityRoleConstants() { public static final String AUTHORIZATION = "Authorization"; public static final String SUPER_ADMIN = "SUPER_ADMIN"; + public static final String ADMIN = "ADMIN"; + public static final String USER = "USER"; public static final String IS_AUTHENTICATED = "isAuthenticated()"; public static final String USER_ROLE_AUTHORIZATION = "hasRole('USER')"; public static final String ADMIN_ROLE_AUTHORIZATION = "hasRole('ADMIN')"; diff --git a/src/main/java/com/projects/aeroplannerrestapi/dto/request/FlightRequest.java b/src/main/java/com/projects/aeroplannerrestapi/dto/request/FlightRequest.java index 8898acd..7152e49 100644 --- a/src/main/java/com/projects/aeroplannerrestapi/dto/request/FlightRequest.java +++ b/src/main/java/com/projects/aeroplannerrestapi/dto/request/FlightRequest.java @@ -4,15 +4,13 @@ import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.PositiveOrZero; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.math.BigDecimal; @Getter @Setter +@Builder @AllArgsConstructor @NoArgsConstructor public class FlightRequest { diff --git a/src/main/java/com/projects/aeroplannerrestapi/dto/request/LoginRequest.java b/src/main/java/com/projects/aeroplannerrestapi/dto/request/LoginRequest.java index c136fe6..d0c6012 100644 --- a/src/main/java/com/projects/aeroplannerrestapi/dto/request/LoginRequest.java +++ b/src/main/java/com/projects/aeroplannerrestapi/dto/request/LoginRequest.java @@ -7,6 +7,7 @@ @Getter @Setter +@Builder @AllArgsConstructor @NoArgsConstructor public class LoginRequest { diff --git a/src/main/java/com/projects/aeroplannerrestapi/dto/request/RegisterRequest.java b/src/main/java/com/projects/aeroplannerrestapi/dto/request/RegisterRequest.java index 9c46516..676f9c4 100644 --- a/src/main/java/com/projects/aeroplannerrestapi/dto/request/RegisterRequest.java +++ b/src/main/java/com/projects/aeroplannerrestapi/dto/request/RegisterRequest.java @@ -3,13 +3,11 @@ import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; @Getter @Setter +@Builder @AllArgsConstructor @NoArgsConstructor public class RegisterRequest { diff --git a/src/main/java/com/projects/aeroplannerrestapi/entity/Flight.java b/src/main/java/com/projects/aeroplannerrestapi/entity/Flight.java index ae99636..479b5ec 100644 --- a/src/main/java/com/projects/aeroplannerrestapi/entity/Flight.java +++ b/src/main/java/com/projects/aeroplannerrestapi/entity/Flight.java @@ -2,16 +2,14 @@ import com.projects.aeroplannerrestapi.enums.FlightStatusEnum; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.math.BigDecimal; import java.time.Duration; @Getter @Setter +@Builder @AllArgsConstructor @NoArgsConstructor @Entity diff --git a/src/main/java/com/projects/aeroplannerrestapi/entity/Role.java b/src/main/java/com/projects/aeroplannerrestapi/entity/Role.java index 88502cc..ecf742e 100644 --- a/src/main/java/com/projects/aeroplannerrestapi/entity/Role.java +++ b/src/main/java/com/projects/aeroplannerrestapi/entity/Role.java @@ -2,15 +2,13 @@ import com.projects.aeroplannerrestapi.enums.RoleEnum; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.util.Set; @Getter @Setter +@Builder @AllArgsConstructor @NoArgsConstructor @Entity diff --git a/src/main/java/com/projects/aeroplannerrestapi/entity/User.java b/src/main/java/com/projects/aeroplannerrestapi/entity/User.java index e04c204..452eac2 100644 --- a/src/main/java/com/projects/aeroplannerrestapi/entity/User.java +++ b/src/main/java/com/projects/aeroplannerrestapi/entity/User.java @@ -1,10 +1,7 @@ package com.projects.aeroplannerrestapi.entity; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.core.GrantedAuthority; @@ -18,6 +15,7 @@ @Getter @Setter +@Builder @AllArgsConstructor @NoArgsConstructor @Entity diff --git a/src/test/java/com/projects/aeroplannerrestapi/controller/AuthenticationControllerIT.java b/src/test/java/com/projects/aeroplannerrestapi/controller/AuthenticationControllerIT.java index 83eb565..dc1c229 100644 --- a/src/test/java/com/projects/aeroplannerrestapi/controller/AuthenticationControllerIT.java +++ b/src/test/java/com/projects/aeroplannerrestapi/controller/AuthenticationControllerIT.java @@ -25,14 +25,18 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; -import java.util.HashSet; import java.util.Set; +import static com.projects.aeroplannerrestapi.constants.OpenApiConstants.LOGGED_OUT_SUCCESSFULLY; +import static com.projects.aeroplannerrestapi.constants.PathConstants.*; +import static com.projects.aeroplannerrestapi.constants.SecurityRoleConstants.AUTHORIZATION; +import static com.projects.aeroplannerrestapi.constants.SecurityRoleConstants.BEARER; +import static com.projects.aeroplannerrestapi.util.TestConstants.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @AutoConfigureMockMvc -@ActiveProfiles("integration") +@ActiveProfiles(INTEGRATION) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AuthenticationControllerIT extends AbstractContainerBaseTest { @@ -63,100 +67,103 @@ public class AuthenticationControllerIT extends AbstractContainerBaseTest { private String password; + private Role savedRole; + @BeforeEach public void setup() { - fullName = "full name"; - email = "sample@email.com"; - password = "Password@123!"; - userRepository.deleteAll(); roleRepository.deleteAll(); + + Role role = Role.builder() + .name(RoleEnum.USER) + .description(DEFAULT_USER_ROLE) + .build(); + savedRole = roleRepository.save(role); + + fullName = FULL_NAME; + email = VALID_EMAIL_ADDRESS; + password = VALID_PASSWORD; } @Test public void givenRegisterRequest_whenRegister_thenReturnRegisteredUser() throws Exception { // given - RegisterRequest registerRequest = new RegisterRequest(); - registerRequest.setFullName(fullName); - registerRequest.setEmail(email); - registerRequest.setPassword(passwordEncoder.encode(password)); - Role role = new Role(); - role.setName(RoleEnum.USER); - role.setDescription("Default user role"); - roleRepository.save(role); + RegisterRequest registerRequest = RegisterRequest.builder() + .fullName(fullName) + .email(email) + .password(password) + .build(); // when - ResultActions resultActions = mockMvc.perform(post("/api/v1/auth/register") + ResultActions resultActions = mockMvc.perform(post(API_V1_AUTH.concat(REGISTER)) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(registerRequest))); // then resultActions.andDo(MockMvcResultHandlers.print()) .andExpect(status().isCreated()) - .andExpect(jsonPath("$.email").value(registerRequest.getEmail())) - .andExpect(jsonPath("$.fullName").value(registerRequest.getFullName())); + .andExpect(jsonPath(EMAIL_PATH).value(registerRequest.getEmail())) + .andExpect(jsonPath(FULL_NAME_PATH).value(registerRequest.getFullName())); } @Test public void givenLoginRequest_whenAuthenticate_thenReturnLoginResponse() throws Exception { // given - User user = new User(); - user.setFullName(fullName); - user.setEmail(email); - user.setPassword(passwordEncoder.encode(password)); - Role role = new Role(); - role.setName(RoleEnum.USER); - role.setDescription("Default user role"); - Role savedRole = roleRepository.save(role); - user.setRoles(Set.of(savedRole)); + User user = User.builder() + .fullName(fullName) + .email(email) + .password(passwordEncoder.encode(password)) + .roles(Set.of(savedRole)) + .build(); userRepository.save(user); - LoginRequest loginRequest = new LoginRequest(); - loginRequest.setEmail(email); - loginRequest.setPassword(password); + LoginRequest loginRequest = LoginRequest.builder() + .email(email) + .password(password) + .build(); + authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(email, password)); - User savedUser = userRepository.findByEmail(email).get(); - String token = jwtService.generateToken(savedUser); + + User foundUser = userRepository.findByEmail(email).get(); + String token = jwtService.generateToken(foundUser); long expirationTime = jwtService.getExpirationTime(); // when - ResultActions resultActions = mockMvc.perform(MockMvcRequestBuilders.post("/api/v1/auth/login") + ResultActions resultActions = mockMvc.perform(MockMvcRequestBuilders.post(API_V1_AUTH.concat(LOGIN)) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(loginRequest))); // then resultActions.andDo(MockMvcResultHandlers.print()) .andExpect(status().isOk()) - .andExpect(jsonPath("$.token").value(token)) - .andExpect(jsonPath("$.expiredIn").value(expirationTime)); + .andExpect(jsonPath(TOKEN_PATH).value(token)) + .andExpect(jsonPath(EXPIRED_IN_PATH).value(expirationTime)); } @Test public void givenHttServletRequest_whenLogout_thenReturnSuccessMessage() throws Exception { // given - User user = new User(); - user.setFullName(fullName); - user.setEmail(email); - user.setPassword(passwordEncoder.encode(password)); - Role role = new Role(); - role.setName(RoleEnum.USER); - role.setDescription("Default user role"); - Role savedRole = roleRepository.save(role); - user.setRoles(Set.of(savedRole)); + User user = User.builder() + .fullName(fullName) + .email(email) + .password(passwordEncoder.encode(password)) + .roles(Set.of(savedRole)) + .build(); userRepository.save(user); authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(email, password)); - User savedUser = userRepository.findByEmail(email).get(); - String token = jwtService.generateToken(savedUser); + + User foundUser = userRepository.findByEmail(email).get(); + String token = jwtService.generateToken(foundUser); // when - ResultActions resultActions = mockMvc.perform(post("/api/v1/auth/logout") + ResultActions resultActions = mockMvc.perform(post(API_V1_AUTH.concat(LOGOUT)) .contentType(MediaType.APPLICATION_JSON) - .header("Authorization", "Bearer " + token)); + .header(AUTHORIZATION, BEARER + token)); // then resultActions.andDo(MockMvcResultHandlers.print()) .andExpect(status().isOk()) - .andExpect(content().string("Logged out successfully")); + .andExpect(content().string(LOGGED_OUT_SUCCESSFULLY)); } } diff --git a/src/test/java/com/projects/aeroplannerrestapi/controller/FlightControllerIT.java b/src/test/java/com/projects/aeroplannerrestapi/controller/FlightControllerIT.java index 04b1c74..44441f5 100644 --- a/src/test/java/com/projects/aeroplannerrestapi/controller/FlightControllerIT.java +++ b/src/test/java/com/projects/aeroplannerrestapi/controller/FlightControllerIT.java @@ -17,18 +17,22 @@ 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_FLIGHTS; +import static com.projects.aeroplannerrestapi.constants.PathConstants.ID; +import static com.projects.aeroplannerrestapi.constants.SecurityRoleConstants.ADMIN; +import static com.projects.aeroplannerrestapi.constants.SecurityRoleConstants.USER; +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.*; @AutoConfigureMockMvc -@ActiveProfiles("integration") -@WithMockUser(roles = "ADMIN") +@ActiveProfiles(INTEGRATION) +@WithMockUser(roles = ADMIN) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class FlightControllerIT extends AbstractContainerBaseTest { @@ -45,18 +49,18 @@ public class FlightControllerIT extends AbstractContainerBaseTest { @BeforeEach public void setup() { - 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.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(); flightRepository.deleteAll(); } @@ -65,97 +69,98 @@ public void setup() { public void givenFlightRequest_whenCreateFlight_thenReturnFlightResponse() throws Exception { // given - FlightRequest flightRequest = new FlightRequest(); - flightRequest.setAirline("Airline"); - flightRequest.setFlightNumber("Flight Number"); - flightRequest.setDepartureTime("2023-04-19T15:30:00"); - flightRequest.setArrivalTime("2024-04-19T15:30:00"); - flightRequest.setPrice(BigDecimal.valueOf(1.0)); - flightRequest.setAircraftType("Aircraft Type"); - flightRequest.setSeatAvailability(0); - flightRequest.setStatus(FlightStatusEnum.UNKNOWN); + FlightRequest flightRequest = FlightRequest.builder() + .airline(AIRLINE) + .flightNumber(FLIGHT_NUMBER) + .departureTime(VALID_DEPARTURE_TIME) + .arrivalTime(VALID_ARRIVAL_TIME) + .price(VALID_PRICE) + .aircraftType(AIRCRAFT_TYPE) + .seatAvailability(ZERO) + .status(FlightStatusEnum.UNKNOWN) + .build(); // when - ResultActions resultActions = mockMvc.perform(post("/api/v1/flights") + ResultActions resultActions = mockMvc.perform(post(API_V1_FLIGHTS) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(flightRequest))); // then resultActions.andDo(print()) .andExpect(status().isCreated()) - .andExpect(jsonPath("$.airline").value(flightRequest.getAirline())) - .andExpect(jsonPath("$.flightNumber").value(flightRequest.getFlightNumber())) - .andExpect(jsonPath("$.departureTime").value(flightRequest.getDepartureTime())) - .andExpect(jsonPath("$.arrivalTime").value(flightRequest.getArrivalTime())) - .andExpect(jsonPath("$.price").value(flightRequest.getPrice())) - .andExpect(jsonPath("$.aircraftType").value(flightRequest.getAircraftType())) - .andExpect(jsonPath("$.seatAvailability").value(flightRequest.getSeatAvailability())) - .andExpect(jsonPath("$.currentAvailableSeat").value(flightRequest.getSeatAvailability())) - .andExpect(jsonPath("$.status").value(flightRequest.getStatus().name())); + .andExpect(jsonPath(AIRLINE_PATH).value(flightRequest.getAirline())) + .andExpect(jsonPath(FLIGHT_NUMBER_PATH).value(flightRequest.getFlightNumber())) + .andExpect(jsonPath(DEPARTURE_TIME_PATH).value(flightRequest.getDepartureTime())) + .andExpect(jsonPath(ARRIVAL_TIME_PATH).value(flightRequest.getArrivalTime())) + .andExpect(jsonPath(PRICE_PATH).value(flightRequest.getPrice())) + .andExpect(jsonPath(AIRCRAFT_TYPE_PATH).value(flightRequest.getAircraftType())) + .andExpect(jsonPath(SEAT_AVAILABILITY_PATH).value(flightRequest.getSeatAvailability())) + .andExpect(jsonPath(CURRENT_SEAT_AVAILABILITY_PATH).value(flightRequest.getSeatAvailability())) + .andExpect(jsonPath(STATUS_PATH).value(flightRequest.getStatus().name())); } @Test - @WithMockUser(roles = {"USER", "ADMIN"}) + @WithMockUser(roles = {USER, ADMIN}) public void givenListOfFlights_whenGetAllFlights_thenReturnListOfFlights() throws Exception { // given - Flight flight1 = new Flight(); - flight1.setAirline("Airline 1"); - flight1.setFlightNumber("Flight Number 1"); - flight1.setDepartureTime("2023-04-19T15:30:00"); - flight1.setArrivalTime("2024-04-19T15:30:00"); - flight1.setDuration(Duration.between(LocalDateTime.parse("2023-04-19T15:30:00"), - LocalDateTime.parse("2024-04-19T15:30:00"))); - flight1.setPrice(BigDecimal.valueOf(0.0)); - flight1.setAircraftType("Aircraft Type 1"); - flight1.setSeatAvailability(0); - flight1.setCurrentAvailableSeat(0); - flight1.setStatus(FlightStatusEnum.UNKNOWN); - - Flight flight2 = new Flight(); - flight2.setAirline("Airline 2"); - flight2.setFlightNumber("Flight Number 2"); - flight2.setDepartureTime("2022-04-19T15:50:00"); - flight2.setArrivalTime("2023-04-19T15:50:00"); - flight2.setDuration(Duration.between(LocalDateTime.parse("2022-04-19T15:50:00"), - LocalDateTime.parse("2023-04-19T15:50:00"))); - flight2.setPrice(BigDecimal.valueOf(1.0)); - flight2.setAircraftType("Aircraft Type 2"); - flight2.setSeatAvailability(1); - flight2.setCurrentAvailableSeat(1); - flight2.setStatus(FlightStatusEnum.IN_FLIGHT); + Flight flight1 = Flight.builder() + .airline(AIRLINE.concat(ONE)) + .flightNumber(FLIGHT_NUMBER.concat(ONE)) + .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.concat(ONE)) + .seatAvailability(ZERO) + .currentAvailableSeat(ZERO) + .status(FlightStatusEnum.UNKNOWN) + .build(); + + Flight flight2 = Flight.builder() + .airline(AIRLINE.concat(TWO)) + .flightNumber(FLIGHT_NUMBER.concat(TWO)) + .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.concat(TWO)) + .seatAvailability(ZERO) + .currentAvailableSeat(ZERO) + .status(FlightStatusEnum.UNKNOWN) + .build(); flightRepository.saveAll(List.of(flight1, flight2)); // when - ResultActions resultActions = mockMvc.perform(get("/api/v1/flights")); + ResultActions resultActions = mockMvc.perform(get(API_V1_FLIGHTS)); // then resultActions.andDo(print()) .andExpect(status().isOk()) - .andExpect(jsonPath("$.size()").value(flightRepository.findAll().size())); + .andExpect(jsonPath(SIZE_PATH).value(flightRepository.findAll().size())); } @Test - @WithMockUser(roles = {"USER", "ADMIN"}) + @WithMockUser(roles = {USER, ADMIN}) public void givenFlightId_whenGetFlight_thenReturnFlightResponse() throws Exception { // given Flight savedFlight = flightRepository.save(flight); // when - ResultActions resultActions = mockMvc.perform(get("/api/v1/flights/{id}", savedFlight.getId())); + ResultActions resultActions = mockMvc.perform(get(API_V1_FLIGHTS.concat(ID), savedFlight.getId())); // then resultActions.andDo(print()) .andExpect(status().isOk()) - .andExpect(jsonPath("$.airline").value(flight.getAirline())) - .andExpect(jsonPath("$.flightNumber").value(flight.getFlightNumber())) - .andExpect(jsonPath("$.departureTime").value(flight.getDepartureTime())) - .andExpect(jsonPath("$.arrivalTime").value(flight.getArrivalTime())) - .andExpect(jsonPath("$.price").value(flight.getPrice())) - .andExpect(jsonPath("$.aircraftType").value(flight.getAircraftType())) - .andExpect(jsonPath("$.seatAvailability").value(flight.getSeatAvailability())) - .andExpect(jsonPath("$.currentAvailableSeat").value(flight.getSeatAvailability())) - .andExpect(jsonPath("$.status").value(flight.getStatus().name())); + .andExpect(jsonPath(AIRLINE_PATH).value(flight.getAirline())) + .andExpect(jsonPath(FLIGHT_NUMBER_PATH).value(flight.getFlightNumber())) + .andExpect(jsonPath(DEPARTURE_TIME_PATH).value(flight.getDepartureTime())) + .andExpect(jsonPath(ARRIVAL_TIME_PATH).value(flight.getArrivalTime())) + .andExpect(jsonPath(PRICE_PATH).value(flight.getPrice())) + .andExpect(jsonPath(AIRCRAFT_TYPE_PATH).value(flight.getAircraftType())) + .andExpect(jsonPath(SEAT_AVAILABILITY_PATH).value(flight.getSeatAvailability())) + .andExpect(jsonPath(CURRENT_SEAT_AVAILABILITY_PATH).value(flight.getSeatAvailability())) + .andExpect(jsonPath(STATUS_PATH).value(flight.getStatus().name())); } @Test @@ -163,33 +168,34 @@ public void givenFlightIdAndFlightRequest_whenUpdateFlight_thenReturnFlightRespo // given Flight savedFlight = flightRepository.save(flight); - FlightRequest flightRequest = new FlightRequest(); - flightRequest.setAirline("Updated Airline"); - flightRequest.setFlightNumber("Updated Flight Number"); - flightRequest.setDepartureTime("2022-04-19T15:30:00"); - flightRequest.setArrivalTime("2023-04-19T15:30:00"); - flightRequest.setPrice(BigDecimal.valueOf(2.0)); - flightRequest.setAircraftType("Updated Aircraft Type"); - flightRequest.setSeatAvailability(1); - flightRequest.setStatus(FlightStatusEnum.IN_FLIGHT); + FlightRequest flightRequest = FlightRequest.builder() + .airline(UPDATED.concat(AIRLINE)) + .flightNumber(UPDATED.concat(FLIGHT_NUMBER)) + .departureTime(VALID_DEPARTURE_TIME) + .arrivalTime(VALID_ARRIVAL_TIME) + .price(VALID_PRICE) + .aircraftType(UPDATED.concat(AIRCRAFT_TYPE)) + .seatAvailability(Integer.parseInt(ONE)) + .status(FlightStatusEnum.IN_FLIGHT) + .build(); // when - ResultActions resultActions = mockMvc.perform(put("/api/v1/flights/{id}", savedFlight.getId()) + ResultActions resultActions = mockMvc.perform(put(API_V1_FLIGHTS.concat(ID), savedFlight.getId()) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsBytes(flightRequest))); // then resultActions.andDo(print()) .andExpect(status().isOk()) - .andExpect(jsonPath("$.airline").value(flightRequest.getAirline())) - .andExpect(jsonPath("$.flightNumber").value(flightRequest.getFlightNumber())) - .andExpect(jsonPath("$.departureTime").value(flightRequest.getDepartureTime())) - .andExpect(jsonPath("$.arrivalTime").value(flightRequest.getArrivalTime())) - .andExpect(jsonPath("$.price").value(flightRequest.getPrice())) - .andExpect(jsonPath("$.aircraftType").value(flightRequest.getAircraftType())) - .andExpect(jsonPath("$.seatAvailability").value(flightRequest.getSeatAvailability())) - .andExpect(jsonPath("$.currentAvailableSeat").value(flight.getCurrentAvailableSeat())) - .andExpect(jsonPath("$.status").value(flightRequest.getStatus().name())); + .andExpect(jsonPath(AIRLINE_PATH).value(flightRequest.getAirline())) + .andExpect(jsonPath(FLIGHT_NUMBER_PATH).value(flightRequest.getFlightNumber())) + .andExpect(jsonPath(DEPARTURE_TIME_PATH).value(flightRequest.getDepartureTime())) + .andExpect(jsonPath(ARRIVAL_TIME_PATH).value(flightRequest.getArrivalTime())) + .andExpect(jsonPath(PRICE_PATH).value(flightRequest.getPrice())) + .andExpect(jsonPath(AIRCRAFT_TYPE_PATH).value(flightRequest.getAircraftType())) + .andExpect(jsonPath(SEAT_AVAILABILITY_PATH).value(flightRequest.getSeatAvailability())) + .andExpect(jsonPath(CURRENT_SEAT_AVAILABILITY_PATH).value(flight.getCurrentAvailableSeat())) + .andExpect(jsonPath(STATUS_PATH).value(flightRequest.getStatus().name())); } @Test @@ -198,7 +204,7 @@ public void givenFlightId_whenDeleteFlight_thenReturnNothing() throws Exception Flight savedFlight = flightRepository.save(flight); // when - ResultActions resultActions = mockMvc.perform(delete("/api/v1/flights/{id}", savedFlight.getId())); + ResultActions resultActions = mockMvc.perform(delete(API_V1_FLIGHTS.concat(ID), savedFlight.getId())); // then resultActions.andDo(print()) diff --git a/src/test/java/com/projects/aeroplannerrestapi/util/TestConstants.java b/src/test/java/com/projects/aeroplannerrestapi/util/TestConstants.java index f181b62..3da6452 100644 --- a/src/test/java/com/projects/aeroplannerrestapi/util/TestConstants.java +++ b/src/test/java/com/projects/aeroplannerrestapi/util/TestConstants.java @@ -1,5 +1,7 @@ package com.projects.aeroplannerrestapi.util; +import java.math.BigDecimal; + import static com.projects.aeroplannerrestapi.constants.ErrorMessage.*; public class TestConstants { @@ -7,6 +9,10 @@ public class TestConstants { private TestConstants(){ } + public static final int ZERO = 0; + public static final String ONE = "1"; + public static final String TWO = "2"; + public static final String USER_EMAIL = USER.concat(EMAIL); public static final String AIRLINE = "airline"; public static final String FLIGHT_NUMBER = FLIGHT.concat("number"); @@ -26,4 +32,30 @@ private TestConstants(){ public static final String TRANSACTION_ID = "transaction id"; public static final String DESCRIPTION = "description"; + public static final String INTEGRATION = "integration"; + public static final String UPDATED = "updated"; + + public static final String VALID_EMAIL_ADDRESS = "sample@email.com"; + public static final String VALID_PASSWORD = "Password@123!"; + public static final String VALID_DEPARTURE_TIME = "2023-04-19T15:30:00"; + public static final String VALID_ARRIVAL_TIME = "2024-04-19T15:30:00"; + public static final BigDecimal VALID_PRICE = BigDecimal.valueOf(0.0); + + + public static final String DEFAULT_USER_ROLE = "Default user role"; + + public static final String EMAIL_PATH = "$.email"; + public static final String FULL_NAME_PATH = "$.fullName"; + public static final String TOKEN_PATH = "$.token"; + public static final String AIRLINE_PATH = "$.token"; + public static final String FLIGHT_NUMBER_PATH = "$.flightNumber"; + public static final String DEPARTURE_TIME_PATH = "$.departureTime"; + public static final String ARRIVAL_TIME_PATH = "$.arrivalTime"; + public static final String PRICE_PATH = "$.price"; + public static final String AIRCRAFT_TYPE_PATH = "$.aircraftType"; + public static final String SEAT_AVAILABILITY_PATH = "$.seatAvailability"; + public static final String CURRENT_SEAT_AVAILABILITY_PATH = "$.currentAvailableSeat"; + public static final String STATUS_PATH = "$.status"; + public static final String EXPIRED_IN_PATH = "$.expiredIn"; + public static final String SIZE_PATH = "$.size()"; }