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).
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
+
+
+ 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);
+ }
+
+}