From 99c65d6ed19f346f0573be296b2269043038773d Mon Sep 17 00:00:00 2001 From: Leandro Cesar Date: Wed, 26 Dec 2018 10:26:49 -0200 Subject: [PATCH 1/2] =?UTF-8?q?Implementa=C3=A7ao=20exercicio.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 22 ++ .../car/controllers/CarsApiController.java | 69 ++++++ .../configurations/LoadDatabase.java | 12 +- .../com/grupomult/constants/ApiConstants.java | 7 + .../grupomult/constants/MessageConstants.java | 14 ++ .../grupomult/converter/car/CarConverter.java | 42 ++++ .../converter/car/CarTypeConverter.java | 30 +++ .../br/com/grupomult/entities/car/Car.java | 38 ++++ .../br/com/grupomult/entities/car/CarId.java | 30 +++ .../com/grupomult/entities/car/CarType.java | 33 +++ .../grupomult/flows/car/AddCarConverter.java | 21 ++ .../grupomult/flows/car/AddCarPersist.java | 25 +++ .../grupomult/flows/car/AddCarResponse.java | 16 ++ .../grupomult/flows/car/AddCarValidate.java | 41 ++++ .../flows/car/ListCarsByIdConverter.java | 25 +++ .../grupomult/flows/car/ListCarsByIdLoad.java | 28 +++ .../flows/car/ListCarsByIdLoadValidate.java | 28 +++ .../flows/car/ListCarsByIdResponse.java | 16 ++ .../flows/car/ListCarsByIdValidate.java | 32 +++ .../flows/car/ListCarsConverter.java | 32 +++ .../com/grupomult/flows/car/ListCarsLoad.java | 26 +++ .../grupomult/flows/car/ListCarsResponse.java | 22 ++ .../grupomult/flows/car/ListCarsValidate.java | 21 ++ .../grupomult/flows/car/RemoveCarLoad.java | 26 +++ .../flows/car/RemoveCarValidate.java | 32 +++ .../flows/car/UpdateCarConverter.java | 21 ++ .../grupomult/flows/car/UpdateCarPersist.java | 32 +++ .../flows/car/UpdateCarResponse.java | 16 ++ .../flows/car/UpdateCarValidate.java | 39 ++++ .../grupomult/repositories/CarRepository.java | 14 ++ .../repositories/CarTypeRepository.java | 14 ++ src/main/resources/flow-definition.xml | 29 +++ src/main/resources/swagger/api-car.yaml | 202 ++++++++++++++++++ .../configuration/TestConfiguration.java | 9 + .../flowdefinitions/FlowDefinitionTest.java | 79 +++++++ .../flows/car/RemoveCarLoadTest.java | 36 ++++ .../flows/car/RemoveCarValidateTest.java | 40 ++++ 37 files changed, 1218 insertions(+), 1 deletion(-) create mode 100644 src/main/java/br/com/grupomult/api/car/controllers/CarsApiController.java create mode 100644 src/main/java/br/com/grupomult/converter/car/CarConverter.java create mode 100644 src/main/java/br/com/grupomult/converter/car/CarTypeConverter.java create mode 100644 src/main/java/br/com/grupomult/entities/car/Car.java create mode 100644 src/main/java/br/com/grupomult/entities/car/CarId.java create mode 100644 src/main/java/br/com/grupomult/entities/car/CarType.java create mode 100644 src/main/java/br/com/grupomult/flows/car/AddCarConverter.java create mode 100644 src/main/java/br/com/grupomult/flows/car/AddCarPersist.java create mode 100644 src/main/java/br/com/grupomult/flows/car/AddCarResponse.java create mode 100644 src/main/java/br/com/grupomult/flows/car/AddCarValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsByIdConverter.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoad.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoadValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsByIdResponse.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsByIdValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsConverter.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsLoad.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsResponse.java create mode 100644 src/main/java/br/com/grupomult/flows/car/ListCarsValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/car/RemoveCarLoad.java create mode 100644 src/main/java/br/com/grupomult/flows/car/RemoveCarValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/car/UpdateCarConverter.java create mode 100644 src/main/java/br/com/grupomult/flows/car/UpdateCarPersist.java create mode 100644 src/main/java/br/com/grupomult/flows/car/UpdateCarResponse.java create mode 100644 src/main/java/br/com/grupomult/flows/car/UpdateCarValidate.java create mode 100644 src/main/java/br/com/grupomult/repositories/CarRepository.java create mode 100644 src/main/java/br/com/grupomult/repositories/CarTypeRepository.java create mode 100644 src/main/resources/swagger/api-car.yaml create mode 100644 src/test/java/br/com/grupomult/flows/car/RemoveCarLoadTest.java create mode 100644 src/test/java/br/com/grupomult/flows/car/RemoveCarValidateTest.java diff --git a/pom.xml b/pom.xml index 3169308..8ddc380 100644 --- a/pom.xml +++ b/pom.xml @@ -145,6 +145,28 @@ false + + api-generate-sources-car + generate-sources + + generate + + + ${project.basedir}/src/main/resources/swagger/api-car.yaml + spring + false + false + + java8 + true + true + + ${project.build.directory}/generated/swagger + br.com.grupomult.api.car.models + br.com.grupomult.api.car.controllers + false + + diff --git a/src/main/java/br/com/grupomult/api/car/controllers/CarsApiController.java b/src/main/java/br/com/grupomult/api/car/controllers/CarsApiController.java new file mode 100644 index 0000000..5024d28 --- /dev/null +++ b/src/main/java/br/com/grupomult/api/car/controllers/CarsApiController.java @@ -0,0 +1,69 @@ +package br.com.grupomult.api.car.controllers; + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.api.car.models.ResponseGetCars; +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.flows.car.*; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +import static br.com.grupomult.constants.ApiConstants.*; +import static br.com.grupomult.constants.MessageConstants.ADD_CARS_VALUE; +import static br.com.grupomult.constants.MessageConstants.UPDATE_CARS_VALUE; + +/** + * Created by leandro on 24/12/18. + */ +@RestController +public class CarsApiController implements CarsApi { + + @Autowired + private ListCarsValidate listCarsFlow; + + @Autowired + private ListCarsByIdValidate listCarsByIdFlow; + + @Autowired + private AddCarValidate addCarFlow; + + @Autowired + private UpdateCarValidate updateCarFlow; + + @Autowired + private RemoveCarValidate removeCarFlow; + + @Override + public ResponseEntity getCars() { + return listCarsFlow.execute(); + } + + @Override + public ResponseEntity getCarById( + @PathVariable(value = GET_LIST_CARS_BY_ID_PATH_ID, required = true) Long id, + @PathVariable(value = GET_LIST_CARS_BY_ID_PATH_TYPE, required = true) Long type) { + return listCarsByIdFlow.execute(id, type); + } + + @Override + public ResponseEntity addCar(@ApiParam(value = ADD_CARS_VALUE) @Valid @RequestBody Car car) { + return addCarFlow.execute(car); + } + + @Override + public ResponseEntity updateCar(@ApiParam(value = UPDATE_CARS_VALUE) @Valid @RequestBody Car car) { + return updateCarFlow.execute(car); + } + + @Override + public ResponseEntity removeCar( + @PathVariable(value = REMOVE_CARS_BY_ID_PATH_ID, required = true) Long id, + @PathVariable(value = REMOVE_CARS_BY_ID_PATH_TYPE, required = true) Long type) { + return removeCarFlow.execute(id, type); + } +} diff --git a/src/main/java/br/com/grupomult/configurations/LoadDatabase.java b/src/main/java/br/com/grupomult/configurations/LoadDatabase.java index dff3e21..9bfdd39 100644 --- a/src/main/java/br/com/grupomult/configurations/LoadDatabase.java +++ b/src/main/java/br/com/grupomult/configurations/LoadDatabase.java @@ -5,6 +5,8 @@ import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE; import static br.com.grupomult.utils.DateUtils.stringToDate; +import br.com.grupomult.entities.car.CarType; +import br.com.grupomult.repositories.CarTypeRepository; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -20,16 +22,24 @@ public class LoadDatabase { @Bean - public CommandLineRunner initDatabase(AnimalRepository repository) { + public CommandLineRunner initDatabase(AnimalRepository repository, CarTypeRepository carTypeRepository) { return args -> { log.info("Preloading " + repository.save(createAnimal("Janis", "2015-02-09", CANINE)).toString()); log.info("Preloading " + repository.save(createAnimal("Rocky", "2014-10-15", FELINE)).toString()); + + log.info("Preloading " + carTypeRepository.save(createCarType("CT001", "Sedan")).toString()); + log.info("Preloading " + carTypeRepository.save(createCarType("CT002", "Hatch")).toString()); }; } + private static Animal createAnimal(String name, String dob, SpeciesEnum species) { return Animal.builder().name(name).dob(stringToDate(dob, ISO8601_COMPLETE_DATE)) .species(Species.builder().code(species).build()).build(); } + private static CarType createCarType(String code, String description) { + return CarType.builder().code(code).description(description).build(); + } + } \ No newline at end of file diff --git a/src/main/java/br/com/grupomult/constants/ApiConstants.java b/src/main/java/br/com/grupomult/constants/ApiConstants.java index 4d86b88..cfd2aab 100644 --- a/src/main/java/br/com/grupomult/constants/ApiConstants.java +++ b/src/main/java/br/com/grupomult/constants/ApiConstants.java @@ -4,6 +4,13 @@ public final class ApiConstants { public static final String GET_LIST_ANIMALS_BY_ID_PATH_ID = "id"; + public static final String GET_LIST_CARS_BY_ID_PATH_ID = "id"; + public static final String REMOVE_CARS_BY_ID_PATH_ID = "id"; + + public static final String GET_LIST_CARS_BY_ID_PATH_TYPE = "type"; + public static final String REMOVE_CARS_BY_ID_PATH_TYPE = "type"; + + private ApiConstants() { } diff --git a/src/main/java/br/com/grupomult/constants/MessageConstants.java b/src/main/java/br/com/grupomult/constants/MessageConstants.java index 9e49393..38109ce 100644 --- a/src/main/java/br/com/grupomult/constants/MessageConstants.java +++ b/src/main/java/br/com/grupomult/constants/MessageConstants.java @@ -7,6 +7,20 @@ public final class MessageConstants { public static final String ERROR_GET_ANIMALS_BY_ID_INVALID_ID = "Identificador inválido"; public static final String ERROR_GET_ANIMALS_BY_ID_NOT_FOUND = "Animal não encontrado"; + public static final String ERROR_GET_CARS_BY_ID_NOT_FOUND = "Carro não encontrado"; + public static final String ERROR_GET_CARS_BY_ID_INVALID_ID = "Identificador inválido"; + public static final String ERROR_GET_CARS_BY_ID_INVALID_TYPE = "Tipo inválido"; + + public static final String ERROR_ADD_CAR_INVALID_ID = "Identificador inválido"; + public static final String ERROR_ADD_CAR_INVALID_TYPE = "Tipo inválido"; + public static final String ERROR_ADD_CAR_INVALID_CODE = "Codigo inválido"; + public static final String ERROR_ADD_CAR_INVALID_DESCRIPTION = "Descriçao inválido"; + public static final String ERROR_ADD_CAR_INVALID_VALUE = "Valor inválido"; + + + public static final String ADD_CARS_VALUE = "Carro a ser adicionado ao sistema"; + public static final String UPDATE_CARS_VALUE = "Carro a ser atualizado no sistema"; + private MessageConstants() { } diff --git a/src/main/java/br/com/grupomult/converter/car/CarConverter.java b/src/main/java/br/com/grupomult/converter/car/CarConverter.java new file mode 100644 index 0000000..1d184f1 --- /dev/null +++ b/src/main/java/br/com/grupomult/converter/car/CarConverter.java @@ -0,0 +1,42 @@ +package br.com.grupomult.converter.car; + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.entities.car.CarId; +import br.com.grupomult.utils.DateUtils; + +/** + * Created by leandro on 24/12/18. + */ +public class CarConverter { + + public static Car convert(br.com.grupomult.entities.car.Car entity){ + Car domain = new Car(); + + domain.setId(entity.getCarId().getId()); + domain.setType(CarTypeConverter.convert(entity.getCarId().getType())); + domain.setCode(entity.getCode()); + domain.setDescription(entity.getDescription()); + domain.setValue(entity.getValue()); + domain.setValueTax(entity.getValue() > 0 ? entity.getValue()*0.03 : 0d); + domain.setCreationDate(entity.getCreationDate() != null ? DateUtils.dateToString(entity.getCreationDate(), DateUtils.ISO8601_COMPLETE_DATE) : null); + domain.setUpdateDate(entity.getUpdateDate() != null ? DateUtils.dateToString(entity.getUpdateDate(), DateUtils.ISO8601_COMPLETE_DATE) : null); + + return domain; + + } + + public static br.com.grupomult.entities.car.Car convert(Car domain){ + br.com.grupomult.entities.car.Car entity = new br.com.grupomult.entities.car.Car(); + + entity.setCarId(new CarId(domain.getId(), CarTypeConverter.convert(domain.getType()))); + entity.setCode(domain.getCode()); + entity.setDescription(domain.getDescription()); + entity.setValue(domain.getValue()); + entity.setCreationDate(domain.getCreationDate() != null ? DateUtils.stringToDate(domain.getCreationDate(), DateUtils.ISO8601_COMPLETE_DATE) : null); + entity.setUpdateDate(domain.getUpdateDate() != null ? DateUtils.stringToDate(domain.getUpdateDate(), DateUtils.ISO8601_COMPLETE_DATE) : null); + + return entity; + + } + +} diff --git a/src/main/java/br/com/grupomult/converter/car/CarTypeConverter.java b/src/main/java/br/com/grupomult/converter/car/CarTypeConverter.java new file mode 100644 index 0000000..9b37b0f --- /dev/null +++ b/src/main/java/br/com/grupomult/converter/car/CarTypeConverter.java @@ -0,0 +1,30 @@ +package br.com.grupomult.converter.car; + +import br.com.grupomult.api.car.models.CarType; + +/** + * Created by leandro on 24/12/18. + */ +public class CarTypeConverter { + + public static CarType convert(br.com.grupomult.entities.car.CarType entity){ + CarType domain = new CarType(); + + domain.setId(entity.getId()); + domain.setCode(entity.getCode()); + domain.setDescription(entity.getDescription()); + + return domain; + } + + public static br.com.grupomult.entities.car.CarType convert(CarType domain){ + br.com.grupomult.entities.car.CarType entity = new br.com.grupomult.entities.car.CarType(); + + entity.setId(domain.getId()); + entity.setCode(domain.getCode()); + entity.setDescription(domain.getDescription()); + + return entity; + } + +} diff --git a/src/main/java/br/com/grupomult/entities/car/Car.java b/src/main/java/br/com/grupomult/entities/car/Car.java new file mode 100644 index 0000000..860aea4 --- /dev/null +++ b/src/main/java/br/com/grupomult/entities/car/Car.java @@ -0,0 +1,38 @@ +package br.com.grupomult.entities.car; + +import br.com.grupomult.entities.Species; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; + +import javax.persistence.*; +import java.time.OffsetDateTime; +import java.util.Date; + +/** + * Created by leandro on 24/12/18. + */ +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class Car { + + @EmbeddedId + private CarId carId; + + private String code; + + private String description; + + private Double value; + + @Temporal(TemporalType.TIMESTAMP) + private Date creationDate; + + @Temporal(TemporalType.TIMESTAMP) + private Date updateDate; + +} diff --git a/src/main/java/br/com/grupomult/entities/car/CarId.java b/src/main/java/br/com/grupomult/entities/car/CarId.java new file mode 100644 index 0000000..c7f5ab3 --- /dev/null +++ b/src/main/java/br/com/grupomult/entities/car/CarId.java @@ -0,0 +1,30 @@ +package br.com.grupomult.entities.car; + +import lombok.*; + +import javax.persistence.Embeddable; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.ManyToOne; +import java.io.Serializable; + +/** + * Created by leandro on 24/12/18. + */ + +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Embeddable +public class CarId implements Serializable { + + @GeneratedValue(strategy= GenerationType.IDENTITY) + private Long id; + + @ManyToOne + private CarType type; + +} diff --git a/src/main/java/br/com/grupomult/entities/car/CarType.java b/src/main/java/br/com/grupomult/entities/car/CarType.java new file mode 100644 index 0000000..452dac2 --- /dev/null +++ b/src/main/java/br/com/grupomult/entities/car/CarType.java @@ -0,0 +1,33 @@ +package br.com.grupomult.entities.car; + +import lombok.*; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * Created by leandro on 24/12/18. + */ + +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class CarType { + + @Id + @GeneratedValue + private Long id; + + private String code; + + private String description; + + public CarType(Long id){ + this.id = id; + } +} diff --git a/src/main/java/br/com/grupomult/flows/car/AddCarConverter.java b/src/main/java/br/com/grupomult/flows/car/AddCarConverter.java new file mode 100644 index 0000000..f60b223 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/AddCarConverter.java @@ -0,0 +1,21 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.converter.car.CarConverter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class AddCarConverter extends CarConverter { + + @Autowired + private AddCarPersist persist; + + public ResponseEntity execute(Car car) { + return persist.execute(convert(car)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/AddCarPersist.java b/src/main/java/br/com/grupomult/flows/car/AddCarPersist.java new file mode 100644 index 0000000..335e092 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/AddCarPersist.java @@ -0,0 +1,25 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.entities.car.Car; +import br.com.grupomult.repositories.CarRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class AddCarPersist { + + + @Autowired + private AddCarResponse response; + + @Autowired + private CarRepository repository; + + public ResponseEntity execute(Car car) { + return response.execute(repository.save(car)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/AddCarResponse.java b/src/main/java/br/com/grupomult/flows/car/AddCarResponse.java new file mode 100644 index 0000000..94af0fd --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/AddCarResponse.java @@ -0,0 +1,16 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.converter.car.CarConverter; +import br.com.grupomult.entities.car.Car; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class AddCarResponse { + + public ResponseEntity execute(Car car) { + return ResponseEntity.status(201).body(new ResponseGetCarsById().car(CarConverter.convert(car))); + } +} diff --git a/src/main/java/br/com/grupomult/flows/car/AddCarValidate.java b/src/main/java/br/com/grupomult/flows/car/AddCarValidate.java new file mode 100644 index 0000000..0afeacb --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/AddCarValidate.java @@ -0,0 +1,41 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.exceptions.HttpBadRequestException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import java.util.Optional; + +import static br.com.grupomult.constants.MessageConstants.*; + +/** + * Created by leandro on 25/12/18. + */ +public class AddCarValidate { + + @Autowired + private AddCarConverter converter; + + public ResponseEntity execute(Car car) { + if (!Optional.ofNullable(car.getId()).isPresent() || car.getId() < 0) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_ID); + } + if (!Optional.ofNullable(car.getType()).isPresent()) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_TYPE); + } + if (!Optional.ofNullable(car.getCode()).isPresent()) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_CODE); + } + if (!Optional.ofNullable(car.getDescription()).isPresent()) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_DESCRIPTION); + } + if (!Optional.ofNullable(car.getValue()).isPresent()) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_VALUE); + } + + return converter.execute(car); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsByIdConverter.java b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdConverter.java new file mode 100644 index 0000000..f829187 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdConverter.java @@ -0,0 +1,25 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.animal.models.ResponseGetAnimalsById; +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.converter.car.CarConverter; +import br.com.grupomult.entities.Animal; +import br.com.grupomult.entities.car.Car; +import br.com.grupomult.flows.animal.ListAnimalsByIdResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsByIdConverter extends CarConverter { + + + @Autowired + private ListCarsByIdResponse response; + + public ResponseEntity execute(Car car) { + return response.execute(convert(car)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoad.java b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoad.java new file mode 100644 index 0000000..77c46cc --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoad.java @@ -0,0 +1,28 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.entities.car.CarId; +import br.com.grupomult.entities.car.CarType; +import br.com.grupomult.repositories.CarRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsByIdLoad { + + @Autowired + private CarRepository repository; + + @Autowired + private ListCarsByIdLoadValidate validate; + + public ResponseEntity execute(Long id, Long type) { + + CarId carId = new CarId(id, new CarType(type)); + + return validate.execute(repository.findOne(carId)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoadValidate.java b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoadValidate.java new file mode 100644 index 0000000..521d259 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdLoadValidate.java @@ -0,0 +1,28 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.entities.car.Car; +import br.com.grupomult.exceptions.HttpNotFoundException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import java.util.Optional; + +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARS_BY_ID_NOT_FOUND; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsByIdLoadValidate { + + @Autowired + private ListCarsByIdConverter converter; + + public ResponseEntity execute(Car car) { + if (Optional.ofNullable(car).isPresent()) { + return converter.execute(car); + } else { + throw new HttpNotFoundException(ERROR_GET_CARS_BY_ID_NOT_FOUND); + } + } +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsByIdResponse.java b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdResponse.java new file mode 100644 index 0000000..d14bf7b --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdResponse.java @@ -0,0 +1,16 @@ +package br.com.grupomult.flows.car; + + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsByIdResponse { + + public ResponseEntity execute(Car car) { + return ResponseEntity.ok(new ResponseGetCarsById().car(car)); + } +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsByIdValidate.java b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdValidate.java new file mode 100644 index 0000000..682a0ab --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsByIdValidate.java @@ -0,0 +1,32 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.exceptions.HttpBadRequestException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import java.util.Optional; + +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARS_BY_ID_INVALID_ID; +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARS_BY_ID_INVALID_TYPE; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsByIdValidate { + + @Autowired + private ListCarsByIdLoad load; + + public ResponseEntity execute(Long id, Long type) { + if (!Optional.ofNullable(id).isPresent() || id < 0) { + throw new HttpBadRequestException(ERROR_GET_CARS_BY_ID_INVALID_ID); + } + if (!Optional.ofNullable(type).isPresent() || type < 0) { + throw new HttpBadRequestException(ERROR_GET_CARS_BY_ID_INVALID_TYPE); + } + + return load.execute(id, type); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsConverter.java b/src/main/java/br/com/grupomult/flows/car/ListCarsConverter.java new file mode 100644 index 0000000..5293742 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsConverter.java @@ -0,0 +1,32 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCars; +import br.com.grupomult.converter.car.CarConverter; +import br.com.grupomult.entities.car.Car; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static br.com.grupomult.utils.OptionalUtils.ofNullableAndEmpty; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsConverter extends CarConverter { + + @Autowired + private ListCarsResponse response; + + public ResponseEntity execute(List cars) { + + List carsApi = ofNullableAndEmpty(cars).orElse(Collections.emptyList()).stream() + .map(ListCarsConverter::convert).collect(Collectors.toList()); + + return response.execute(carsApi); + + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsLoad.java b/src/main/java/br/com/grupomult/flows/car/ListCarsLoad.java new file mode 100644 index 0000000..8429d7d --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsLoad.java @@ -0,0 +1,26 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCars; +import br.com.grupomult.entities.car.Car; +import br.com.grupomult.repositories.CarRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsLoad { + + @Autowired + private CarRepository repository; + + @Autowired + private ListCarsConverter converter; + + public ResponseEntity execute() { + return converter.execute((List) repository.findAll()); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsResponse.java b/src/main/java/br/com/grupomult/flows/car/ListCarsResponse.java new file mode 100644 index 0000000..de44db6 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsResponse.java @@ -0,0 +1,22 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.api.car.models.ResponseGetCars; +import org.springframework.http.ResponseEntity; + +import java.util.List; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsResponse { + + public ResponseEntity execute(List carsApi) { + if (carsApi.isEmpty()) { + return ResponseEntity.noContent().build(); + } else { + return ResponseEntity.ok(new ResponseGetCars().cars(carsApi)); + } + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/ListCarsValidate.java b/src/main/java/br/com/grupomult/flows/car/ListCarsValidate.java new file mode 100644 index 0000000..7ea56ab --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/ListCarsValidate.java @@ -0,0 +1,21 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.animal.models.ResponseGetAnimals; +import br.com.grupomult.api.car.models.ResponseGetCars; +import br.com.grupomult.flows.animal.ListAnimalsLoad; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class ListCarsValidate { + + @Autowired + private ListCarsLoad load; + + public ResponseEntity execute() { + return load.execute(); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/RemoveCarLoad.java b/src/main/java/br/com/grupomult/flows/car/RemoveCarLoad.java new file mode 100644 index 0000000..a8e7a9e --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/RemoveCarLoad.java @@ -0,0 +1,26 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.entities.car.CarId; +import br.com.grupomult.entities.car.CarType; +import br.com.grupomult.repositories.CarRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class RemoveCarLoad { + + @Autowired + private CarRepository repository; + + public ResponseEntity execute(Long id, Long type) { + + CarId carId = new CarId(id, new CarType(type)); + + repository.delete(carId); + + return ResponseEntity.ok().build(); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/RemoveCarValidate.java b/src/main/java/br/com/grupomult/flows/car/RemoveCarValidate.java new file mode 100644 index 0000000..0198e41 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/RemoveCarValidate.java @@ -0,0 +1,32 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.exceptions.HttpBadRequestException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import java.util.Optional; + +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARS_BY_ID_INVALID_ID; +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARS_BY_ID_INVALID_TYPE; + +/** + * Created by leandro on 25/12/18. + */ +public class RemoveCarValidate { + + @Autowired + private RemoveCarLoad load; + + public ResponseEntity execute(Long id, Long type) { + if (!Optional.ofNullable(id).isPresent() || id < 0) { + throw new HttpBadRequestException(ERROR_GET_CARS_BY_ID_INVALID_ID); + } + if (!Optional.ofNullable(type).isPresent() || type < 0) { + throw new HttpBadRequestException(ERROR_GET_CARS_BY_ID_INVALID_TYPE); + } + + return load.execute(id, type); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/UpdateCarConverter.java b/src/main/java/br/com/grupomult/flows/car/UpdateCarConverter.java new file mode 100644 index 0000000..19b7335 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/UpdateCarConverter.java @@ -0,0 +1,21 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.converter.car.CarConverter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class UpdateCarConverter extends CarConverter { + + @Autowired + private UpdateCarPersist persist; + + public ResponseEntity execute(Car car) { + return persist.execute(convert(car)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/UpdateCarPersist.java b/src/main/java/br/com/grupomult/flows/car/UpdateCarPersist.java new file mode 100644 index 0000000..6be5beb --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/UpdateCarPersist.java @@ -0,0 +1,32 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.entities.car.Car; +import br.com.grupomult.exceptions.HttpNotFoundException; +import br.com.grupomult.repositories.CarRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARS_BY_ID_NOT_FOUND; + +/** + * Created by leandro on 25/12/18. + */ +public class UpdateCarPersist { + + @Autowired + private UpdateCarResponse response; + + @Autowired + private CarRepository repository; + + public ResponseEntity execute(Car car) { + if(repository.exists(car.getCarId())){ + return response.execute(repository.save(car)); + } + + throw new HttpNotFoundException(ERROR_GET_CARS_BY_ID_NOT_FOUND); + + } + +} diff --git a/src/main/java/br/com/grupomult/flows/car/UpdateCarResponse.java b/src/main/java/br/com/grupomult/flows/car/UpdateCarResponse.java new file mode 100644 index 0000000..c643049 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/UpdateCarResponse.java @@ -0,0 +1,16 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.converter.car.CarConverter; +import br.com.grupomult.entities.car.Car; +import org.springframework.http.ResponseEntity; + +/** + * Created by leandro on 25/12/18. + */ +public class UpdateCarResponse { + + public ResponseEntity execute(Car car) { + return ResponseEntity.ok(new ResponseGetCarsById().car(CarConverter.convert(car))); + } +} diff --git a/src/main/java/br/com/grupomult/flows/car/UpdateCarValidate.java b/src/main/java/br/com/grupomult/flows/car/UpdateCarValidate.java new file mode 100644 index 0000000..d97fa04 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/car/UpdateCarValidate.java @@ -0,0 +1,39 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.car.models.Car; +import br.com.grupomult.api.car.models.ResponseGetCarsById; +import br.com.grupomult.exceptions.HttpBadRequestException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import java.util.Optional; + +import static br.com.grupomult.constants.MessageConstants.*; +import static br.com.grupomult.constants.MessageConstants.ERROR_ADD_CAR_INVALID_VALUE; + +/** + * Created by leandro on 25/12/18. + */ +public class UpdateCarValidate { + + @Autowired + private UpdateCarConverter converter; + + public ResponseEntity execute(Car car) { + if (!Optional.ofNullable(car.getId()).isPresent() || car.getId() < 0) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_ID); + } + if (!Optional.ofNullable(car.getType()).isPresent()) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_TYPE); + } + if (!Optional.ofNullable(car.getCode()).isPresent()) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_CODE); + } + if (!Optional.ofNullable(car.getValue()).isPresent()) { + throw new HttpBadRequestException(ERROR_ADD_CAR_INVALID_VALUE); + } + + return converter.execute(car); + } + +} diff --git a/src/main/java/br/com/grupomult/repositories/CarRepository.java b/src/main/java/br/com/grupomult/repositories/CarRepository.java new file mode 100644 index 0000000..e98e596 --- /dev/null +++ b/src/main/java/br/com/grupomult/repositories/CarRepository.java @@ -0,0 +1,14 @@ +package br.com.grupomult.repositories; + +import br.com.grupomult.entities.car.Car; +import br.com.grupomult.entities.car.CarId; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +/** + * Created by leandro on 25/12/18. + */ +@Repository +public interface CarRepository extends CrudRepository { + +} diff --git a/src/main/java/br/com/grupomult/repositories/CarTypeRepository.java b/src/main/java/br/com/grupomult/repositories/CarTypeRepository.java new file mode 100644 index 0000000..bfc7090 --- /dev/null +++ b/src/main/java/br/com/grupomult/repositories/CarTypeRepository.java @@ -0,0 +1,14 @@ +package br.com.grupomult.repositories; + +import br.com.grupomult.entities.car.CarId; +import br.com.grupomult.entities.car.CarType; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +/** + * Created by leandro on 25/12/18. + */ +@Repository +public interface CarTypeRepository extends CrudRepository { + +} diff --git a/src/main/resources/flow-definition.xml b/src/main/resources/flow-definition.xml index 1f2d2ac..8d3e8e3 100644 --- a/src/main/resources/flow-definition.xml +++ b/src/main/resources/flow-definition.xml @@ -17,4 +17,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/swagger/api-car.yaml b/src/main/resources/swagger/api-car.yaml new file mode 100644 index 0000000..c07b24a --- /dev/null +++ b/src/main/resources/swagger/api-car.yaml @@ -0,0 +1,202 @@ +--- +swagger: "2.0" +info: + description: API para Exercício Java - Grupo Mult + version: 0.0.1-SNAPSHOT + title: API Grupo Mult + contact: + email: leandrocesar09@gmail.com +host: virtserver.swaggerhub.com +schemes: +- https +- http +paths: + /cars: + get: + summary: Recuperar lista de carros + description: Recupera uma lista de carros + operationId: getCars + produces: + - application/json + parameters: [] + responses: + 200: + description: Lista de todos os carros + schema: + $ref: '#/definitions/ResponseGetCars' + 204: + description: Nenhum carro encontrado + 400: + description: Dados de entrada invalidos + 500: + description: Erro interno no servidor + post: + summary: Adicionar um carro + description: Adiciona um carro ao sistema + operationId: addCar + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: Car + description: Carro a ser adicionado ao sistema + required: false + schema: + $ref: '#/definitions/Car' + responses: + 201: + description: Carro criado + schema: + $ref: '#/definitions/ResponseGetCarsById' + 400: + description: Dados de entrada invalidos + 409: + description: Carro ja existente + 500: + description: Erro interno no servidor + put: + summary: Atualizar um carro pelo ID + description: Atualiza as informacoes de um carro de acordo com o ID informado + operationId: updateCar + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: Car + description: Carro a ser atualizado no sistema + required: false + schema: + $ref: '#/definitions/Car' + responses: + 200: + description: Carro atualizado + schema: + $ref: '#/definitions/ResponseGetCarsById' + 400: + description: O ID informado e invalido + 404: + description: Nenhum carro encontrado com o ID especificado + 500: + description: Erro interno no servidor + /cars/{id}/{type}: + get: + summary: Recuperar carro pelo ID + description: Recupera as informacoes de um carro de acordo com o ID informado + operationId: getCarById + produces: + - application/json + parameters: + - name: id + in: path + required: true + type: integer + format: int64 + - name: type + in: path + required: true + type: integer + format: int64 + responses: + 200: + description: Informacoes de um carro encontrado + schema: + $ref: '#/definitions/ResponseGetCarsById' + 400: + description: Dados de entrada invalidos + 404: + description: Nenhum carro encontrado com o ID especificado + 500: + description: Erro interno no servidor + delete: + summary: Remover um carro pelo ID + description: Remove um carro do sistema de acordo com o ID informado + operationId: removeCar + produces: + - application/json + parameters: + - name: id + in: path + required: true + type: integer + format: int64 + - name: type + in: path + required: true + type: integer + format: int64 + responses: + 200: + description: Carro removido + 400: + description: O ID informado e invalido + 404: + description: Nenhum carro encontrado com o ID especificado + 500: + description: Erro interno no servidor +definitions: + ResponseGetCars: + type: object + properties: + cars: + type: array + items: + $ref: '#/definitions/Car' + ResponseGetCarsById: + type: object + properties: + car: + $ref: '#/definitions/Car' + Car: + type: object + required: + - code + - description + - type + - value + properties: + id: + type: integer + format: int64 + description: Identificador + type: + $ref: '#/definitions/CarType' + code: + type: string + description: Codigo de referencia + description: + type: string + description: Descricao + value: + type: number + format: double + description: Valor atual + valueTax: + type: number + format: double + description: Valor do imposto + creationDate: + type: string + description: Data de criacao do cadastro + updateDate: + type: string + description: Data de atualizacao do cadastro + CarType: + type: object + required: + - id + properties: + id: + type: integer + format: int64 + description: Identificador + code: + type: string + example: S001 + description: Codigo de referencia + description: + type: string + description: Descricao diff --git a/src/test/java/br/com/grupomult/configuration/TestConfiguration.java b/src/test/java/br/com/grupomult/configuration/TestConfiguration.java index 2fbe44a..8cea32b 100644 --- a/src/test/java/br/com/grupomult/configuration/TestConfiguration.java +++ b/src/test/java/br/com/grupomult/configuration/TestConfiguration.java @@ -1,5 +1,7 @@ package br.com.grupomult.configuration; +import br.com.grupomult.repositories.CarRepository; +import br.com.grupomult.repositories.CarTypeRepository; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; @@ -13,4 +15,11 @@ public class TestConfiguration { @MockBean private AnimalRepository animalRepository; + @MockBean + private CarRepository carRepository; + + @MockBean + private CarTypeRepository carTypeRepository; + + } \ No newline at end of file diff --git a/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java index 718ac07..7b3dd28 100644 --- a/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java +++ b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java @@ -3,6 +3,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import br.com.grupomult.flows.car.*; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -62,4 +63,82 @@ public void testFlowListAnimalsByIdInstanceofSuccess() { assertTrue(applicationContest.getBean("listAnimalsByIdResponse") instanceof ListAnimalsByIdResponse); } + @Test + public void testFlowListCarsExistsSuccess() { + assertNotNull(applicationContest.getBean("listCarsValidate")); + assertNotNull(applicationContest.getBean("listCarsLoad")); + assertNotNull(applicationContest.getBean("listCarsConverter")); + assertNotNull(applicationContest.getBean("listCarsResponse")); + } + + @Test + public void testFlowListCarsInstanceofSuccess() { + assertTrue(applicationContest.getBean("listCarsValidate") instanceof ListCarsValidate); + assertTrue(applicationContest.getBean("listCarsLoad") instanceof ListCarsLoad); + assertTrue(applicationContest.getBean("listCarsConverter") instanceof ListCarsConverter); + assertTrue(applicationContest.getBean("listCarsResponse") instanceof ListCarsResponse); + } + + @Test + public void testFlowListCarsByIdExistsSuccess() { + assertNotNull(applicationContest.getBean("listCarsByIdValidate")); + assertNotNull(applicationContest.getBean("listCarsByIdLoad")); + assertNotNull(applicationContest.getBean("listCarsByIdLoadValidate")); + assertNotNull(applicationContest.getBean("listCarsByIdConverter")); + assertNotNull(applicationContest.getBean("listCarsByIdResponse")); + } + + @Test + public void testFlowListCarsByIdInstanceofSuccess() { + assertTrue(applicationContest.getBean("listCarsByIdValidate") instanceof ListCarsByIdValidate); + assertTrue(applicationContest.getBean("listCarsByIdLoad") instanceof ListCarsByIdLoad); + assertTrue(applicationContest.getBean("listCarsByIdLoadValidate") instanceof ListCarsByIdLoadValidate); + assertTrue(applicationContest.getBean("listCarsByIdConverter") instanceof ListCarsByIdConverter); + assertTrue(applicationContest.getBean("listCarsByIdResponse") instanceof ListCarsByIdResponse); + } + + @Test + public void testFlowLAddCarExistsSuccess() { + assertNotNull(applicationContest.getBean("addCarValidate")); + assertNotNull(applicationContest.getBean("addCarPersist")); + assertNotNull(applicationContest.getBean("addCarConverter")); + assertNotNull(applicationContest.getBean("addCarResponse")); + } + + @Test + public void testFlowAddCarInstanceofSuccess() { + assertTrue(applicationContest.getBean("addCarValidate") instanceof AddCarValidateTest); + assertTrue(applicationContest.getBean("addCarPersist") instanceof AddCarPersist); + assertTrue(applicationContest.getBean("addCarConverter") instanceof AddCarConverter); + assertTrue(applicationContest.getBean("addCarResponse") instanceof AddCarResponse); + } + + @Test + public void testFlowLUpdateCarExistsSuccess() { + assertNotNull(applicationContest.getBean("updateCarValidate")); + assertNotNull(applicationContest.getBean("updateCarPersist")); + assertNotNull(applicationContest.getBean("updateCarConverter")); + assertNotNull(applicationContest.getBean("updateCarResponse")); + } + + @Test + public void testFlowUpdateCarInstanceofSuccess() { + assertTrue(applicationContest.getBean("updateCarValidate") instanceof UpdateCarValidate); + assertTrue(applicationContest.getBean("updateCarPersist") instanceof UpdateCarPersist); + assertTrue(applicationContest.getBean("updateCarConverter") instanceof UpdateCarConverter); + assertTrue(applicationContest.getBean("updateCarResponse") instanceof UpdateCarResponse); + } + + @Test + public void testFlowRemoveCarExistsSuccess() { + assertNotNull(applicationContest.getBean("removeCarValidate")); + assertNotNull(applicationContest.getBean("removeCarLoad")); + } + + @Test + public void testFlowRemoveCarInstanceofSuccess() { + assertTrue(applicationContest.getBean("removeCarValidate") instanceof RemoveCarValidate); + assertTrue(applicationContest.getBean("removeCarLoad") instanceof RemoveCarLoad); + } + } diff --git a/src/test/java/br/com/grupomult/flows/car/RemoveCarLoadTest.java b/src/test/java/br/com/grupomult/flows/car/RemoveCarLoadTest.java new file mode 100644 index 0000000..a71cb78 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/car/RemoveCarLoadTest.java @@ -0,0 +1,36 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.api.animal.models.ResponseGetAnimalsById; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.repositories.CarRepository; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.Random; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * Created by leandro on 26/12/18. + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class RemoveCarLoadTest { + + @Autowired + private RemoveCarLoad flow; + + @Test + public void testLoadSuccess() { + ResponseEntity response = flow.execute(new Random().nextLong(), new Random().nextLong()); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + +} diff --git a/src/test/java/br/com/grupomult/flows/car/RemoveCarValidateTest.java b/src/test/java/br/com/grupomult/flows/car/RemoveCarValidateTest.java new file mode 100644 index 0000000..5ad04b8 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/car/RemoveCarValidateTest.java @@ -0,0 +1,40 @@ +package br.com.grupomult.flows.car; + +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.exceptions.HttpBadRequestException; +import br.com.grupomult.exceptions.HttpNotFoundException; +import br.com.grupomult.flows.animal.ListAnimalsByIdConverter; +import br.com.grupomult.flows.animal.ListAnimalsByIdLoadValidate; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * Created by leandro on 26/12/18. + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class RemoveCarValidateTest { + + @Autowired + private RemoveCarValidate flow; + + @Test + public void testValidateWithSuccess() { + flow.execute(1l, 1l); + } + + @Test(expected = HttpBadRequestException.class) + public void testValidateWithAnimalNullIdHttpBadRequestException() { + flow.execute(null, 1l); + } + + @Test(expected = HttpBadRequestException.class) + public void testValidateWithAnimalNullTypeHttpBadRequestException() { + flow.execute(1l, null); + } + +} From cd69f2cceee038f1f27902856f51c8a6288990d7 Mon Sep 17 00:00:00 2001 From: Leandro Silva Date: Mon, 14 Dec 2020 11:00:21 -0300 Subject: [PATCH 2/2] teste --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de20a19..516a2f4 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Este repositório contem uma implementação de referência para auxiliar na con O candidato DEVE realizar o clone da branch master, criar uma nova branch, realizar a implementação e para a entrega fazer o push e solicitar um pull request para a master. - Padrão de nome da branch: `ft-yyyyMMdd-nome-completo` -## Diagrama de atividades +## Diagrama de atividades O diagrama abaixo representa as atividades na implementação de um recurso REST de operação POST para manipulação de determinada representação (entidade carro, por exemplo).