From ea29adab4c9a2a8f16413e82b3f2e9df88ef43c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrej=20=C5=A0imurka?= <492781@mail.muni.cz> Date: Sun, 16 Apr 2023 22:24:05 +0200 Subject: [PATCH] Added CarService tests --- .../muni/pa165/car/restemplate/DbGetter.java | 10 +- .../service/CarComponentPairServiceImpl.java | 11 +- .../car/service/CarDriverPairServiceImpl.java | 16 ++- .../pa165/car/service/CarServiceImpl.java | 15 ++- .../pa165/car/service/CarServiceTests.java | 120 +++++++++++++++++- 5 files changed, 147 insertions(+), 25 deletions(-) diff --git a/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java b/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java index 3ee16541..54a6b16b 100644 --- a/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java +++ b/car/src/main/java/cz/muni/pa165/car/restemplate/DbGetter.java @@ -12,10 +12,10 @@ import org.springframework.web.client.RestTemplate; @Component public class DbGetter { - private static RestTemplate client = new RestTemplate(); + private RestTemplate client = new RestTemplate(); - private static final String GET_DRIVER_URL = "http://localhost:8083/driver/get/id="; - private static final String GET_COMPONENT_URL = "http://localhost:8084/component/id?componentId="; + private final String GET_DRIVER_URL = "http://localhost:8083/driver/get/id="; + private final String GET_COMPONENT_URL = "http://localhost:8084/component/id?componentId="; /** * Get a driver using RestTemplate client. @@ -23,7 +23,7 @@ public class DbGetter { * @param id driver id * @return Driver object */ - public static DriverInsightDto getDriverFromDb(Long id) { + public DriverInsightDto getDriverFromDb(Long id) { String url = GET_DRIVER_URL + id; ResponseEntity<DriverInsightDto> response = client.getForEntity(url, DriverInsightDto.class); return response.getBody(); @@ -35,7 +35,7 @@ public class DbGetter { * @param id component id * @return Component object */ - public static CarComponentDto getComponentFromDb(Long id) { + public CarComponentDto getComponentFromDb(Long id) { String url = GET_COMPONENT_URL + id; ResponseEntity<CarComponentDto> response = client.getForEntity(url, CarComponentDto.class); return response.getBody(); diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java index 8387e271..f9559211 100644 --- a/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java +++ b/car/src/main/java/cz/muni/pa165/car/service/CarComponentPairServiceImpl.java @@ -1,6 +1,6 @@ package cz.muni.pa165.car.service; -import static cz.muni.pa165.car.restemplate.DbGetter.getComponentFromDb; +import cz.muni.pa165.car.restemplate.DbGetter; import cz.muni.pa165.car.data.model.Car; import cz.muni.pa165.car.data.repository.CarRepository; @@ -12,6 +12,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Objects; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -22,6 +24,9 @@ public class CarComponentPairServiceImpl implements CarComponentPairService { CarRepository carRepository; + @Autowired + DbGetter dbGetter; + /** * Constructor for Car - Car Component Service. * @@ -40,7 +45,7 @@ public class CarComponentPairServiceImpl implements CarComponentPairService { throw new DatabaseException("Component with id " + componentId + " already in use"); } var components = car.getComponents(); - CarComponentDto carComponent = getComponentFromDb(componentId); + CarComponentDto carComponent = dbGetter.getComponentFromDb(componentId); components.add(carComponent.getId()); car.setComponents(components); carRepository.save(car); @@ -68,7 +73,7 @@ public class CarComponentPairServiceImpl implements CarComponentPairService { () -> new DatabaseException("Car not found")); var componentDtos = new ArrayList<CarComponentDto>(); for (Long id : car.getComponents()) { - CarComponentDto carComponent = getComponentFromDb(id); + CarComponentDto carComponent = dbGetter.getComponentFromDb(id); componentDtos.add( new CarComponentDto( carComponent.getId(), diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java b/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java index 543d9dc4..dcfc6401 100644 --- a/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java +++ b/car/src/main/java/cz/muni/pa165/car/service/CarDriverPairServiceImpl.java @@ -1,18 +1,19 @@ package cz.muni.pa165.car.service; -import static cz.muni.pa165.car.restemplate.DbGetter.getDriverFromDb; - import cz.muni.pa165.car.data.repository.CarRepository; import cz.muni.pa165.car.mapper.CarMapper; +import cz.muni.pa165.car.restemplate.DbGetter; import cz.muni.pa165.common_library.dtos.CarResponseDto; import cz.muni.pa165.common_library.dtos.DriverDto; import cz.muni.pa165.common_library.dtos.DriverInsightDto; import cz.muni.pa165.common_library.exception.DatabaseException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Objects; -import org.springframework.stereotype.Service; /** * Service for Driver Manager. @@ -22,6 +23,9 @@ public class CarDriverPairServiceImpl implements CarDriverPairService { CarRepository carRepository; + @Autowired + DbGetter dbGetter; + /** * Constructor for Car - Driver Service. * @@ -37,7 +41,7 @@ public class CarDriverPairServiceImpl implements CarDriverPairService { () -> new DatabaseException("Car not found")); var drivers = car.getDrivers(); - var savedDriver = getDriverFromDb(driverId); + var savedDriver = dbGetter.getDriverFromDb(driverId); drivers.add(savedDriver.id()); car.setDrivers(drivers); @@ -66,7 +70,7 @@ public class CarDriverPairServiceImpl implements CarDriverPairService { () -> new DatabaseException("Car not found")); var driverDtos = new ArrayList<DriverDto>(); for (Long id : car.getDrivers()) { - DriverInsightDto driver = getDriverFromDb(id); + DriverInsightDto driver = dbGetter.getDriverFromDb(id); driverDtos.add( new DriverDto(driver.id(), driver.name(), @@ -81,7 +85,7 @@ public class CarDriverPairServiceImpl implements CarDriverPairService { var car = carRepository.findById(carId).orElseThrow( () -> new DatabaseException("Car not found")); - var savedDriver = getDriverFromDb(driverId); + var savedDriver = dbGetter.getDriverFromDb(driverId); car.setMainDriverId(savedDriver.id()); var drivers = car.getDrivers(); diff --git a/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java b/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java index 38f8d647..1f2d832d 100644 --- a/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java +++ b/car/src/main/java/cz/muni/pa165/car/service/CarServiceImpl.java @@ -1,19 +1,19 @@ package cz.muni.pa165.car.service; -import static cz.muni.pa165.car.mapper.CarMapper.carConverterToDto; -import static cz.muni.pa165.car.mapper.CarMapper.carDtoConverter; - import cz.muni.pa165.car.data.model.Car; import cz.muni.pa165.car.data.repository.CarRepository; import cz.muni.pa165.car.mapper.CarMapper; +import static cz.muni.pa165.car.mapper.CarMapper.carConverterToDto; +import static cz.muni.pa165.car.mapper.CarMapper.carDtoConverter; import cz.muni.pa165.car.restemplate.DbGetter; import cz.muni.pa165.common_library.dtos.CarRequestDto; import cz.muni.pa165.common_library.dtos.CarResponseDto; import cz.muni.pa165.common_library.exception.DatabaseException; -import java.util.List; -import java.util.Objects; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * Service for car management. @@ -23,6 +23,9 @@ public class CarServiceImpl implements CarService { CarRepository carRepository; + @Autowired + DbGetter dbGetter; + /** * Constructor for Car Service. * @@ -40,7 +43,7 @@ public class CarServiceImpl implements CarService { if (isComponentInUse(componentId)) { throw new DatabaseException("Component with id " + componentId + " already in use"); } - DbGetter.getComponentFromDb(componentId); + dbGetter.getComponentFromDb(componentId); } return carConverterToDto(carRepository.save(carDtoConverter(carRequestDto))); } diff --git a/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java b/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java index 4c0a2ffe..3b0e807c 100644 --- a/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java +++ b/car/src/test/java/cz/muni/pa165/car/service/CarServiceTests.java @@ -1,14 +1,34 @@ package cz.muni.pa165.car.service; import com.fasterxml.jackson.databind.ObjectMapper; +import cz.muni.pa165.car.data.model.Car; import cz.muni.pa165.car.data.repository.CarRepository; +import cz.muni.pa165.car.restemplate.DbGetter; +import cz.muni.pa165.common_library.dtos.CarComponentDto; +import cz.muni.pa165.common_library.dtos.CarRequestDto; +import cz.muni.pa165.common_library.dtos.CarResponseDto; +import cz.muni.pa165.common_library.dtos.DriverInsightDto; +import cz.muni.pa165.common_library.dtos.DriverResponseDto; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.BDDMockito.given; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; @SpringBootTest @AutoConfigureMockMvc @@ -23,23 +43,113 @@ public class CarServiceTests { @MockBean private CarRepository carRepository; + @MockBean + private DbGetter dbGetter; + + private static Car car1; + private static Car car; + + private static CarResponseDto carResponseDto1; + private static CarRequestDto carRequestDto; + @BeforeEach - void setUp() { + void initialize() { + car = Car.builder() + .id(null) + .components(Set.of(1L, 2L)) + .drivers(Set.of(1L, 2L)) + .mainDriverId(1L) + .build(); + + car1 = Car.builder() + .id(1L) + .components(Set.of(1L, 2L)) + .drivers(Set.of(1L, 2L)) + .mainDriverId(1L) + .build(); + + carResponseDto1 = CarResponseDto.builder() + .id(1L) + .componentIdsNames(List.of(1L, 2L)) + .driverIdsNames(List.of(1L, 2L)) + .mainDriverId(1L) + .build(); + + carRequestDto = CarRequestDto.builder() + .componentIds(List.of(1L, 2L)) + .driverIds(List.of(1L, 2L)) + .mainDriverId(1L) + .build(); + } @Test - void postCar() { + void carAddTest() throws Exception { + + given(carRepository.save(car)).willReturn(car1); + given(carRepository.findById(1L)).willReturn( + Optional.of(car1)); + DriverInsightDto driverInsightDto = new DriverInsightDto(1L, "name", "surname", "nationality", Map.of()); + CarComponentDto carComponentDto = CarComponentDto.builder().build(); + + given(dbGetter.getDriverFromDb(anyLong())).willReturn(driverInsightDto); + given(dbGetter.getComponentFromDb(anyLong())).willReturn(carComponentDto); + + String response = mockMvc.perform(post("/car/") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(carRequestDto))) + .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); + var carResponse = objectMapper.readValue(response, CarResponseDto.class); + Assertions.assertAll( + () -> Assertions.assertEquals(carResponse.getId(), car1.getId()), + () -> Assertions.assertEquals(carResponse.getComponentIdsNames(), car1.getComponents().stream().toList()), + () -> Assertions.assertEquals(carResponse.getDriverIdsNames(), car1.getDrivers().stream().toList()), + () -> Assertions.assertEquals(carResponse.getMainDriverId(), car1.getMainDriverId()) + ); } @Test - void getCarById() { + void carGetAllTest() throws Exception { + + given(carRepository.findAll()).willReturn(List.of(car1)); + + String response = mockMvc.perform(get("/car/all")) + .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); + var carResponse = List.of(objectMapper.readValue(response, CarResponseDto[].class)); + Assertions.assertAll( + () -> Assertions.assertEquals(carResponse.get(0).getId(), car1.getId()), + () -> Assertions.assertEquals(carResponse.get(0).getComponentIdsNames(), car1.getComponents().stream().toList()), + () -> Assertions.assertEquals(carResponse.get(0).getDriverIdsNames(), car1.getDrivers().stream().toList()), + () -> Assertions.assertEquals(carResponse.get(0).getMainDriverId(), car1.getMainDriverId()) + ); } @Test - void getAllCars() { + void carGetByIdTest() throws Exception { + + given(carRepository.findById(1L)).willReturn(Optional.of(car1)); + + String response = mockMvc.perform(get("/car/") + .param("carId", String.valueOf(1L)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); + var carResponse = objectMapper.readValue(response, CarResponseDto.class); + Assertions.assertAll( + () -> Assertions.assertEquals(carResponse.getId(), car1.getId()), + () -> Assertions.assertEquals(carResponse.getComponentIdsNames(), car1.getComponents().stream().toList()), + () -> Assertions.assertEquals(carResponse.getDriverIdsNames(), car1.getDrivers().stream().toList()), + () -> Assertions.assertEquals(carResponse.getMainDriverId(), car1.getMainDriverId()) + ); } @Test - void deleteById() { + void carDeleteByIdTest() throws Exception { + given(carRepository.findById(1L)).willReturn(Optional.of(car1)); + + String response = mockMvc.perform(delete("/car/") + .param("carId", String.valueOf(1L)) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); + Assertions.assertEquals(response, "Car with id = " + 1L + " deleted!"); } } -- GitLab