From a22e65da39187235eb56d692233d157bf76282c2 Mon Sep 17 00:00:00 2001 From: Urbano Botrel Menegato Date: Sat, 29 Dec 2018 00:51:32 -0200 Subject: [PATCH 1/5] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20da=20funcionalida?= =?UTF-8?q?de=20de=20cadastro=20de=20carros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/CarrosApiController.java | 68 +++++++ .../configurations/LoadDatabase.java | 56 ++++-- .../com/grupomult/constants/ApiConstants.java | 1 + .../grupomult/constants/MessageConstants.java | 5 + .../grupomult/converter/CarroConverter.java | 53 ++++++ .../java/br/com/grupomult/entities/Carro.java | 46 +++++ .../br/com/grupomult/entities/TipoCarro.java | 33 ++++ .../flows/carro/DeleteCarrosById.java | 23 +++ .../flows/carro/InsertCarrosConverter.java | 16 ++ .../flows/carro/InsertCarrosLoadValidate.java | 26 +++ .../flows/carro/InsertCarrosReal.java | 31 +++ .../flows/carro/InsertCarrosValidate.java | 32 ++++ .../flows/carro/ListCarrosByIdConverter.java | 19 ++ .../flows/carro/ListCarrosByIdLoad.java | 21 +++ .../carro/ListCarrosByIdLoadValidate.java | 27 +++ .../flows/carro/ListCarrosByIdResponse.java | 14 ++ .../flows/carro/ListCarrosByIdValidate.java | 25 +++ .../flows/carro/ListCarrosConverter.java | 35 ++++ .../grupomult/flows/carro/ListCarrosLoad.java | 24 +++ .../flows/carro/ListCarrosResponse.java | 20 ++ .../flows/carro/ListCarrosValidate.java | 18 ++ .../flows/carro/UpdateCarrosReal.java | 31 +++ .../flows/carro/UpdateCarrosValidate.java | 33 ++++ .../repositories/CarroRepository.java | 11 ++ .../repositories/TipoCarroRepository.java | 17 ++ .../br/com/grupomult/utils/DateUtils.java | 10 + src/main/resources/application.properties | 13 ++ src/main/resources/flow-definition.xml | 29 +++ src/main/resources/swagger/api-carro.yaml | 176 ++++++++++++++++++ .../controllers/CarrosApiControllerTest.java | 126 +++++++++++++ .../configuration/TestConfiguration.java | 4 + .../FlowDefinitionCarroTest.java | 112 +++++++++++ .../animal/ListAnimalsByIdConverterTest.java | 3 +- .../flows/carro/DeleteCarrosByIdTest.java | 30 +++ .../carro/InserirCarrosConverterTest.java | 82 ++++++++ .../flows/carro/InserirCarrosRealTest.java | 77 ++++++++ .../carro/InserirCarrosValidateTest.java | 67 +++++++ .../carro/ListCarrosByIdConverterTest.java | 67 +++++++ .../flows/carro/ListCarrosByIdLoadTest.java | 64 +++++++ .../carro/ListCarrosByIdLoadValidateTest.java | 62 ++++++ .../utils/CarroDomainEntityUtil.java | 65 +++++++ 41 files changed, 1659 insertions(+), 13 deletions(-) create mode 100644 src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java create mode 100644 src/main/java/br/com/grupomult/converter/CarroConverter.java create mode 100644 src/main/java/br/com/grupomult/entities/Carro.java create mode 100644 src/main/java/br/com/grupomult/entities/TipoCarro.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/InsertCarrosConverter.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/InsertCarrosLoadValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/InsertCarrosValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdConverter.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdResponse.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosConverter.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosLoad.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosResponse.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/ListCarrosValidate.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java create mode 100644 src/main/java/br/com/grupomult/flows/carro/UpdateCarrosValidate.java create mode 100644 src/main/java/br/com/grupomult/repositories/CarroRepository.java create mode 100644 src/main/java/br/com/grupomult/repositories/TipoCarroRepository.java create mode 100644 src/main/resources/swagger/api-carro.yaml create mode 100644 src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java create mode 100644 src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java create mode 100644 src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java create mode 100644 src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java create mode 100644 src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java create mode 100644 src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java create mode 100644 src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java create mode 100644 src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java create mode 100644 src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java create mode 100644 src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java diff --git a/src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java b/src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java new file mode 100644 index 0000000..643546b --- /dev/null +++ b/src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java @@ -0,0 +1,68 @@ +package br.com.grupomult.api.carro.controllers; + +import static br.com.grupomult.constants.ApiConstants.GET_LIST_CARROS_BY_ID_PATH_ID; + +import javax.validation.Valid; + +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 br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.ResponseGetCarros; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.flows.carro.DeleteCarrosById; +import br.com.grupomult.flows.carro.InsertCarrosValidate; +import br.com.grupomult.flows.carro.ListCarrosByIdValidate; +import br.com.grupomult.flows.carro.ListCarrosValidate; +import br.com.grupomult.flows.carro.UpdateCarrosValidate; +import io.swagger.annotations.ApiParam; + +@RestController +public class CarrosApiController implements CarrosApi { + + @Autowired + private InsertCarrosValidate insertCarrosValidate; + + @Autowired + private UpdateCarrosValidate updateCarrosValidate; + + @Autowired + private DeleteCarrosById deleteCarrosById; + + @Autowired + private ListCarrosValidate listCarrosFlow; + + @Autowired + private ListCarrosByIdValidate listCarrosByIdFlow; + + @Override + public ResponseEntity detail( @PathVariable(value = GET_LIST_CARROS_BY_ID_PATH_ID, required = true) Integer id) { + return listCarrosByIdFlow.execute(id); + } + + @Override + public ResponseEntity list() { + return listCarrosFlow.execute(); + } + + @Override + public ResponseEntity adicionarCarro(@ApiParam(value = "Objeto carro a ser adicionado no estoque" ) @Valid @RequestBody Carro body) { + return insertCarrosValidate.execute(body); + } + + @Override + public ResponseEntity atualizarCarro(@ApiParam(value = "Objeto carro a ser atualizado no estoque" ) @Valid @RequestBody Carro body) { + return updateCarrosValidate.execute(body); + } + + @Override + public ResponseEntity deletarCarro( @PathVariable(value = GET_LIST_CARROS_BY_ID_PATH_ID, required = true) Integer id) { + return deleteCarrosById.execute(id); + } + + + +} diff --git a/src/main/java/br/com/grupomult/configurations/LoadDatabase.java b/src/main/java/br/com/grupomult/configurations/LoadDatabase.java index dff3e21..d49cf86 100644 --- a/src/main/java/br/com/grupomult/configurations/LoadDatabase.java +++ b/src/main/java/br/com/grupomult/configurations/LoadDatabase.java @@ -2,34 +2,68 @@ import static br.com.grupomult.api.animal.models.Animal.SpeciesEnum.CANINE; import static br.com.grupomult.api.animal.models.Animal.SpeciesEnum.FELINE; -import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE; +import static br.com.grupomult.api.carro.models.Carro.TipoCarroEnum.PASSEIO; +import static br.com.grupomult.api.carro.models.Carro.TipoCarroEnum.UTILITARIO; +import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE_HOUR; import static br.com.grupomult.utils.DateUtils.stringToDate; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import br.com.grupomult.api.animal.models.Animal.SpeciesEnum; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; import br.com.grupomult.entities.Animal; +import br.com.grupomult.entities.Carro; import br.com.grupomult.entities.Species; +import br.com.grupomult.entities.TipoCarro; import br.com.grupomult.repositories.AnimalRepository; +import br.com.grupomult.repositories.CarroRepository; import lombok.extern.slf4j.Slf4j; @Configuration @Slf4j -public class LoadDatabase { - - @Bean - public CommandLineRunner initDatabase(AnimalRepository repository) { - 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()); - }; +public class LoadDatabase implements CommandLineRunner { + + @Autowired + private AnimalRepository animalRepository; + + @Autowired + private CarroRepository carroRepository; + + @Override + public void run(String... args) throws Exception { + initDatabaseAnimal(); + initDatabaseCarro(); + } + + public void initDatabaseAnimal() { + log.info( + "Preloading " + animalRepository.save(createAnimal("Janis", "2015-02-09 11:00:00", CANINE)).toString()); + log.info( + "Preloading " + animalRepository.save(createAnimal("Rocky", "2014-10-15 11:00:00", FELINE)).toString()); + } + + public void initDatabaseCarro() { + log.info("Preloading " + carroRepository + .save(createCarro("PLR1235", "Hiunday i30", "2017-01-01 11:00:00", "2017-02-01 11:00:00", PASSEIO)) + .toString()); + log.info("Preloading " + carroRepository + .save(createCarro("PLR1235", "Hiunday ix35", "2018-01-01 11:00:00", "2018-02-01 11:00:00", UTILITARIO)) + .toString()); } private static Animal createAnimal(String name, String dob, SpeciesEnum species) { - return Animal.builder().name(name).dob(stringToDate(dob, ISO8601_COMPLETE_DATE)) + return Animal.builder().name(name).dob(stringToDate(dob, ISO8601_COMPLETE_DATE_HOUR)) .species(Species.builder().code(species).build()).build(); } + private static Carro createCarro(String codigo, String descricao, String dataCriacao, String dataAtualizacao, + TipoCarroEnum tipoCarro) { + return Carro.builder().codigo(codigo).descricao(descricao) + .dataCriacao(stringToDate(dataCriacao, ISO8601_COMPLETE_DATE_HOUR)) + .dataAtualizacao(stringToDate(dataAtualizacao, ISO8601_COMPLETE_DATE_HOUR)) + .tipoCarro(TipoCarro.builder().code(tipoCarro).build()).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..b3899b9 100644 --- a/src/main/java/br/com/grupomult/constants/ApiConstants.java +++ b/src/main/java/br/com/grupomult/constants/ApiConstants.java @@ -3,6 +3,7 @@ public final class ApiConstants { public static final String GET_LIST_ANIMALS_BY_ID_PATH_ID = "id"; + public static final String GET_LIST_CARROS_BY_ID_PATH_ID = "id"; 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..e8cb5c5 100644 --- a/src/main/java/br/com/grupomult/constants/MessageConstants.java +++ b/src/main/java/br/com/grupomult/constants/MessageConstants.java @@ -7,6 +7,11 @@ 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_CARROS_BY_ID_INVALID_ID = "Identificador inválido"; + public static final String ERROR_GET_CARROS_BY_ID_NOT_FOUND = "Carro não encontrado"; + public static final String ERROR_INSERT_CARRO_INVALID_OBJECT = "Carro com dado nulo ou inválido"; + public static final String ERROR_INSERT_CARRO_OBJECT_NOT_FOUND = "Carro inserido não encontrado"; + private MessageConstants() { } diff --git a/src/main/java/br/com/grupomult/converter/CarroConverter.java b/src/main/java/br/com/grupomult/converter/CarroConverter.java new file mode 100644 index 0000000..e63aaec --- /dev/null +++ b/src/main/java/br/com/grupomult/converter/CarroConverter.java @@ -0,0 +1,53 @@ +package br.com.grupomult.converter; + +import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE_HOUR; +import static br.com.grupomult.utils.DateUtils.dateToString; +import static br.com.grupomult.utils.DateUtils.stringToDate; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.entities.TipoCarro; + +public class CarroConverter { + + protected final static Carro convertEntityToDomain(br.com.grupomult.entities.Carro entity) { + if(entity == null){ + return null; + } + + Carro domain = new Carro(); + domain.setId(entity.getId()); + domain.setCodigo(entity.getCodigo()); + domain.setDescricao(entity.getDescricao()); + domain.setDataCriacao(dateToString(entity.getDataCriacao(), ISO8601_COMPLETE_DATE_HOUR)); + domain.setDataAtualizacao(dateToString(entity.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); + domain.setTipoCarro(entity.getTipoCarro().getCode()); + + return domain; + } + + protected final static br.com.grupomult.entities.Carro convertDomainToEntity(Carro domain) { + if(domain == null){ + return null; + } + + br.com.grupomult.entities.Carro entity = new br.com.grupomult.entities.Carro(); + entity.setId(domain.getId()); + entity.setCodigo(domain.getCodigo()); + entity.setDescricao(domain.getDescricao()); + entity.setDataCriacao(stringToDate(domain.getDataCriacao(), ISO8601_COMPLETE_DATE_HOUR)); + entity.setDataAtualizacao(stringToDate(domain.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); + entity.setTipoCarro(criarTipoCarro(domain.getTipoCarro())); + + return entity; + } + + private static TipoCarro criarTipoCarro(TipoCarroEnum tipoCarroEnum) { + if(tipoCarroEnum == null){ + return null; + } + TipoCarro tipoCarro = TipoCarro.builder().code(tipoCarroEnum).build(); + return tipoCarro; + } + +} diff --git a/src/main/java/br/com/grupomult/entities/Carro.java b/src/main/java/br/com/grupomult/entities/Carro.java new file mode 100644 index 0000000..2ca22b5 --- /dev/null +++ b/src/main/java/br/com/grupomult/entities/Carro.java @@ -0,0 +1,46 @@ +package br.com.grupomult.entities; + +import java.util.Date; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class Carro { + + @Id + @GeneratedValue + private Integer id; + + private String codigo; + + private String descricao; + + @Temporal(TemporalType.TIMESTAMP) + private Date dataCriacao; + + @Temporal(TemporalType.TIMESTAMP) + private Date dataAtualizacao; + + @ManyToOne(cascade = CascadeType.ALL) + private TipoCarro tipoCarro; + +} diff --git a/src/main/java/br/com/grupomult/entities/TipoCarro.java b/src/main/java/br/com/grupomult/entities/TipoCarro.java new file mode 100644 index 0000000..9c93fd0 --- /dev/null +++ b/src/main/java/br/com/grupomult/entities/TipoCarro.java @@ -0,0 +1,33 @@ +package br.com.grupomult.entities; + +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class TipoCarro { + + @Id + @GeneratedValue + private Integer id; + + @Enumerated(EnumType.STRING) + private TipoCarroEnum code; + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java b/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java new file mode 100644 index 0000000..a02f524 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java @@ -0,0 +1,23 @@ +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.repositories.CarroRepository; + +public class DeleteCarrosById { + + @Autowired + private CarroRepository repository; + + public ResponseEntity execute(Integer id) { + try{ + repository.delete(id); + return new ResponseEntity( HttpStatus.OK ); + }catch (Exception e) { + return new ResponseEntity( HttpStatus.NOT_FOUND ); + } + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/InsertCarrosConverter.java b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosConverter.java new file mode 100644 index 0000000..7d5aa35 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosConverter.java @@ -0,0 +1,16 @@ +package br.com.grupomult.flows.carro; + +import br.com.grupomult.converter.CarroConverter; +import br.com.grupomult.entities.Carro; + +public class InsertCarrosConverter extends CarroConverter { + + public br.com.grupomult.api.carro.models.Carro executeConvertEntityToDomain(Carro carro) { + return convertEntityToDomain(carro); + } + + public Carro executeConvertDomainToEntity(br.com.grupomult.api.carro.models.Carro domain) { + return convertDomainToEntity(domain); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/InsertCarrosLoadValidate.java b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosLoadValidate.java new file mode 100644 index 0000000..3799ed9 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosLoadValidate.java @@ -0,0 +1,26 @@ +package br.com.grupomult.flows.carro; + +import static br.com.grupomult.constants.MessageConstants.ERROR_INSERT_CARRO_OBJECT_NOT_FOUND; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.exceptions.HttpNotFoundException; + +public class InsertCarrosLoadValidate { + + @Autowired + private ListCarrosByIdConverter converter; + + public ResponseEntity execute(Carro carroEntity) { + if (Optional.ofNullable(carroEntity).isPresent()) { + return converter.execute(carroEntity); + } else { + throw new HttpNotFoundException(ERROR_INSERT_CARRO_OBJECT_NOT_FOUND); + } + } +} diff --git a/src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java new file mode 100644 index 0000000..740d278 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java @@ -0,0 +1,31 @@ +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.repositories.CarroRepository; + +public class InsertCarrosReal { + + @Autowired + private CarroRepository carroRepository; + + @Autowired + private InsertCarrosConverter insertCarrosConverter; + + @Autowired + private InsertCarrosLoadValidate insertCarrosLoadValidate; + + + public ResponseEntity execute(br.com.grupomult.api.carro.models.Carro carro) { + Carro executeEntity = insertCarrosConverter.executeConvertDomainToEntity(carro); + return insertCarrosLoadValidate.execute(salvarCarro(executeEntity)); + } + + + private Carro salvarCarro(Carro carroEntity) { + return carroRepository.save(carroEntity); + } +} diff --git a/src/main/java/br/com/grupomult/flows/carro/InsertCarrosValidate.java b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosValidate.java new file mode 100644 index 0000000..1dca0f2 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosValidate.java @@ -0,0 +1,32 @@ +package br.com.grupomult.flows.carro; + +import static br.com.grupomult.constants.MessageConstants.ERROR_INSERT_CARRO_INVALID_OBJECT; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.exceptions.HttpBadRequestException; + +public class InsertCarrosValidate { + + @Autowired + private InsertCarrosReal insertCarrosReal; + + public ResponseEntity execute(Carro carro) { + if (!Optional.ofNullable(carro).isPresent() + || carro.getCodigo() == null + || carro.getDescricao() == null + || carro.getTipoCarro() == null + || carro.getDataCriacao() == null + || carro.getDataAtualizacao() == null + ) { + throw new HttpBadRequestException(ERROR_INSERT_CARRO_INVALID_OBJECT); + } + return insertCarrosReal.execute(carro); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdConverter.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdConverter.java new file mode 100644 index 0000000..7aa506e --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdConverter.java @@ -0,0 +1,19 @@ +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.converter.CarroConverter; +import br.com.grupomult.entities.Carro; + +public class ListCarrosByIdConverter extends CarroConverter { + + @Autowired + private ListCarrosByIdResponse response; + + public ResponseEntity execute(Carro carro) { + return response.execute(convertEntityToDomain(carro)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java new file mode 100644 index 0000000..14e43ce --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java @@ -0,0 +1,21 @@ +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.repositories.CarroRepository; + +public class ListCarrosByIdLoad { + + @Autowired + private CarroRepository repository; + + @Autowired + private ListCarrosByIdLoadValidate validate; + + public ResponseEntity execute(Integer id) { + return validate.execute(repository.findOne(id)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidate.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidate.java new file mode 100644 index 0000000..114ce1f --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidate.java @@ -0,0 +1,27 @@ +package br.com.grupomult.flows.carro; + +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARROS_BY_ID_NOT_FOUND; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.exceptions.HttpNotFoundException; + +public class ListCarrosByIdLoadValidate { + + @Autowired + private ListCarrosByIdConverter converter; + + public ResponseEntity execute(Carro carro) { + if (Optional.ofNullable(carro).isPresent()) { + return converter.execute(carro); + } else { + throw new HttpNotFoundException(ERROR_GET_CARROS_BY_ID_NOT_FOUND); + } + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdResponse.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdResponse.java new file mode 100644 index 0000000..f7d4f27 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdResponse.java @@ -0,0 +1,14 @@ +package br.com.grupomult.flows.carro; + +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; + +public class ListCarrosByIdResponse { + + public ResponseEntity execute(Carro carro) { + return ResponseEntity.ok(new ResponseGetCarrosById().carro(carro)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java new file mode 100644 index 0000000..781e036 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java @@ -0,0 +1,25 @@ +package br.com.grupomult.flows.carro; + +import static br.com.grupomult.constants.MessageConstants.ERROR_GET_CARROS_BY_ID_INVALID_ID; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.exceptions.HttpBadRequestException; + +public class ListCarrosByIdValidate { + + @Autowired + private ListCarrosByIdLoad load; + + public ResponseEntity execute(Integer id) { + if (!Optional.ofNullable(id).isPresent() || id < 0) { + throw new HttpBadRequestException(ERROR_GET_CARROS_BY_ID_INVALID_ID); + } + return load.execute(id); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosConverter.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosConverter.java new file mode 100644 index 0000000..1ef8bbd --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosConverter.java @@ -0,0 +1,35 @@ +package br.com.grupomult.flows.carro; + +import static br.com.grupomult.utils.OptionalUtils.ofNullableAndEmpty; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.ResponseGetCarros; +import br.com.grupomult.converter.CarroConverter; + +public class ListCarrosConverter extends CarroConverter { + + @Autowired + private ListCarrosResponse response; + + public ResponseEntity execute(List carros) { + + /* + * Se a consulta do banco retornar uma lista nula ou vazia apenas é criada uma + * lista vazia do tipo de resposta da API, caso contrário é gerada uma lista com + * objetos de resposta da API baseados nos objetos do banco. + */ + List carrosApi = ofNullableAndEmpty(carros).orElse(Collections.emptyList()).stream() + .map(ListCarrosConverter::convertEntityToDomain).collect(Collectors.toList()); + + return response.execute(carrosApi); + + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosLoad.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosLoad.java new file mode 100644 index 0000000..524905b --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosLoad.java @@ -0,0 +1,24 @@ +package br.com.grupomult.flows.carro; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarros; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.repositories.CarroRepository; + +public class ListCarrosLoad { + + @Autowired + private CarroRepository repository; + + @Autowired + private ListCarrosConverter converter; + + public ResponseEntity execute() { + return converter.execute((List) repository.findAll()); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosResponse.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosResponse.java new file mode 100644 index 0000000..70ec749 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosResponse.java @@ -0,0 +1,20 @@ +package br.com.grupomult.flows.carro; + +import java.util.List; + +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.ResponseGetCarros; + +public class ListCarrosResponse { + + public ResponseEntity execute(List carrosApi) { + if (carrosApi.isEmpty()) { + return ResponseEntity.noContent().build(); + } else { + return ResponseEntity.ok(new ResponseGetCarros().carros(carrosApi)); + } + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosValidate.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosValidate.java new file mode 100644 index 0000000..4087957 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosValidate.java @@ -0,0 +1,18 @@ +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarros; + +public class ListCarrosValidate { + + @Autowired + private ListCarrosLoad load; + + public ResponseEntity execute() { + // Nothing to validate + return load.execute(); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java b/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java new file mode 100644 index 0000000..4a5d291 --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java @@ -0,0 +1,31 @@ +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.repositories.CarroRepository; + +public class UpdateCarrosReal { + + @Autowired + private CarroRepository carroRepository; + + @Autowired + private InsertCarrosConverter insertCarrosConverter; + + @Autowired + private InsertCarrosLoadValidate insertCarrosLoadValidate; + + + public ResponseEntity execute(br.com.grupomult.api.carro.models.Carro carro) { + Carro executeEntity = insertCarrosConverter.executeConvertDomainToEntity(carro); + return insertCarrosLoadValidate.execute(salvarCarro(executeEntity)); + } + + + private Carro salvarCarro(Carro carroEntity) { + return carroRepository.save(carroEntity); + } +} diff --git a/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosValidate.java b/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosValidate.java new file mode 100644 index 0000000..41e475a --- /dev/null +++ b/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosValidate.java @@ -0,0 +1,33 @@ +package br.com.grupomult.flows.carro; + +import static br.com.grupomult.constants.MessageConstants.ERROR_INSERT_CARRO_INVALID_OBJECT; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.exceptions.HttpBadRequestException; + +public class UpdateCarrosValidate { + + @Autowired + private UpdateCarrosReal updateCarrosReal; + + public ResponseEntity execute(Carro carro) { + if (!Optional.ofNullable(carro).isPresent() + || carro.getId() == null + || carro.getCodigo() == null + || carro.getDescricao() == null + || carro.getTipoCarro() == null + || carro.getDataCriacao() == null + || carro.getDataAtualizacao() == null + ) { + throw new HttpBadRequestException(ERROR_INSERT_CARRO_INVALID_OBJECT); + } + return updateCarrosReal.execute(carro); + } + +} diff --git a/src/main/java/br/com/grupomult/repositories/CarroRepository.java b/src/main/java/br/com/grupomult/repositories/CarroRepository.java new file mode 100644 index 0000000..bef82ad --- /dev/null +++ b/src/main/java/br/com/grupomult/repositories/CarroRepository.java @@ -0,0 +1,11 @@ +package br.com.grupomult.repositories; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import br.com.grupomult.entities.Carro; + +@Repository +public interface CarroRepository extends CrudRepository { + +} diff --git a/src/main/java/br/com/grupomult/repositories/TipoCarroRepository.java b/src/main/java/br/com/grupomult/repositories/TipoCarroRepository.java new file mode 100644 index 0000000..c92f1af --- /dev/null +++ b/src/main/java/br/com/grupomult/repositories/TipoCarroRepository.java @@ -0,0 +1,17 @@ +package br.com.grupomult.repositories; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.entities.TipoCarro; + +@Repository +public interface TipoCarroRepository extends CrudRepository { + + @Query("SELECT tc FROM TipoCarro tc WHERE tc.code = :code") + TipoCarro findByCode(@Param("code") TipoCarroEnum code); + +} diff --git a/src/main/java/br/com/grupomult/utils/DateUtils.java b/src/main/java/br/com/grupomult/utils/DateUtils.java index 143618e..a7b53ba 100644 --- a/src/main/java/br/com/grupomult/utils/DateUtils.java +++ b/src/main/java/br/com/grupomult/utils/DateUtils.java @@ -12,6 +12,8 @@ public final class DateUtils { */ public static final String ISO8601_COMPLETE_DATE = "yyyy-MM-dd"; + public static final String ISO8601_COMPLETE_DATE_HOUR = "yyyy-MM-dd hh:mm:ss"; + private DateUtils() { } @@ -23,6 +25,14 @@ public static Date stringToDate(String date, String pattern) { } } + public static Date stringToDate(String date) { + try { + return new SimpleDateFormat(ISO8601_COMPLETE_DATE).parse(date); + } catch (Exception e) { + return null; + } + } + public static String dateToString(Date date, String pattern) { return new SimpleDateFormat(pattern).format(date); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 21ce54a..8c0df2b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,14 @@ server.servlet-path=/api/v1 + +# H2 +spring.h2.console.enabled=true +spring.h2.console.path=/h2 + +spring.datasource.initialize=true +spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE; +spring.datasource.username=sa +spring.datasource.password= +spring.datasource.driver-class-name=org.h2.Driver + +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.show-sql=true diff --git a/src/main/resources/flow-definition.xml b/src/main/resources/flow-definition.xml index 1f2d2ac..59d3587 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-carro.yaml b/src/main/resources/swagger/api-carro.yaml new file mode 100644 index 0000000..b0606ee --- /dev/null +++ b/src/main/resources/swagger/api-carro.yaml @@ -0,0 +1,176 @@ +swagger: '2.0' + +info: + version: '0.0.1-SNAPSHOT' + title: 'API - Carros' + description: 'API de recursos de manipulação para Carros' + +host: localhost:8080 +basePath: /api/v1 + +schemes: + - http + - https + +produces: + - "application/json" + +paths: + + /carros: + get: + summary: Lista todos os carros cadastrados + description: Lista todos os detalhes dos carros cadastrados. + operationId: list + produces: + - application/json + responses: + "200": + description: Representação dos dados de todos os carros cadastrados. + schema: + $ref: '#/definitions/ResponseGetCarros' + "204": + description: Nenhum carro encontrado + "500": + description: Erro interno + + post: + tags: + - carro + summary: Adicionar um novo carro + description: "Adicionar um novo carro no estoque" + operationId: adicionarCarro + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: Objeto carro a ser adicionado no estoque + required: false + schema: + $ref: "#/definitions/Carro" + responses: + "200": + description: Carro adicionado + schema: + $ref: '#/definitions/ResponseGetCarrosById' + "405": + description: Dados inválidos + + put: + tags: + - carro + summary: Atualiza dados de um carro + description: "Atualiza dados de um carro no estoque" + operationId: atualizarCarro + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: Objeto carro a ser atualizado no estoque + required: false + schema: + $ref: "#/definitions/Carro" + responses: + "200": + description: Carro atualizado + schema: + $ref: '#/definitions/ResponseGetCarrosById' + "400": + description: Id inválido enviado + "404": + description: Carro não encontrado + "405": + description: Dados inválidos + + + + /carros/{id}: + get: + summary: Lista um carro específico + description: Lista os detalhes de um carro específico de acordo com o ID. + operationId: detail + produces: + - application/json + parameters: + - name: id + in: path + type: integer + required: true + responses: + "200": + description: Detalhe do carro encontrado + schema: + $ref: '#/definitions/ResponseGetCarrosById' + "404": + description: Nenhum carro encontrado correspondente ao ID informado + "500": + description: Erro interno + + delete: + summary: Deleta um carro + description: "Deleta um carro do estoque" + operationId: deletarCarro + consumes: + - application/json + produces: + - application/json + parameters: + - name: idCarro + in: path + description: O ID do carro a ser deletado + required: true + type: integer + responses: + "404": + description: Nenhum carro encontrado correspondente ao ID informado + + +definitions: + + ResponseGetCarros: + type: object + properties: + carros: + type: array + items: + $ref: '#/definitions/Carro' + + ResponseGetCarrosById: + type: object + properties: + carro: + $ref: '#/definitions/Carro' + + Carro: + type: object + required: + - codigo + - descricao + - dataCriacao + - dataAtualizacao + - tipo + properties: + id: + type: integer + codigo: + type: string + descricao: + type: string + dataCriacao: + description: Data de criação + type: string + dataAtualizacao: + description: Data de atualização + type: string + tipoCarro: + type: string + enum: + - PASSEIO + - UTILITARIO + \ No newline at end of file diff --git a/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java new file mode 100644 index 0000000..f1c1cfb --- /dev/null +++ b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java @@ -0,0 +1,126 @@ +package br.com.grupomult.api.carro.controllers; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.api.carro.models.ResponseGetCarros; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.utils.CarroDomainEntityUtil; + + +@TestPropertySource(locations = "classpath:application.properties") +@Configuration +@EnableAutoConfiguration +@EntityScan("br.com.grupomult.entities") +@EnableJpaRepositories("br.com.grupomult.repositories") +@ComponentScan({"br.com.grupomult"}) +@EnableAspectJAutoProxy +@PropertySource("classpath:application.properties") +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) +@RunWith(SpringJUnit4ClassRunner.class) +@Ignore +public class CarrosApiControllerTest { + + @Autowired + private CarrosApiController carrosApiController; + + private Carro carroDadosValidosInserido; + + @Before + public void setUp() throws Exception { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); + assertNotNull(response); + carroDadosValidosInserido = response.getBody().getCarro(); + + Carro carroDadosValido2 = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.UTILITARIO); + response = carrosApiController.adicionarCarro(carroDadosValido2); + assertNotNull(response); + } + + @Test + public void testInsertSuccess() { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + Carro carro = body.getCarro(); + assertNotNull(carro); + } + + @Test + public void testUpdateSuccess() { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + Carro carroInserido = body.getCarro(); + assertNotNull(carroInserido); + + String descricaoAntes = carroInserido.getDescricao(); + carroInserido.setDescricao(descricaoAntes + "Teste"); + ResponseEntity responseUpdate = carrosApiController.atualizarCarro(carroInserido); + Carro carroAtualizado = responseUpdate.getBody().getCarro(); + + assertNotEquals(descricaoAntes, carroAtualizado.getDescricao()); + } + + + @Test + public void testConsultarSuccess() { + ResponseEntity responseAntes = carrosApiController.list(); + int qtdCarrrosAntes = responseAntes.getBody().getCarros().size(); + assertTrue(qtdCarrrosAntes > 0); + } + + @Test + public void testDeletarSuccess() { + ResponseEntity responseAntes = carrosApiController.list(); + int qtdCarrrosAntes = responseAntes.getBody().getCarros().size(); + + carrosApiController.deletarCarro(carroDadosValidosInserido.getId()); + + ResponseEntity responseDepois = carrosApiController.list(); + int qtdCarrrosDepois = responseDepois.getBody().getCarros().size(); + + assertTrue(qtdCarrrosAntes > qtdCarrrosDepois); + } + + @Test + public void testDetailSuccess() { + ResponseEntity responseAntes = carrosApiController.detail(carroDadosValidosInserido.getId()); + Integer idCarroConsultado = responseAntes.getBody().getCarro().getId(); + assertEquals(idCarroConsultado, carroDadosValidosInserido.getId()); + } +} diff --git a/src/test/java/br/com/grupomult/configuration/TestConfiguration.java b/src/test/java/br/com/grupomult/configuration/TestConfiguration.java index 2fbe44a..ac2d355 100644 --- a/src/test/java/br/com/grupomult/configuration/TestConfiguration.java +++ b/src/test/java/br/com/grupomult/configuration/TestConfiguration.java @@ -5,6 +5,7 @@ import org.springframework.context.annotation.ImportResource; import br.com.grupomult.repositories.AnimalRepository; +import br.com.grupomult.repositories.CarroRepository; @Configuration @ImportResource("classpath:application-context-test.xml") @@ -13,4 +14,7 @@ public class TestConfiguration { @MockBean private AnimalRepository animalRepository; + @MockBean + private CarroRepository carroRepository; + } \ No newline at end of file diff --git a/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java new file mode 100644 index 0000000..fcaac0b --- /dev/null +++ b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java @@ -0,0 +1,112 @@ +package br.com.grupomult.flowdefinitions; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.flows.carro.DeleteCarrosById; +import br.com.grupomult.flows.carro.InsertCarrosConverter; +import br.com.grupomult.flows.carro.InsertCarrosLoadValidate; +import br.com.grupomult.flows.carro.InsertCarrosReal; +import br.com.grupomult.flows.carro.InsertCarrosValidate; +import br.com.grupomult.flows.carro.ListCarrosByIdConverter; +import br.com.grupomult.flows.carro.ListCarrosByIdLoad; +import br.com.grupomult.flows.carro.ListCarrosByIdLoadValidate; +import br.com.grupomult.flows.carro.ListCarrosByIdResponse; +import br.com.grupomult.flows.carro.ListCarrosByIdValidate; +import br.com.grupomult.flows.carro.ListCarrosConverter; +import br.com.grupomult.flows.carro.ListCarrosLoad; +import br.com.grupomult.flows.carro.ListCarrosResponse; +import br.com.grupomult.flows.carro.ListCarrosValidate; +import br.com.grupomult.flows.carro.UpdateCarrosReal; +import br.com.grupomult.flows.carro.UpdateCarrosValidate; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class FlowDefinitionCarroTest { + + @Autowired + private ApplicationContext applicationContest; + + @Test + public void testFlowListCarrosExistsSuccess() { + assertNotNull(applicationContest.getBean("listCarrosValidate")); + assertNotNull(applicationContest.getBean("listCarrosLoad")); + assertNotNull(applicationContest.getBean("listCarrosConverter")); + assertNotNull(applicationContest.getBean("listCarrosResponse")); + } + + @Test + public void testFlowListCarrosInstanceofSuccess() { + assertTrue(applicationContest.getBean("listCarrosValidate") instanceof ListCarrosValidate); + assertTrue(applicationContest.getBean("listCarrosLoad") instanceof ListCarrosLoad); + assertTrue(applicationContest.getBean("listCarrosConverter") instanceof ListCarrosConverter); + assertTrue(applicationContest.getBean("listCarrosResponse") instanceof ListCarrosResponse); + } + + @Test + public void testFlowListCarrosByIdExistsSuccess() { + assertNotNull(applicationContest.getBean("listCarrosByIdValidate")); + assertNotNull(applicationContest.getBean("listCarrosByIdLoad")); + assertNotNull(applicationContest.getBean("listCarrosByIdLoadValidate")); + assertNotNull(applicationContest.getBean("listCarrosByIdConverter")); + assertNotNull(applicationContest.getBean("listCarrosByIdResponse")); + } + + @Test + public void testFlowListCarrosByIdInstanceofSuccess() { + assertTrue(applicationContest.getBean("listCarrosByIdValidate") instanceof ListCarrosByIdValidate); + assertTrue(applicationContest.getBean("listCarrosByIdLoad") instanceof ListCarrosByIdLoad); + assertTrue(applicationContest.getBean("listCarrosByIdLoadValidate") instanceof ListCarrosByIdLoadValidate); + assertTrue(applicationContest.getBean("listCarrosByIdConverter") instanceof ListCarrosByIdConverter); + assertTrue(applicationContest.getBean("listCarrosByIdResponse") instanceof ListCarrosByIdResponse); + } + + @Test + public void testFlowInsertCarrosSuccess() { + assertNotNull(applicationContest.getBean("insertCarrosValidate")); + assertNotNull(applicationContest.getBean("insertCarrosConverter")); + assertNotNull(applicationContest.getBean("insertCarrosReal")); + assertNotNull(applicationContest.getBean("insertCarrosLoadValidate")); + } + + @Test + public void testFlowInsertCarrosInstanceofSuccess() { + assertTrue(applicationContest.getBean("insertCarrosValidate") instanceof InsertCarrosValidate); + assertTrue(applicationContest.getBean("insertCarrosConverter") instanceof InsertCarrosConverter); + assertTrue(applicationContest.getBean("insertCarrosReal") instanceof InsertCarrosReal); + assertTrue(applicationContest.getBean("insertCarrosLoadValidate") instanceof InsertCarrosLoadValidate); + } + + @Test + public void testFlowUpdateCarrosSuccess() { + assertNotNull(applicationContest.getBean("updateCarrosValidate")); + assertNotNull(applicationContest.getBean("updateCarrosReal")); + } + + @Test + public void testFlowUpdateCarrosInstanceofSuccess() { + assertTrue(applicationContest.getBean("updateCarrosValidate") instanceof UpdateCarrosValidate); + assertTrue(applicationContest.getBean("updateCarrosReal") instanceof UpdateCarrosReal); + } + + + @Test + public void testFlowDeleteCarrosSuccess() { + assertNotNull(applicationContest.getBean("deleteCarrosById")); + } + + @Test + public void testFlowDeleteCarrosInstanceofSuccess() { + assertTrue(applicationContest.getBean("deleteCarrosById") instanceof DeleteCarrosById); + } + + +} diff --git a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java index d3ad1c9..5eacdc7 100644 --- a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java +++ b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java @@ -21,12 +21,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import br.com.grupomult.api.animal.models.Animal.SpeciesEnum; -import br.com.grupomult.api.animal.models.ResponseGetAnimalsById; import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.api.animal.models.ResponseGetAnimalsById; import br.com.grupomult.converter.AnimalConverter; import br.com.grupomult.entities.Animal; import br.com.grupomult.entities.Species; -import br.com.grupomult.flows.animal.ListAnimalsByIdConverter; import br.com.grupomult.utils.DateUtils; @RunWith(PowerMockRunner.class) diff --git a/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java b/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java new file mode 100644 index 0000000..99b02d1 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java @@ -0,0 +1,30 @@ +package br.com.grupomult.flows.carro; + +import java.util.Random; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.configuration.TestConfiguration; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class DeleteCarrosByIdTest { + + @Autowired + private DeleteCarrosById deleteCarrosById; + + @Before + public void setUp() throws Exception { + } + + @Test + public void testDeleteSuccess() { + deleteCarrosById.execute(new Random().nextInt()); + } + +} diff --git a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java new file mode 100644 index 0000000..2496ce3 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java @@ -0,0 +1,82 @@ +package br.com.grupomult.flows.carro; + +import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE_HOUR; +import static br.com.grupomult.utils.DateUtils.dateToString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.when; + +import java.util.Date; + +import org.junit.Before; +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; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.repositories.TipoCarroRepository; +import br.com.grupomult.utils.CarroDomainEntityUtil; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class InserirCarrosConverterTest { + + @Autowired + private InsertCarrosConverter insertCarrosConverter; + + @MockBean + private TipoCarroRepository tipoCarroRepository; + + @Before + public void setUp() throws Exception { + when(tipoCarroRepository.findByCode(TipoCarroEnum.PASSEIO)).thenReturn(CarroDomainEntityUtil.criarTipoCarro(TipoCarroEnum.PASSEIO)); + } + + @Test + public void testExecuteConvertDomainToEntity() { + Date data = new Date(); + Carro carroDomain = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO, data, data); + br.com.grupomult.entities.Carro carroDadosValidos = CarroDomainEntityUtil.criarEntityCarro(TipoCarroEnum.PASSEIO, data, data); + br.com.grupomult.entities.Carro carroConverter = insertCarrosConverter.executeConvertDomainToEntity(carroDomain); + assertNotNull(carroConverter); + assertEquals(carroDadosValidos.getCodigo(), carroConverter.getCodigo()); + assertEquals(carroDadosValidos.getDescricao(), carroConverter.getDescricao()); + assertEquals(carroDadosValidos.getId(), carroConverter.getId()); + assertEquals(carroDadosValidos.getTipoCarro().getCode(), carroConverter.getTipoCarro().getCode()); + assertEquals(dateToString(carroDadosValidos.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR) + , dateToString(carroConverter.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); + assertEquals(dateToString(carroDadosValidos.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR) + , dateToString(carroConverter.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); + } + + + @Test + public void testExecuteConvertEntityToDomain() { + Date data = new Date(); + br.com.grupomult.entities.Carro carroEntity = CarroDomainEntityUtil.criarEntityCarro(TipoCarroEnum.PASSEIO, data, data); + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO, data, data); + Carro carroConverter = insertCarrosConverter.executeConvertEntityToDomain(carroEntity); + assertNotNull(carroConverter); + assertEquals(carroDadosValidos, carroConverter); + } + + @Test() + public void testConvertDomainToEntityNull() { + br.com.grupomult.entities.Carro carroConverter = insertCarrosConverter.executeConvertDomainToEntity(null); + assertNull(carroConverter); + } + + @Test() + public void testConvertEntityToDomainNull() { + Carro carroConverter = insertCarrosConverter.executeConvertEntityToDomain(null); + assertNull(carroConverter); + } + + +} diff --git a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java new file mode 100644 index 0000000..29df6dd --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java @@ -0,0 +1,77 @@ +package br.com.grupomult.flows.carro; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + +import org.junit.Before; +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.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.repositories.CarroRepository; +import br.com.grupomult.utils.CarroDomainEntityUtil; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class InserirCarrosRealTest { + + @Autowired + private InsertCarrosReal insertCarrosReal; + + @Autowired + private CarroRepository carroRepository; + + @MockBean + private Carro domain; + + @Before + public void setUp() throws Exception { + domain = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + when(carroRepository.save(any(br.com.grupomult.entities.Carro.class))).thenReturn(CarroDomainEntityUtil.criarEntityCarro(TipoCarroEnum.PASSEIO)); + when(insertCarrosReal.execute(domain)).thenReturn( createResponseEntityResponseGetCarrosById() ); + } + + @Test + public void testValidateWithCarroFillSuccess() { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = insertCarrosReal.execute(carroDadosValidos); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + Carro carro = body.getCarro(); + assertNotNull(carro); + } + + @Test() + public void testValidateWithCarroNullHttpBadRequestException() { + ResponseEntity response = insertCarrosReal.execute(null); + assertNotNull(response); + } + + @Test() + public void testValidateWithCarroFaltandoDadosHttpBadRequestException() { + ResponseEntity response = insertCarrosReal.execute(new Carro()); + assertNotNull(response); + } + + private ResponseEntity createResponseEntityResponseGetCarrosById() { + ResponseGetCarrosById response = new ResponseGetCarrosById(); + response.setCarro(domain); + return ResponseEntity.ok(response); + } + +} diff --git a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java new file mode 100644 index 0000000..d629886 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java @@ -0,0 +1,67 @@ +package br.com.grupomult.flows.carro; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; + +import org.junit.Before; +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.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.exceptions.HttpBadRequestException; +import br.com.grupomult.utils.CarroDomainEntityUtil; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class InserirCarrosValidateTest { + + @Autowired + private InsertCarrosValidate insertCarrosValidate; + + @MockBean + private InsertCarrosReal insertCarrosReal; + + @MockBean + private Carro domain; + + @Before + public void setUp() throws Exception { + domain = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + when(insertCarrosReal.execute(domain)).thenReturn( CarroDomainEntityUtil.createResponseEntityResponseGetCarrosById(domain) ); + } + + @Test + public void testValidateWithCarroFillSuccess() { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = insertCarrosValidate.execute(carroDadosValidos); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + Carro carro = body.getCarro(); + assertNotNull(carro); + } + + @Test(expected = HttpBadRequestException.class) + public void testValidateWithCarroNullHttpBadRequestException() { + insertCarrosValidate.execute(null); + } + + @Test(expected = HttpBadRequestException.class) + public void testValidateWithCarroFaltandoDadosHttpBadRequestException() { + insertCarrosValidate.execute(new Carro()); + } + +} diff --git a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java new file mode 100644 index 0000000..6dfc5a3 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java @@ -0,0 +1,67 @@ +package br.com.grupomult.flows.carro; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; +import static org.powermock.api.mockito.PowerMockito.mockStatic; + +import java.time.LocalDate; +import java.time.Month; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; +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 br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.converter.CarroConverter; +import br.com.grupomult.utils.CarroDomainEntityUtil; + +@RunWith(PowerMockRunner.class) +@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +@PrepareForTest({ CarroConverter.class, LocalDate.class }) +public class ListCarrosByIdConverterTest { + + private static final LocalDate MOCK_LOCAL_DATE_NOW = LocalDate.of(2016, Month.FEBRUARY, 9); + + private static final String CODIGO = "DRF1220"; + private static final String DATA_CRIACAO = "2015-02-09 12:00:00"; + private static final String DATA_ATUALIZACAO = "2018-02-09 13:00:00"; + private static final TipoCarroEnum TIPO_CARRO = TipoCarroEnum.PASSEIO; + + @Autowired + private ListCarrosByIdConverter flow; + + @Before + public void setUp() throws Exception { + mockStatic(LocalDate.class); + when(LocalDate.now()).thenReturn(MOCK_LOCAL_DATE_NOW); + } + + @Test + public void testConvertSuccess() { + ResponseEntity response = flow.execute(CarroDomainEntityUtil.createEntityCarro(CODIGO,DATA_CRIACAO, DATA_ATUALIZACAO, TIPO_CARRO)); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + br.com.grupomult.api.carro.models.Carro carro = body.getCarro(); + assertNotNull(carro); + assertEquals(CODIGO, carro.getCodigo()); + assertEquals(DATA_CRIACAO, carro.getDataCriacao()); + assertEquals(TIPO_CARRO, carro.getTipoCarro()); + } + +} diff --git a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java new file mode 100644 index 0000000..1d29713 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java @@ -0,0 +1,64 @@ +package br.com.grupomult.flows.carro; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.when; + +import java.util.Random; + +import org.junit.Before; +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.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.repositories.CarroRepository; +import br.com.grupomult.utils.CarroDomainEntityUtil; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class ListCarrosByIdLoadTest { + + @Autowired + private ListCarrosByIdLoad flow; + + @Autowired + private CarroRepository repository; + + @MockBean + private ListCarrosByIdLoadValidate validate; + + @MockBean + private Carro entity; + + @MockBean + private br.com.grupomult.api.carro.models.Carro domain; + + @Before + public void setUp() throws Exception { + when(repository.findOne(anyInt())).thenReturn(entity); + when(validate.execute(entity)).thenReturn(CarroDomainEntityUtil.createResponseEntityResponseGetCarrosById(domain)); + } + + @Test + public void testLoadSuccess() { + ResponseEntity response = flow.execute(new Random().nextInt()); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + br.com.grupomult.api.carro.models.Carro carro = body.getCarro(); + assertNotNull(carro); + } + +} diff --git a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java new file mode 100644 index 0000000..312b141 --- /dev/null +++ b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java @@ -0,0 +1,62 @@ +package br.com.grupomult.flows.carro; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.when; + +import org.junit.Before; +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.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.exceptions.HttpNotFoundException; +import br.com.grupomult.utils.CarroDomainEntityUtil; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class ListCarrosByIdLoadValidateTest { + + @Autowired + private ListCarrosByIdLoadValidate flow; + + @MockBean + private ListCarrosByIdConverter converter; + + @MockBean + private Carro entity; + + @MockBean + private br.com.grupomult.api.carro.models.Carro domain; + + @Before + public void setUp() throws Exception { + when(converter.execute(entity)).thenReturn(CarroDomainEntityUtil.createResponseEntityResponseGetCarrosById(domain)); + } + + @Test + public void testValidateWithCarroFillSuccess() { + ResponseEntity response = flow.execute(entity); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + br.com.grupomult.api.carro.models.Carro carro = body.getCarro(); + assertNotNull(carro); + } + + @Test(expected = HttpNotFoundException.class) + public void testValidateWithCarroNullExpectedHttpNotFoundException() { + flow.execute(null); + } + +} diff --git a/src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java b/src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java new file mode 100644 index 0000000..aaaebc7 --- /dev/null +++ b/src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java @@ -0,0 +1,65 @@ +package br.com.grupomult.utils; + +import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE_HOUR; +import static br.com.grupomult.utils.DateUtils.dateToString; + +import java.util.Date; + +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.TipoCarro; + +public class CarroDomainEntityUtil { + + public static Carro criarDomainCarro(TipoCarroEnum tipoCarroEnum) { + return criarDomainCarro(tipoCarroEnum, new Date(), new Date()); + } + + public static br.com.grupomult.entities.Carro criarEntityCarro(TipoCarroEnum tipoCarroEnum) { + return criarEntityCarro(tipoCarroEnum, new Date(), new Date()); + } + + public static Carro criarDomainCarro(TipoCarroEnum tipoCarroEnum, Date dataCriacao, Date dataAtualizacao) { + Carro carro = new Carro(); + carro.setCodigo("PLR4532"); + carro.setDataAtualizacao(dateToString(dataAtualizacao, ISO8601_COMPLETE_DATE_HOUR)); + carro.setDataCriacao(dateToString(dataCriacao, ISO8601_COMPLETE_DATE_HOUR)); + carro.setDescricao("Hyunday i30"); + carro.setTipoCarro(tipoCarroEnum); + return carro; + } + + public static br.com.grupomult.entities.Carro criarEntityCarro(TipoCarroEnum tipoCarroEnum, Date dataCriacao, Date dataAtualizacao) { + br.com.grupomult.entities.Carro carro = br.com.grupomult.entities.Carro.builder().codigo("PLR4532") + .dataAtualizacao(dataAtualizacao) + .dataCriacao(dataCriacao) + .descricao("Hyunday i30") + .tipoCarro( criarTipoCarro(tipoCarroEnum)).build(); + return carro; + } + + public static br.com.grupomult.entities.Carro createEntityCarro(String codigo, String dataCriacao, String dataAtualizacao, TipoCarroEnum tipoCarro) { + return br.com.grupomult.entities.Carro.builder() + .codigo(codigo) + .dataCriacao(DateUtils.stringToDate(dataCriacao, DateUtils.ISO8601_COMPLETE_DATE_HOUR)) + .dataAtualizacao(DateUtils.stringToDate(dataAtualizacao, DateUtils.ISO8601_COMPLETE_DATE_HOUR)) + .tipoCarro(TipoCarro.builder().code(tipoCarro).build()).build(); + } + + + public static TipoCarro criarTipoCarro(TipoCarroEnum tipoCarroEnum) { + TipoCarro tipoCarro = TipoCarro.builder().id(tipoCarroEnum.ordinal()+1).code(tipoCarroEnum).build(); + return tipoCarro; + } + + public static ResponseEntity createResponseEntityResponseGetCarrosById(Carro domain) { + ResponseGetCarrosById response = new ResponseGetCarrosById(); + response.setCarro(domain); + return ResponseEntity.ok(response); + } + + +} From a15a629f9032f6f4369295954e139f07d689300a Mon Sep 17 00:00:00 2001 From: Urbano Botrel Menegato Date: Sat, 29 Dec 2018 01:12:07 -0200 Subject: [PATCH 2/5] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20da=20funcionalida?= =?UTF-8?q?de=20de=20cadastro=20de=20carros=20-=20Corrigindo=20o=20pom.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 352 ++++++++++-------- .../controllers/CarrosApiControllerTest.java | 253 ++++++------- .../configuration/TestConfiguration.java | 38 +- 3 files changed, 346 insertions(+), 297 deletions(-) diff --git a/pom.xml b/pom.xml index 3169308..9b1a475 100644 --- a/pom.xml +++ b/pom.xml @@ -1,153 +1,201 @@ - - 4.0.0 - - - org.springframework.boot - spring-boot-starter-parent - 1.5.18.RELEASE - - - - br.com.grupomult - grupomult-api - 0.0.1-SNAPSHOT - Implementação de referência - Esta aplicação é uma implementação de referência para auxiliar na avaliação técnica de candidatos. - - - UTF-8 - 1.8 - 1.8 - 1.8 - 1.5.13 - 1.7.0 - 2.3.1 - - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-validation - - - org.springframework.boot - spring-boot-starter-web - - - - javax.servlet - javax.servlet-api - provided - - - - io.swagger - swagger-annotations - ${swagger.annotations.version} - - - - com.h2database - h2 - runtime - - - - org.projectlombok - lombok - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.powermock - powermock-core - ${powermock.version} - test - - - org.powermock - powermock-api-mockito - ${powermock.version} - test - - - org.powermock - powermock-module-junit4 - ${powermock.version} - test - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-source - generate-sources - - add-source - - - - ${project.build.directory}/generated/swagger/src/main/java - - - - - - - io.swagger - swagger-codegen-maven-plugin - ${swagger.codegen.maven.plugin.version} - - - api-generate-sources-animal - generate-sources - - generate - - - ${project.basedir}/src/main/resources/swagger/api-animal.yaml - spring - false - false - - java8 - true - true - - ${project.build.directory}/generated/swagger - br.com.grupomult.api.animal.models - br.com.grupomult.api.animal.controllers - false - - - - - - - + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 1.5.18.RELEASE + + + + br.com.grupomult + grupomult-api + 0.0.1-SNAPSHOT + Implementação de referência + Esta aplicação é uma implementação de referência para auxiliar na avaliação técnica de candidatos. + + + UTF-8 + 1.8 + 1.8 + 1.8 + 1.5.13 + 1.7.0 + 2.3.1 + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-web + + + + javax.servlet + javax.servlet-api + provided + + + + io.swagger + swagger-annotations + ${swagger.annotations.version} + + + + com.h2database + h2 + runtime + + + + org.projectlombok + lombok + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.powermock + powermock-core + ${powermock.version} + test + + + org.powermock + powermock-api-mockito + ${powermock.version} + test + + + org.powermock + powermock-module-junit4 + ${powermock.version} + test + + + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.apache.maven.plugins + maven-antrun-plugin + [1.8,) + + run + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.codehaus.mojo + build-helper-maven-plugin + + + add-source + generate-sources + + add-source + + + + ${project.build.directory}/generated/swagger/src/main/java + + + + + + + io.swagger + swagger-codegen-maven-plugin + ${swagger.codegen.maven.plugin.version} + + + api-generate-sources-animal + generate-sources + + generate + + + ${project.basedir}/src/main/resources/swagger/api-animal.yaml + spring + false + false + + java8 + true + true + + ${project.build.directory}/generated/swagger + br.com.grupomult.api.animal.models + br.com.grupomult.api.animal.controllers + false + + + + api-generate-sources-carro + generate-sources + + generate + + + ${project.basedir}/src/main/resources/swagger/api-carro.yaml + spring + false + false + + java8 + true + true + + ${project.build.directory}/generated/swagger + br.com.grupomult.api.carro.models + br.com.grupomult.api.carro.controllers + false + + + + + + + \ No newline at end of file diff --git a/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java index f1c1cfb..d090118 100644 --- a/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java +++ b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java @@ -1,126 +1,127 @@ -package br.com.grupomult.api.carro.controllers; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.EnableAspectJAutoProxy; -import org.springframework.context.annotation.PropertySource; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import br.com.grupomult.api.carro.models.Carro; -import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; -import br.com.grupomult.api.carro.models.ResponseGetCarros; -import br.com.grupomult.api.carro.models.ResponseGetCarrosById; -import br.com.grupomult.utils.CarroDomainEntityUtil; - - -@TestPropertySource(locations = "classpath:application.properties") -@Configuration -@EnableAutoConfiguration -@EntityScan("br.com.grupomult.entities") -@EnableJpaRepositories("br.com.grupomult.repositories") -@ComponentScan({"br.com.grupomult"}) -@EnableAspectJAutoProxy -@PropertySource("classpath:application.properties") -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) -@RunWith(SpringJUnit4ClassRunner.class) -@Ignore -public class CarrosApiControllerTest { - - @Autowired - private CarrosApiController carrosApiController; - - private Carro carroDadosValidosInserido; - - @Before - public void setUp() throws Exception { - Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); - ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); - assertNotNull(response); - carroDadosValidosInserido = response.getBody().getCarro(); - - Carro carroDadosValido2 = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.UTILITARIO); - response = carrosApiController.adicionarCarro(carroDadosValido2); - assertNotNull(response); - } - - @Test - public void testInsertSuccess() { - Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); - ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); - assertNotNull(response); - assertEquals(HttpStatus.OK, response.getStatusCode()); - - ResponseGetCarrosById body = response.getBody(); - assertNotNull(body); - - Carro carro = body.getCarro(); - assertNotNull(carro); - } - - @Test - public void testUpdateSuccess() { - Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); - ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); - assertNotNull(response); - assertEquals(HttpStatus.OK, response.getStatusCode()); - - ResponseGetCarrosById body = response.getBody(); - assertNotNull(body); - - Carro carroInserido = body.getCarro(); - assertNotNull(carroInserido); - - String descricaoAntes = carroInserido.getDescricao(); - carroInserido.setDescricao(descricaoAntes + "Teste"); - ResponseEntity responseUpdate = carrosApiController.atualizarCarro(carroInserido); - Carro carroAtualizado = responseUpdate.getBody().getCarro(); - - assertNotEquals(descricaoAntes, carroAtualizado.getDescricao()); - } - - - @Test - public void testConsultarSuccess() { - ResponseEntity responseAntes = carrosApiController.list(); - int qtdCarrrosAntes = responseAntes.getBody().getCarros().size(); - assertTrue(qtdCarrrosAntes > 0); - } - - @Test - public void testDeletarSuccess() { - ResponseEntity responseAntes = carrosApiController.list(); - int qtdCarrrosAntes = responseAntes.getBody().getCarros().size(); - - carrosApiController.deletarCarro(carroDadosValidosInserido.getId()); - - ResponseEntity responseDepois = carrosApiController.list(); - int qtdCarrrosDepois = responseDepois.getBody().getCarros().size(); - - assertTrue(qtdCarrrosAntes > qtdCarrrosDepois); - } - - @Test - public void testDetailSuccess() { - ResponseEntity responseAntes = carrosApiController.detail(carroDadosValidosInserido.getId()); - Integer idCarroConsultado = responseAntes.getBody().getCarro().getId(); - assertEquals(idCarroConsultado, carroDadosValidosInserido.getId()); - } -} +package br.com.grupomult.api.carro.controllers; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.api.carro.controllers.CarrosApiController; +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.api.carro.models.ResponseGetCarros; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.utils.CarroDomainEntityUtil; + + +@TestPropertySource(locations = "classpath:application.properties") +@Configuration +@EnableAutoConfiguration +@EntityScan("br.com.grupomult.entities") +@EnableJpaRepositories("br.com.grupomult.repositories") +@ComponentScan({"br.com.grupomult"}) +@EnableAspectJAutoProxy +@PropertySource("classpath:application.properties") +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) +@RunWith(SpringJUnit4ClassRunner.class) +@Ignore +public class CarrosApiControllerTest { + + @Autowired + private CarrosApiController carrosApiController; + + private Carro carroDadosValidosInserido; + + @Before + public void setUp() throws Exception { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); + assertNotNull(response); + carroDadosValidosInserido = response.getBody().getCarro(); + + Carro carroDadosValido2 = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.UTILITARIO); + response = carrosApiController.adicionarCarro(carroDadosValido2); + assertNotNull(response); + } + + @Test + public void testInsertSuccess() { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + Carro carro = body.getCarro(); + assertNotNull(carro); + } + + @Test + public void testUpdateSuccess() { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + Carro carroInserido = body.getCarro(); + assertNotNull(carroInserido); + + String descricaoAntes = carroInserido.getDescricao(); + carroInserido.setDescricao(descricaoAntes + "Teste"); + ResponseEntity responseUpdate = carrosApiController.atualizarCarro(carroInserido); + Carro carroAtualizado = responseUpdate.getBody().getCarro(); + + assertNotEquals(descricaoAntes, carroAtualizado.getDescricao()); + } + + + @Test + public void testConsultarSuccess() { + ResponseEntity responseAntes = carrosApiController.list(); + int qtdCarrrosAntes = responseAntes.getBody().getCarros().size(); + assertTrue(qtdCarrrosAntes > 0); + } + + @Test + public void testDeletarSuccess() { + ResponseEntity responseAntes = carrosApiController.list(); + int qtdCarrrosAntes = responseAntes.getBody().getCarros().size(); + + carrosApiController.deletarCarro(carroDadosValidosInserido.getId()); + + ResponseEntity responseDepois = carrosApiController.list(); + int qtdCarrrosDepois = responseDepois.getBody().getCarros().size(); + + assertTrue(qtdCarrrosAntes > qtdCarrrosDepois); + } + + @Test + public void testDetailSuccess() { + ResponseEntity responseAntes = carrosApiController.detail(carroDadosValidosInserido.getId()); + Integer idCarroConsultado = responseAntes.getBody().getCarro().getId(); + assertEquals(idCarroConsultado, carroDadosValidosInserido.getId()); + } +} diff --git a/src/test/java/br/com/grupomult/configuration/TestConfiguration.java b/src/test/java/br/com/grupomult/configuration/TestConfiguration.java index ac2d355..803adec 100644 --- a/src/test/java/br/com/grupomult/configuration/TestConfiguration.java +++ b/src/test/java/br/com/grupomult/configuration/TestConfiguration.java @@ -1,20 +1,20 @@ -package br.com.grupomult.configuration; - -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.ImportResource; - -import br.com.grupomult.repositories.AnimalRepository; -import br.com.grupomult.repositories.CarroRepository; - -@Configuration -@ImportResource("classpath:application-context-test.xml") -public class TestConfiguration { - - @MockBean - private AnimalRepository animalRepository; - - @MockBean - private CarroRepository carroRepository; - +package br.com.grupomult.configuration; + +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; + +import br.com.grupomult.repositories.AnimalRepository; +import br.com.grupomult.repositories.CarroRepository; + +@Configuration +@ImportResource("classpath:application-context-test.xml") +public class TestConfiguration { + + @MockBean + private AnimalRepository animalRepository; + + @MockBean + private CarroRepository carroRepository; + } \ No newline at end of file From 552733c3df218315bf0e2621371b6178e9b03237 Mon Sep 17 00:00:00 2001 From: Urbano Botrel Menegato Date: Sat, 29 Dec 2018 10:53:06 -0200 Subject: [PATCH 3/5] Corrigindo o mapeamento da chave composta --- .../controllers/CarrosApiController.java | 4 +- .../configurations/LoadDatabase.java | 33 ++++++++----- .../grupomult/converter/CarroConverter.java | 29 ++++++------ .../br/com/grupomult/entities/Animal.java | 5 +- .../java/br/com/grupomult/entities/Carro.java | 37 +++++++++++---- .../br/com/grupomult/entities/CarroPK.java | 46 +++++++++++++++++++ .../br/com/grupomult/entities/Species.java | 6 ++- .../br/com/grupomult/entities/TipoCarro.java | 6 ++- .../flows/carro/DeleteCarrosById.java | 2 +- .../flows/carro/ListCarrosByIdLoad.java | 2 +- .../flows/carro/ListCarrosByIdValidate.java | 2 +- .../repositories/CarroRepository.java | 2 +- src/main/resources/swagger/api-carro.yaml | 3 ++ .../controllers/CarrosApiControllerTest.java | 2 +- .../flows/carro/DeleteCarrosByIdTest.java | 2 +- .../flows/carro/ListCarrosByIdLoadTest.java | 6 +-- .../utils/CarroDomainEntityUtil.java | 6 ++- 17 files changed, 142 insertions(+), 51 deletions(-) create mode 100644 src/main/java/br/com/grupomult/entities/CarroPK.java diff --git a/src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java b/src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java index 643546b..2be31b2 100644 --- a/src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java +++ b/src/main/java/br/com/grupomult/api/carro/controllers/CarrosApiController.java @@ -39,7 +39,7 @@ public class CarrosApiController implements CarrosApi { private ListCarrosByIdValidate listCarrosByIdFlow; @Override - public ResponseEntity detail( @PathVariable(value = GET_LIST_CARROS_BY_ID_PATH_ID, required = true) Integer id) { + public ResponseEntity detail( @PathVariable(value = GET_LIST_CARROS_BY_ID_PATH_ID, required = true) Long id) { return listCarrosByIdFlow.execute(id); } @@ -59,7 +59,7 @@ public ResponseEntity atualizarCarro(@ApiParam(value = "O } @Override - public ResponseEntity deletarCarro( @PathVariable(value = GET_LIST_CARROS_BY_ID_PATH_ID, required = true) Integer id) { + public ResponseEntity deletarCarro( @PathVariable(value = GET_LIST_CARROS_BY_ID_PATH_ID, required = true) Long id) { return deleteCarrosById.execute(id); } diff --git a/src/main/java/br/com/grupomult/configurations/LoadDatabase.java b/src/main/java/br/com/grupomult/configurations/LoadDatabase.java index d49cf86..c71c97d 100644 --- a/src/main/java/br/com/grupomult/configurations/LoadDatabase.java +++ b/src/main/java/br/com/grupomult/configurations/LoadDatabase.java @@ -12,24 +12,30 @@ import org.springframework.context.annotation.Configuration; import br.com.grupomult.api.animal.models.Animal.SpeciesEnum; -import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; import br.com.grupomult.entities.Animal; import br.com.grupomult.entities.Carro; +import br.com.grupomult.entities.CarroPK; import br.com.grupomult.entities.Species; import br.com.grupomult.entities.TipoCarro; import br.com.grupomult.repositories.AnimalRepository; import br.com.grupomult.repositories.CarroRepository; +import br.com.grupomult.repositories.TipoCarroRepository; import lombok.extern.slf4j.Slf4j; @Configuration @Slf4j public class LoadDatabase implements CommandLineRunner { + private static final String PRELOADING = "Preloading "; + @Autowired private AnimalRepository animalRepository; @Autowired private CarroRepository carroRepository; + + @Autowired + private TipoCarroRepository tipoCarroRepository; @Override public void run(String... args) throws Exception { @@ -39,18 +45,22 @@ public void run(String... args) throws Exception { public void initDatabaseAnimal() { log.info( - "Preloading " + animalRepository.save(createAnimal("Janis", "2015-02-09 11:00:00", CANINE)).toString()); + PRELOADING + animalRepository.save(createAnimal("Janis", "2015-02-09 11:00:00", CANINE)).toString()); log.info( - "Preloading " + animalRepository.save(createAnimal("Rocky", "2014-10-15 11:00:00", FELINE)).toString()); + PRELOADING + animalRepository.save(createAnimal("Rocky", "2014-10-15 11:00:00", FELINE)).toString()); } public void initDatabaseCarro() { - log.info("Preloading " + carroRepository - .save(createCarro("PLR1235", "Hiunday i30", "2017-01-01 11:00:00", "2017-02-01 11:00:00", PASSEIO)) - .toString()); - log.info("Preloading " + carroRepository - .save(createCarro("PLR1235", "Hiunday ix35", "2018-01-01 11:00:00", "2018-02-01 11:00:00", UTILITARIO)) - .toString()); + TipoCarro tipoCarroPasseio = tipoCarroRepository.save(TipoCarro.builder().code(PASSEIO).build()); + TipoCarro tipoCarroUtilitario = tipoCarroRepository.save(TipoCarro.builder().code(UTILITARIO).build()); + + Carro carroPasseio = createCarro("PLR1235", "Hiunday i30", "2017-01-01 11:00:00", "2017-02-01 11:00:00", tipoCarroPasseio); + carroPasseio = carroRepository.save(carroPasseio); + log.info(PRELOADING + carroPasseio.toString()); + + Carro carroUtilitario = createCarro("PLR1235", "Hiunday ix35", "2018-01-01 11:00:00", "2018-02-01 11:00:00", tipoCarroUtilitario); + carroUtilitario = carroRepository.save(carroUtilitario); + log.info(PRELOADING + carroUtilitario.toString()); } private static Animal createAnimal(String name, String dob, SpeciesEnum species) { @@ -59,11 +69,12 @@ private static Animal createAnimal(String name, String dob, SpeciesEnum species) } private static Carro createCarro(String codigo, String descricao, String dataCriacao, String dataAtualizacao, - TipoCarroEnum tipoCarro) { + TipoCarro tipoCarro) { return Carro.builder().codigo(codigo).descricao(descricao) .dataCriacao(stringToDate(dataCriacao, ISO8601_COMPLETE_DATE_HOUR)) .dataAtualizacao(stringToDate(dataAtualizacao, ISO8601_COMPLETE_DATE_HOUR)) - .tipoCarro(TipoCarro.builder().code(tipoCarro).build()).build(); + .tipoCarro(tipoCarro) + .carroPK(new CarroPK(tipoCarro)).build(); } } \ No newline at end of file diff --git a/src/main/java/br/com/grupomult/converter/CarroConverter.java b/src/main/java/br/com/grupomult/converter/CarroConverter.java index e63aaec..1fdeaff 100644 --- a/src/main/java/br/com/grupomult/converter/CarroConverter.java +++ b/src/main/java/br/com/grupomult/converter/CarroConverter.java @@ -6,15 +6,16 @@ import br.com.grupomult.api.carro.models.Carro; import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.entities.CarroPK; import br.com.grupomult.entities.TipoCarro; -public class CarroConverter { +public abstract class CarroConverter { - protected final static Carro convertEntityToDomain(br.com.grupomult.entities.Carro entity) { - if(entity == null){ + protected static final Carro convertEntityToDomain(br.com.grupomult.entities.Carro entity) { + if (entity == null) { return null; } - + Carro domain = new Carro(); domain.setId(entity.getId()); domain.setCodigo(entity.getCodigo()); @@ -26,11 +27,11 @@ protected final static Carro convertEntityToDomain(br.com.grupomult.entities.Car return domain; } - protected final static br.com.grupomult.entities.Carro convertDomainToEntity(Carro domain) { - if(domain == null){ + protected static final br.com.grupomult.entities.Carro convertDomainToEntity(Carro domain) { + if (domain == null) { return null; } - + br.com.grupomult.entities.Carro entity = new br.com.grupomult.entities.Carro(); entity.setId(domain.getId()); entity.setCodigo(domain.getCodigo()); @@ -38,16 +39,16 @@ protected final static br.com.grupomult.entities.Carro convertDomainToEntity(Car entity.setDataCriacao(stringToDate(domain.getDataCriacao(), ISO8601_COMPLETE_DATE_HOUR)); entity.setDataAtualizacao(stringToDate(domain.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); entity.setTipoCarro(criarTipoCarro(domain.getTipoCarro())); - + entity.setCarroPK(new CarroPK(domain.getId(), criarTipoCarro(domain.getTipoCarro()))); + return entity; } - + private static TipoCarro criarTipoCarro(TipoCarroEnum tipoCarroEnum) { - if(tipoCarroEnum == null){ + if (tipoCarroEnum == null) { return null; } - TipoCarro tipoCarro = TipoCarro.builder().code(tipoCarroEnum).build(); - return tipoCarro; - } - + return TipoCarro.builder().code(tipoCarroEnum).build(); + } + } diff --git a/src/main/java/br/com/grupomult/entities/Animal.java b/src/main/java/br/com/grupomult/entities/Animal.java index 7dc837d..f3f3347 100644 --- a/src/main/java/br/com/grupomult/entities/Animal.java +++ b/src/main/java/br/com/grupomult/entities/Animal.java @@ -1,5 +1,6 @@ package br.com.grupomult.entities; +import java.io.Serializable; import java.util.Date; import javax.persistence.CascadeType; @@ -24,7 +25,9 @@ @NoArgsConstructor @AllArgsConstructor @Entity -public class Animal { +public class Animal implements Serializable { + + private static final long serialVersionUID = 4944015990569194437L; @Id @GeneratedValue diff --git a/src/main/java/br/com/grupomult/entities/Carro.java b/src/main/java/br/com/grupomult/entities/Carro.java index 2ca22b5..3b0b1d9 100644 --- a/src/main/java/br/com/grupomult/entities/Carro.java +++ b/src/main/java/br/com/grupomult/entities/Carro.java @@ -1,14 +1,13 @@ package br.com.grupomult.entities; +import java.io.Serializable; import java.util.Date; -import javax.persistence.CascadeType; +import javax.persistence.EmbeddedId; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import javax.persistence.Transient; import lombok.AllArgsConstructor; import lombok.Builder; @@ -24,11 +23,18 @@ @NoArgsConstructor @AllArgsConstructor @Entity -public class Carro { +public class Carro implements Serializable { - @Id - @GeneratedValue - private Integer id; + private static final long serialVersionUID = -2756126323782207245L; + + @EmbeddedId + private CarroPK carroPK; + + @Transient + private Long id; + + @Transient + private TipoCarro tipoCarro; private String codigo; @@ -40,7 +46,18 @@ public class Carro { @Temporal(TemporalType.TIMESTAMP) private Date dataAtualizacao; - @ManyToOne(cascade = CascadeType.ALL) - private TipoCarro tipoCarro; + public Long getId(){ + if(this.getCarroPK() == null){ + return null; + } + return this.getCarroPK().getId(); + } + + public TipoCarro getTipoCarro(){ + if(this.getCarroPK() == null){ + return null; + } + return this.getCarroPK().getTipoCarro(); + } } diff --git a/src/main/java/br/com/grupomult/entities/CarroPK.java b/src/main/java/br/com/grupomult/entities/CarroPK.java new file mode 100644 index 0000000..b26422e --- /dev/null +++ b/src/main/java/br/com/grupomult/entities/CarroPK.java @@ -0,0 +1,46 @@ +package br.com.grupomult.entities; + +import java.io.Serializable; +import java.util.Date; + +import javax.persistence.Embeddable; +import javax.persistence.ManyToOne; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@Builder +@ToString +@Embeddable +public class CarroPK implements Serializable { + + private static final long serialVersionUID = -6909015604206875054L; + + private Long id; + + @ManyToOne + private TipoCarro tipoCarro; + + public CarroPK(){ + this.id = generateId(); + } + + public CarroPK(TipoCarro tipoCarro) { + this.id = generateId() ; + this.tipoCarro = tipoCarro; + } + + public CarroPK(Long id, TipoCarro tipoCarro){ + this.id = id; + this.tipoCarro = tipoCarro; + } + + private Long generateId() { + return new Date().getTime(); + } + +} diff --git a/src/main/java/br/com/grupomult/entities/Species.java b/src/main/java/br/com/grupomult/entities/Species.java index 8793a11..c756ea5 100644 --- a/src/main/java/br/com/grupomult/entities/Species.java +++ b/src/main/java/br/com/grupomult/entities/Species.java @@ -1,5 +1,7 @@ package br.com.grupomult.entities; +import java.io.Serializable; + import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; @@ -21,7 +23,9 @@ @NoArgsConstructor @AllArgsConstructor @Entity -public class Species { +public class Species implements Serializable { + + private static final long serialVersionUID = 5217289358964051431L; @Id @GeneratedValue diff --git a/src/main/java/br/com/grupomult/entities/TipoCarro.java b/src/main/java/br/com/grupomult/entities/TipoCarro.java index 9c93fd0..dff3272 100644 --- a/src/main/java/br/com/grupomult/entities/TipoCarro.java +++ b/src/main/java/br/com/grupomult/entities/TipoCarro.java @@ -1,5 +1,7 @@ package br.com.grupomult.entities; +import java.io.Serializable; + import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; @@ -21,7 +23,9 @@ @NoArgsConstructor @AllArgsConstructor @Entity -public class TipoCarro { +public class TipoCarro implements Serializable { + + private static final long serialVersionUID = -3644009450956415689L; @Id @GeneratedValue diff --git a/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java b/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java index a02f524..a58f2db 100644 --- a/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java +++ b/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java @@ -11,7 +11,7 @@ public class DeleteCarrosById { @Autowired private CarroRepository repository; - public ResponseEntity execute(Integer id) { + public ResponseEntity execute(Long id) { try{ repository.delete(id); return new ResponseEntity( HttpStatus.OK ); diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java index 14e43ce..540cbbe 100644 --- a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java @@ -14,7 +14,7 @@ public class ListCarrosByIdLoad { @Autowired private ListCarrosByIdLoadValidate validate; - public ResponseEntity execute(Integer id) { + public ResponseEntity execute(Long id) { return validate.execute(repository.findOne(id)); } diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java index 781e036..b989e16 100644 --- a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdValidate.java @@ -15,7 +15,7 @@ public class ListCarrosByIdValidate { @Autowired private ListCarrosByIdLoad load; - public ResponseEntity execute(Integer id) { + public ResponseEntity execute(Long id) { if (!Optional.ofNullable(id).isPresent() || id < 0) { throw new HttpBadRequestException(ERROR_GET_CARROS_BY_ID_INVALID_ID); } diff --git a/src/main/java/br/com/grupomult/repositories/CarroRepository.java b/src/main/java/br/com/grupomult/repositories/CarroRepository.java index bef82ad..b5a7928 100644 --- a/src/main/java/br/com/grupomult/repositories/CarroRepository.java +++ b/src/main/java/br/com/grupomult/repositories/CarroRepository.java @@ -6,6 +6,6 @@ import br.com.grupomult.entities.Carro; @Repository -public interface CarroRepository extends CrudRepository { +public interface CarroRepository extends CrudRepository { } diff --git a/src/main/resources/swagger/api-carro.yaml b/src/main/resources/swagger/api-carro.yaml index b0606ee..e201d4b 100644 --- a/src/main/resources/swagger/api-carro.yaml +++ b/src/main/resources/swagger/api-carro.yaml @@ -101,6 +101,7 @@ paths: - name: id in: path type: integer + format: int64 required: true responses: "200": @@ -126,6 +127,7 @@ paths: description: O ID do carro a ser deletado required: true type: integer + format: int64 responses: "404": description: Nenhum carro encontrado correspondente ao ID informado @@ -158,6 +160,7 @@ definitions: properties: id: type: integer + format: int64 codigo: type: string descricao: diff --git a/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java index d090118..f374a82 100644 --- a/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java +++ b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java @@ -121,7 +121,7 @@ public void testDeletarSuccess() { @Test public void testDetailSuccess() { ResponseEntity responseAntes = carrosApiController.detail(carroDadosValidosInserido.getId()); - Integer idCarroConsultado = responseAntes.getBody().getCarro().getId(); + Long idCarroConsultado = responseAntes.getBody().getCarro().getId(); assertEquals(idCarroConsultado, carroDadosValidosInserido.getId()); } } diff --git a/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java b/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java index 99b02d1..c601262 100644 --- a/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java @@ -24,7 +24,7 @@ public void setUp() throws Exception { @Test public void testDeleteSuccess() { - deleteCarrosById.execute(new Random().nextInt()); + deleteCarrosById.execute(new Random().nextLong()); } } diff --git a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java index 1d29713..07ee55d 100644 --- a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java @@ -2,7 +2,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyLong; import static org.mockito.Mockito.when; import java.util.Random; @@ -44,13 +44,13 @@ public class ListCarrosByIdLoadTest { @Before public void setUp() throws Exception { - when(repository.findOne(anyInt())).thenReturn(entity); + when(repository.findOne(anyLong())).thenReturn(entity); when(validate.execute(entity)).thenReturn(CarroDomainEntityUtil.createResponseEntityResponseGetCarrosById(domain)); } @Test public void testLoadSuccess() { - ResponseEntity response = flow.execute(new Random().nextInt()); + ResponseEntity response = flow.execute(new Random().nextLong()); assertNotNull(response); assertEquals(HttpStatus.OK, response.getStatusCode()); diff --git a/src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java b/src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java index aaaebc7..c8ec061 100644 --- a/src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java +++ b/src/test/java/br/com/grupomult/utils/CarroDomainEntityUtil.java @@ -2,6 +2,7 @@ import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE_HOUR; import static br.com.grupomult.utils.DateUtils.dateToString; +import static br.com.grupomult.utils.DateUtils.stringToDate; import java.util.Date; @@ -10,6 +11,7 @@ import br.com.grupomult.api.carro.models.Carro; import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.CarroPK; import br.com.grupomult.entities.TipoCarro; public class CarroDomainEntityUtil { @@ -37,7 +39,7 @@ public static br.com.grupomult.entities.Carro criarEntityCarro(TipoCarroEnum tip .dataAtualizacao(dataAtualizacao) .dataCriacao(dataCriacao) .descricao("Hyunday i30") - .tipoCarro( criarTipoCarro(tipoCarroEnum)).build(); + .carroPK(new CarroPK( criarTipoCarro(tipoCarroEnum))).build(); return carro; } @@ -46,7 +48,7 @@ public static br.com.grupomult.entities.Carro createEntityCarro(String codigo, S .codigo(codigo) .dataCriacao(DateUtils.stringToDate(dataCriacao, DateUtils.ISO8601_COMPLETE_DATE_HOUR)) .dataAtualizacao(DateUtils.stringToDate(dataAtualizacao, DateUtils.ISO8601_COMPLETE_DATE_HOUR)) - .tipoCarro(TipoCarro.builder().code(tipoCarro).build()).build(); + .carroPK(new CarroPK(TipoCarro.builder().code(tipoCarro).build())).build(); } From 13cdc840a6f427a7077fa186c512fb530d0bd10b Mon Sep 17 00:00:00 2001 From: Urbano Botrel Menegato Date: Sat, 29 Dec 2018 10:57:57 -0200 Subject: [PATCH 4/5] Corrigindo o mapeamento da chave composta --- .../grupomult/flows/carro/InserirCarrosConverterTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java index 2496ce3..447fb58 100644 --- a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosConverterTest.java @@ -47,7 +47,6 @@ public void testExecuteConvertDomainToEntity() { assertNotNull(carroConverter); assertEquals(carroDadosValidos.getCodigo(), carroConverter.getCodigo()); assertEquals(carroDadosValidos.getDescricao(), carroConverter.getDescricao()); - assertEquals(carroDadosValidos.getId(), carroConverter.getId()); assertEquals(carroDadosValidos.getTipoCarro().getCode(), carroConverter.getTipoCarro().getCode()); assertEquals(dateToString(carroDadosValidos.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR) , dateToString(carroConverter.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); @@ -63,7 +62,11 @@ public void testExecuteConvertEntityToDomain() { Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO, data, data); Carro carroConverter = insertCarrosConverter.executeConvertEntityToDomain(carroEntity); assertNotNull(carroConverter); - assertEquals(carroDadosValidos, carroConverter); + assertEquals(carroDadosValidos.getCodigo(), carroConverter.getCodigo()); + assertEquals(carroDadosValidos.getDescricao(), carroConverter.getDescricao()); + assertEquals(carroDadosValidos.getTipoCarro(), carroConverter.getTipoCarro()); + assertEquals(carroDadosValidos.getDataAtualizacao(), carroConverter.getDataAtualizacao()); + assertEquals(carroDadosValidos.getDataAtualizacao(), carroConverter.getDataAtualizacao()); } @Test() From eda2eaa40a514d8b601f3441aa78417cf3a160d0 Mon Sep 17 00:00:00 2001 From: Urbano Botrel Menegato Date: Sat, 29 Dec 2018 12:41:30 -0200 Subject: [PATCH 5/5] Melhoria nos testes automatizados --- .../grupomult/converter/CarroConverter.java | 108 ++++++------ .../flows/carro/DeleteCarrosById.java | 46 ++--- .../flows/carro/InsertCarrosReal.java | 70 ++++---- .../flows/carro/ListCarrosByIdLoad.java | 42 ++--- .../flows/carro/UpdateCarrosReal.java | 70 ++++---- .../repositories/CarroRepository.java | 28 ++-- src/main/resources/flow-definition.xml | 93 +++++------ .../controllers/CarrosApiControllerTest.java | 10 ++ .../FlowDefinitionCarroTest.java | 5 + .../flowdefinitions/FlowDefinitionTest.java | 5 + .../animal/ListAnimalsByIdConverterTest.java | 5 + .../flows/animal/ListAnimalsByIdLoadTest.java | 4 + .../ListAnimalsByIdLoadValidateTest.java | 4 + .../flows/carro/DeleteCarrosByIdTest.java | 5 + .../flows/carro/InserirCarrosRealTest.java | 157 +++++++++--------- .../carro/InserirCarrosValidateTest.java | 4 + .../carro/ListCarrosByIdConverterTest.java | 5 + .../flows/carro/ListCarrosByIdLoadTest.java | 7 +- .../carro/ListCarrosByIdLoadValidateTest.java | 4 + 19 files changed, 375 insertions(+), 297 deletions(-) diff --git a/src/main/java/br/com/grupomult/converter/CarroConverter.java b/src/main/java/br/com/grupomult/converter/CarroConverter.java index 1fdeaff..96e97c2 100644 --- a/src/main/java/br/com/grupomult/converter/CarroConverter.java +++ b/src/main/java/br/com/grupomult/converter/CarroConverter.java @@ -1,54 +1,54 @@ -package br.com.grupomult.converter; - -import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE_HOUR; -import static br.com.grupomult.utils.DateUtils.dateToString; -import static br.com.grupomult.utils.DateUtils.stringToDate; - -import br.com.grupomult.api.carro.models.Carro; -import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; -import br.com.grupomult.entities.CarroPK; -import br.com.grupomult.entities.TipoCarro; - -public abstract class CarroConverter { - - protected static final Carro convertEntityToDomain(br.com.grupomult.entities.Carro entity) { - if (entity == null) { - return null; - } - - Carro domain = new Carro(); - domain.setId(entity.getId()); - domain.setCodigo(entity.getCodigo()); - domain.setDescricao(entity.getDescricao()); - domain.setDataCriacao(dateToString(entity.getDataCriacao(), ISO8601_COMPLETE_DATE_HOUR)); - domain.setDataAtualizacao(dateToString(entity.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); - domain.setTipoCarro(entity.getTipoCarro().getCode()); - - return domain; - } - - protected static final br.com.grupomult.entities.Carro convertDomainToEntity(Carro domain) { - if (domain == null) { - return null; - } - - br.com.grupomult.entities.Carro entity = new br.com.grupomult.entities.Carro(); - entity.setId(domain.getId()); - entity.setCodigo(domain.getCodigo()); - entity.setDescricao(domain.getDescricao()); - entity.setDataCriacao(stringToDate(domain.getDataCriacao(), ISO8601_COMPLETE_DATE_HOUR)); - entity.setDataAtualizacao(stringToDate(domain.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); - entity.setTipoCarro(criarTipoCarro(domain.getTipoCarro())); - entity.setCarroPK(new CarroPK(domain.getId(), criarTipoCarro(domain.getTipoCarro()))); - - return entity; - } - - private static TipoCarro criarTipoCarro(TipoCarroEnum tipoCarroEnum) { - if (tipoCarroEnum == null) { - return null; - } - return TipoCarro.builder().code(tipoCarroEnum).build(); - } - -} +package br.com.grupomult.converter; + +import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE_HOUR; +import static br.com.grupomult.utils.DateUtils.dateToString; +import static br.com.grupomult.utils.DateUtils.stringToDate; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.entities.CarroPK; +import br.com.grupomult.entities.TipoCarro; + +public abstract class CarroConverter { + + protected static final Carro convertEntityToDomain(br.com.grupomult.entities.Carro entity) { + if (entity == null) { + return null; + } + + Carro domain = new Carro(); + domain.setId(entity.getId()); + domain.setCodigo(entity.getCodigo()); + domain.setDescricao(entity.getDescricao()); + domain.setDataCriacao(dateToString(entity.getDataCriacao(), ISO8601_COMPLETE_DATE_HOUR)); + domain.setDataAtualizacao(dateToString(entity.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); + domain.setTipoCarro(entity.getTipoCarro().getCode()); + + return domain; + } + + protected static final br.com.grupomult.entities.Carro convertDomainToEntity(Carro domain) { + if (domain == null || domain.getTipoCarro() == null) { + return null; + } + + br.com.grupomult.entities.Carro entity = new br.com.grupomult.entities.Carro(); + entity.setId(domain.getId()); + entity.setCodigo(domain.getCodigo()); + entity.setDescricao(domain.getDescricao()); + entity.setDataCriacao(stringToDate(domain.getDataCriacao(), ISO8601_COMPLETE_DATE_HOUR)); + entity.setDataAtualizacao(stringToDate(domain.getDataAtualizacao(), ISO8601_COMPLETE_DATE_HOUR)); + entity.setTipoCarro(criarTipoCarro(domain.getTipoCarro())); + entity.setCarroPK(new CarroPK(domain.getId(), criarTipoCarro(domain.getTipoCarro()))); + + return entity; + } + + private static TipoCarro criarTipoCarro(TipoCarroEnum tipoCarroEnum) { + if (tipoCarroEnum == null) { + return null; + } + return TipoCarro.builder().code(tipoCarroEnum).build(); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java b/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java index a58f2db..cdcd778 100644 --- a/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java +++ b/src/main/java/br/com/grupomult/flows/carro/DeleteCarrosById.java @@ -1,23 +1,23 @@ -package br.com.grupomult.flows.carro; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import br.com.grupomult.repositories.CarroRepository; - -public class DeleteCarrosById { - - @Autowired - private CarroRepository repository; - - public ResponseEntity execute(Long id) { - try{ - repository.delete(id); - return new ResponseEntity( HttpStatus.OK ); - }catch (Exception e) { - return new ResponseEntity( HttpStatus.NOT_FOUND ); - } - } - -} +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.repositories.CarroRepository; + +public class DeleteCarrosById { + + @Autowired + private CarroRepository repository; + + public ResponseEntity execute(Long id) { + try{ + repository.delete(repository.findById(id)); + return new ResponseEntity( HttpStatus.OK ); + }catch (Exception e) { + return new ResponseEntity( HttpStatus.NOT_FOUND ); + } + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java index 740d278..4c8ebf8 100644 --- a/src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java +++ b/src/main/java/br/com/grupomult/flows/carro/InsertCarrosReal.java @@ -1,31 +1,39 @@ -package br.com.grupomult.flows.carro; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; - -import br.com.grupomult.api.carro.models.ResponseGetCarrosById; -import br.com.grupomult.entities.Carro; -import br.com.grupomult.repositories.CarroRepository; - -public class InsertCarrosReal { - - @Autowired - private CarroRepository carroRepository; - - @Autowired - private InsertCarrosConverter insertCarrosConverter; - - @Autowired - private InsertCarrosLoadValidate insertCarrosLoadValidate; - - - public ResponseEntity execute(br.com.grupomult.api.carro.models.Carro carro) { - Carro executeEntity = insertCarrosConverter.executeConvertDomainToEntity(carro); - return insertCarrosLoadValidate.execute(salvarCarro(executeEntity)); - } - - - private Carro salvarCarro(Carro carroEntity) { - return carroRepository.save(carroEntity); - } -} +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.entities.CarroPK; +import br.com.grupomult.entities.TipoCarro; +import br.com.grupomult.repositories.CarroRepository; +import br.com.grupomult.repositories.TipoCarroRepository; + +public class InsertCarrosReal { + + @Autowired + private CarroRepository carroRepository; + + @Autowired + private TipoCarroRepository tipoCarroRepository; + + @Autowired + private InsertCarrosConverter insertCarrosConverter; + + @Autowired + private InsertCarrosLoadValidate insertCarrosLoadValidate; + + + public ResponseEntity execute(br.com.grupomult.api.carro.models.Carro carro) { + Carro carroEntity = insertCarrosConverter.executeConvertDomainToEntity(carro); + TipoCarro tipoCarro = tipoCarroRepository.findByCode(carroEntity.getTipoCarro().getCode()); + carroEntity.setCarroPK(new CarroPK(tipoCarro)); + return insertCarrosLoadValidate.execute(salvarCarro(carroEntity)); + } + + + private Carro salvarCarro(Carro carroEntity) { + return carroRepository.save(carroEntity); + } +} diff --git a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java index 540cbbe..367fa60 100644 --- a/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java +++ b/src/main/java/br/com/grupomult/flows/carro/ListCarrosByIdLoad.java @@ -1,21 +1,21 @@ -package br.com.grupomult.flows.carro; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; - -import br.com.grupomult.api.carro.models.ResponseGetCarrosById; -import br.com.grupomult.repositories.CarroRepository; - -public class ListCarrosByIdLoad { - - @Autowired - private CarroRepository repository; - - @Autowired - private ListCarrosByIdLoadValidate validate; - - public ResponseEntity execute(Long id) { - return validate.execute(repository.findOne(id)); - } - -} +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.repositories.CarroRepository; + +public class ListCarrosByIdLoad { + + @Autowired + private CarroRepository repository; + + @Autowired + private ListCarrosByIdLoadValidate validate; + + public ResponseEntity execute(Long id) { + return validate.execute(repository.findById(id)); + } + +} diff --git a/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java b/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java index 4a5d291..c10261f 100644 --- a/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java +++ b/src/main/java/br/com/grupomult/flows/carro/UpdateCarrosReal.java @@ -1,31 +1,39 @@ -package br.com.grupomult.flows.carro; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; - -import br.com.grupomult.api.carro.models.ResponseGetCarrosById; -import br.com.grupomult.entities.Carro; -import br.com.grupomult.repositories.CarroRepository; - -public class UpdateCarrosReal { - - @Autowired - private CarroRepository carroRepository; - - @Autowired - private InsertCarrosConverter insertCarrosConverter; - - @Autowired - private InsertCarrosLoadValidate insertCarrosLoadValidate; - - - public ResponseEntity execute(br.com.grupomult.api.carro.models.Carro carro) { - Carro executeEntity = insertCarrosConverter.executeConvertDomainToEntity(carro); - return insertCarrosLoadValidate.execute(salvarCarro(executeEntity)); - } - - - private Carro salvarCarro(Carro carroEntity) { - return carroRepository.save(carroEntity); - } -} +package br.com.grupomult.flows.carro; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; + +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.entities.Carro; +import br.com.grupomult.entities.CarroPK; +import br.com.grupomult.entities.TipoCarro; +import br.com.grupomult.repositories.CarroRepository; +import br.com.grupomult.repositories.TipoCarroRepository; + +public class UpdateCarrosReal { + + @Autowired + private CarroRepository carroRepository; + + @Autowired + private TipoCarroRepository tipoCarroRepository; + + @Autowired + private InsertCarrosConverter insertCarrosConverter; + + @Autowired + private InsertCarrosLoadValidate insertCarrosLoadValidate; + + + public ResponseEntity execute(br.com.grupomult.api.carro.models.Carro carro) { + Carro carroEntity = insertCarrosConverter.executeConvertDomainToEntity(carro); + TipoCarro tipoCarro = tipoCarroRepository.findByCode(carroEntity.getTipoCarro().getCode()); + carroEntity.setCarroPK(new CarroPK(tipoCarro)); + return insertCarrosLoadValidate.execute(salvarCarro(carroEntity)); + } + + private Carro salvarCarro(Carro carroEntity) { + return carroRepository.save(carroEntity); + } + +} diff --git a/src/main/java/br/com/grupomult/repositories/CarroRepository.java b/src/main/java/br/com/grupomult/repositories/CarroRepository.java index b5a7928..1a6dbd9 100644 --- a/src/main/java/br/com/grupomult/repositories/CarroRepository.java +++ b/src/main/java/br/com/grupomult/repositories/CarroRepository.java @@ -1,11 +1,17 @@ -package br.com.grupomult.repositories; - -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -import br.com.grupomult.entities.Carro; - -@Repository -public interface CarroRepository extends CrudRepository { - -} +package br.com.grupomult.repositories; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import br.com.grupomult.entities.Carro; + +@Repository +public interface CarroRepository extends CrudRepository { + + @Query("SELECT carro FROM Carro carro WHERE carro.carroPK.id = :id") + Carro findById(@Param("id") Long id); + + +} diff --git a/src/main/resources/flow-definition.xml b/src/main/resources/flow-definition.xml index 59d3587..a5eefa3 100644 --- a/src/main/resources/flow-definition.xml +++ b/src/main/resources/flow-definition.xml @@ -1,49 +1,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java index f374a82..a840e4d 100644 --- a/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java +++ b/src/test-integracao/java/br/com/grupomult/api/carro/controllers/CarrosApiControllerTest.java @@ -1,5 +1,7 @@ package br.com.grupomult.api.carro.controllers; +import static br.com.grupomult.api.carro.models.Carro.TipoCarroEnum.PASSEIO; +import static br.com.grupomult.api.carro.models.Carro.TipoCarroEnum.UTILITARIO; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; @@ -27,6 +29,8 @@ import br.com.grupomult.api.carro.controllers.CarrosApiController; import br.com.grupomult.api.carro.models.Carro; import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.entities.TipoCarro; +import br.com.grupomult.repositories.TipoCarroRepository; import br.com.grupomult.api.carro.models.ResponseGetCarros; import br.com.grupomult.api.carro.models.ResponseGetCarrosById; import br.com.grupomult.utils.CarroDomainEntityUtil; @@ -48,10 +52,16 @@ public class CarrosApiControllerTest { @Autowired private CarrosApiController carrosApiController; + @Autowired + private TipoCarroRepository tipoCarroRepository; + private Carro carroDadosValidosInserido; @Before public void setUp() throws Exception { + tipoCarroRepository.save(TipoCarro.builder().code(PASSEIO).build()); + tipoCarroRepository.save(TipoCarro.builder().code(UTILITARIO).build()); + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); ResponseEntity response = carrosApiController.adicionarCarro(carroDadosValidos); assertNotNull(response); diff --git a/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java index fcaac0b..a7034f3 100644 --- a/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java +++ b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionCarroTest.java @@ -6,6 +6,7 @@ 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.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -27,6 +28,7 @@ import br.com.grupomult.flows.carro.ListCarrosValidate; import br.com.grupomult.flows.carro.UpdateCarrosReal; import br.com.grupomult.flows.carro.UpdateCarrosValidate; +import br.com.grupomult.repositories.TipoCarroRepository; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestConfiguration.class) @@ -34,6 +36,9 @@ public class FlowDefinitionCarroTest { @Autowired private ApplicationContext applicationContest; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @Test public void testFlowListCarrosExistsSuccess() { diff --git a/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java index 718ac07..4fce128 100644 --- a/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java +++ b/src/test/java/br/com/grupomult/flowdefinitions/FlowDefinitionTest.java @@ -6,6 +6,7 @@ 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.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -20,6 +21,7 @@ import br.com.grupomult.flows.animal.ListAnimalsLoad; import br.com.grupomult.flows.animal.ListAnimalsResponse; import br.com.grupomult.flows.animal.ListAnimalsValidate; +import br.com.grupomult.repositories.TipoCarroRepository; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestConfiguration.class) @@ -27,6 +29,9 @@ public class FlowDefinitionTest { @Autowired private ApplicationContext applicationContest; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @Test public void testFlowListAnimalsExistsSuccess() { diff --git a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java index 5eacdc7..c6f00c0 100644 --- a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java +++ b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdConverterTest.java @@ -15,6 +15,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.ContextConfiguration; @@ -26,6 +27,7 @@ import br.com.grupomult.converter.AnimalConverter; import br.com.grupomult.entities.Animal; import br.com.grupomult.entities.Species; +import br.com.grupomult.repositories.TipoCarroRepository; import br.com.grupomult.utils.DateUtils; @RunWith(PowerMockRunner.class) @@ -45,6 +47,9 @@ public class ListAnimalsByIdConverterTest { @Autowired private ListAnimalsByIdConverter flow; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @Before public void setUp() throws Exception { diff --git a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadTest.java b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadTest.java index 591bd77..cc5939f 100644 --- a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadTest.java +++ b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadTest.java @@ -21,6 +21,7 @@ import br.com.grupomult.configuration.TestConfiguration; import br.com.grupomult.entities.Animal; import br.com.grupomult.repositories.AnimalRepository; +import br.com.grupomult.repositories.TipoCarroRepository; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestConfiguration.class) @@ -32,6 +33,9 @@ public class ListAnimalsByIdLoadTest { @Autowired private AnimalRepository repository; + @MockBean + private TipoCarroRepository tipoCarroRepository; + @MockBean private ListAnimalsByIdLoadValidate validate; diff --git a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadValidateTest.java b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadValidateTest.java index 6fff07e..ee32dc5 100644 --- a/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadValidateTest.java +++ b/src/test/java/br/com/grupomult/flows/animal/ListAnimalsByIdLoadValidateTest.java @@ -18,6 +18,7 @@ import br.com.grupomult.configuration.TestConfiguration; import br.com.grupomult.entities.Animal; import br.com.grupomult.exceptions.HttpNotFoundException; +import br.com.grupomult.repositories.TipoCarroRepository; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestConfiguration.class) @@ -28,6 +29,9 @@ public class ListAnimalsByIdLoadValidateTest { @MockBean private ListAnimalsByIdConverter converter; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @MockBean private Animal entity; diff --git a/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java b/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java index c601262..5119efc 100644 --- a/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/DeleteCarrosByIdTest.java @@ -6,10 +6,12 @@ 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; import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.repositories.TipoCarroRepository; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestConfiguration.class) @@ -17,6 +19,9 @@ public class DeleteCarrosByIdTest { @Autowired private DeleteCarrosById deleteCarrosById; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @Before public void setUp() throws Exception { diff --git a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java index 29df6dd..6fe4e24 100644 --- a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosRealTest.java @@ -1,77 +1,80 @@ -package br.com.grupomult.flows.carro; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.when; - -import org.junit.Before; -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.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import br.com.grupomult.api.carro.models.Carro; -import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; -import br.com.grupomult.configuration.TestConfiguration; -import br.com.grupomult.api.carro.models.ResponseGetCarrosById; -import br.com.grupomult.repositories.CarroRepository; -import br.com.grupomult.utils.CarroDomainEntityUtil; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = TestConfiguration.class) -public class InserirCarrosRealTest { - - @Autowired - private InsertCarrosReal insertCarrosReal; - - @Autowired - private CarroRepository carroRepository; - - @MockBean - private Carro domain; - - @Before - public void setUp() throws Exception { - domain = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); - when(carroRepository.save(any(br.com.grupomult.entities.Carro.class))).thenReturn(CarroDomainEntityUtil.criarEntityCarro(TipoCarroEnum.PASSEIO)); - when(insertCarrosReal.execute(domain)).thenReturn( createResponseEntityResponseGetCarrosById() ); - } - - @Test - public void testValidateWithCarroFillSuccess() { - Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); - ResponseEntity response = insertCarrosReal.execute(carroDadosValidos); - assertNotNull(response); - assertEquals(HttpStatus.OK, response.getStatusCode()); - - ResponseGetCarrosById body = response.getBody(); - assertNotNull(body); - - Carro carro = body.getCarro(); - assertNotNull(carro); - } - - @Test() - public void testValidateWithCarroNullHttpBadRequestException() { - ResponseEntity response = insertCarrosReal.execute(null); - assertNotNull(response); - } - - @Test() - public void testValidateWithCarroFaltandoDadosHttpBadRequestException() { - ResponseEntity response = insertCarrosReal.execute(new Carro()); - assertNotNull(response); - } - - private ResponseEntity createResponseEntityResponseGetCarrosById() { - ResponseGetCarrosById response = new ResponseGetCarrosById(); - response.setCarro(domain); - return ResponseEntity.ok(response); - } - -} +package br.com.grupomult.flows.carro; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + +import org.junit.Before; +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.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import br.com.grupomult.api.carro.models.Carro; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; +import br.com.grupomult.configuration.TestConfiguration; +import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.repositories.CarroRepository; +import br.com.grupomult.repositories.TipoCarroRepository; +import br.com.grupomult.utils.CarroDomainEntityUtil; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = TestConfiguration.class) +public class InserirCarrosRealTest { + + @Autowired + private InsertCarrosReal insertCarrosReal; + + @Autowired + private CarroRepository carroRepository; + + @MockBean + private TipoCarroRepository tipoCarroRepository; + + @MockBean + private Carro domain; + + @Before + public void setUp() throws Exception { + domain = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + when(carroRepository.save(any(br.com.grupomult.entities.Carro.class))).thenReturn(CarroDomainEntityUtil.criarEntityCarro(TipoCarroEnum.PASSEIO)); + when(tipoCarroRepository.findByCode(TipoCarroEnum.PASSEIO)).thenReturn(CarroDomainEntityUtil.criarTipoCarro(TipoCarroEnum.PASSEIO)); + when(insertCarrosReal.execute(domain)).thenReturn( createResponseEntityResponseGetCarrosById() ); + } + + @Test + public void testValidateWithCarroFillSuccess() { + Carro carroDadosValidos = CarroDomainEntityUtil.criarDomainCarro(TipoCarroEnum.PASSEIO); + ResponseEntity response = insertCarrosReal.execute(carroDadosValidos); + assertNotNull(response); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + ResponseGetCarrosById body = response.getBody(); + assertNotNull(body); + + Carro carro = body.getCarro(); + assertNotNull(carro); + } + + @Test(expected = NullPointerException.class) + public void testValidateWithCarroNullHttpBadRequestException() { + insertCarrosReal.execute(null); + } + + @Test(expected = NullPointerException.class) + public void testValidateWithCarroFaltandoDadosHttpBadRequestException() { + insertCarrosReal.execute(new Carro()); + } + + private ResponseEntity createResponseEntityResponseGetCarrosById() { + ResponseGetCarrosById response = new ResponseGetCarrosById(); + response.setCarro(domain); + return ResponseEntity.ok(response); + } + +} diff --git a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java index d629886..b997756 100644 --- a/src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/InserirCarrosValidateTest.java @@ -19,6 +19,7 @@ import br.com.grupomult.configuration.TestConfiguration; import br.com.grupomult.api.carro.models.ResponseGetCarrosById; import br.com.grupomult.exceptions.HttpBadRequestException; +import br.com.grupomult.repositories.TipoCarroRepository; import br.com.grupomult.utils.CarroDomainEntityUtil; @RunWith(SpringJUnit4ClassRunner.class) @@ -33,6 +34,9 @@ public class InserirCarrosValidateTest { @MockBean private Carro domain; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @Before public void setUp() throws Exception { diff --git a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java index 6dfc5a3..1f94f71 100644 --- a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdConverterTest.java @@ -15,6 +15,7 @@ import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.ContextConfiguration; @@ -24,6 +25,7 @@ import br.com.grupomult.configuration.TestConfiguration; import br.com.grupomult.api.carro.models.ResponseGetCarrosById; import br.com.grupomult.converter.CarroConverter; +import br.com.grupomult.repositories.TipoCarroRepository; import br.com.grupomult.utils.CarroDomainEntityUtil; @RunWith(PowerMockRunner.class) @@ -41,6 +43,9 @@ public class ListCarrosByIdConverterTest { @Autowired private ListCarrosByIdConverter flow; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @Before public void setUp() throws Exception { diff --git a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java index 07ee55d..44d7f27 100644 --- a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadTest.java @@ -18,9 +18,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import br.com.grupomult.api.carro.models.ResponseGetCarrosById; +import br.com.grupomult.api.carro.models.Carro.TipoCarroEnum; import br.com.grupomult.configuration.TestConfiguration; import br.com.grupomult.entities.Carro; import br.com.grupomult.repositories.CarroRepository; +import br.com.grupomult.repositories.TipoCarroRepository; import br.com.grupomult.utils.CarroDomainEntityUtil; @RunWith(SpringJUnit4ClassRunner.class) @@ -32,6 +34,9 @@ public class ListCarrosByIdLoadTest { @Autowired private CarroRepository repository; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @MockBean private ListCarrosByIdLoadValidate validate; @@ -44,7 +49,7 @@ public class ListCarrosByIdLoadTest { @Before public void setUp() throws Exception { - when(repository.findOne(anyLong())).thenReturn(entity); + when(repository.findById(anyLong())).thenReturn(entity); when(validate.execute(entity)).thenReturn(CarroDomainEntityUtil.createResponseEntityResponseGetCarrosById(domain)); } diff --git a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java index 312b141..51c6c32 100644 --- a/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java +++ b/src/test/java/br/com/grupomult/flows/carro/ListCarrosByIdLoadValidateTest.java @@ -18,6 +18,7 @@ import br.com.grupomult.configuration.TestConfiguration; import br.com.grupomult.entities.Carro; import br.com.grupomult.exceptions.HttpNotFoundException; +import br.com.grupomult.repositories.TipoCarroRepository; import br.com.grupomult.utils.CarroDomainEntityUtil; @RunWith(SpringJUnit4ClassRunner.class) @@ -35,6 +36,9 @@ public class ListCarrosByIdLoadValidateTest { @MockBean private br.com.grupomult.api.carro.models.Carro domain; + + @MockBean + private TipoCarroRepository tipoCarroRepository; @Before public void setUp() throws Exception {