/locadora-veiculo-web/src/test/java/com/algaworks/curso/jpa2/services/ModeloCarroServicesTest.java

https://gitlab.com/brunokarpo/Estudos · Java · 162 lines · 121 code · 41 blank · 0 comment · 0 complexity · e47704f4b95e1a516d6a5ac9063f323e MD5 · raw file

  1. package com.algaworks.curso.jpa2.services;
  2. import static org.junit.Assert.*;
  3. import static org.mockito.Mockito.*;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import org.mockito.Mock;
  9. import org.mockito.MockitoAnnotations;
  10. import com.algaworks.curso.jpa2.dao.ModeloCarroDao;
  11. import com.algaworks.curso.jpa2.modelo.Fabricante;
  12. import com.algaworks.curso.jpa2.modelo.ModeloCarro;
  13. import com.algaworks.curso.jpa2.modelo.builders.ModeloCarroBuilder;
  14. import com.algaworks.curso.jpa2.services.exception.RegraNegocioException;
  15. public class ModeloCarroServicesTest {
  16. private static final String MENSAGEM_ERRO_SEM_FABRICANTE = "O fabricante e obrigatório";
  17. private static final String MENSAGEM_ERRO_SEM_DESCRICAO = "O nome do modelo é obrigatório";
  18. private static final String MENSAGEM_ERRO_MODELO_INEXISTENTE = "O modelo de carro não existe e não pode ser excluído";
  19. private ModeloCarroService sut;
  20. @Mock
  21. private ModeloCarroDao daoMock;
  22. private ModeloCarro modeloCarro;
  23. @Before
  24. public void setup() {
  25. MockitoAnnotations.initMocks(this);
  26. modeloCarro = new ModeloCarroBuilder()
  27. .comCodigo(1L)
  28. .comDescricao("Fusca")
  29. .comFabricante("Volkswagen")
  30. .construir();
  31. sut = new ModeloCarroService();
  32. sut.setModeloCarroDao(daoMock);
  33. }
  34. @Test
  35. public void deveSalvarUmModeloDeCarro() throws Exception {
  36. sut.salvar(modeloCarro);
  37. verify(daoMock).salvar(modeloCarro);
  38. }
  39. @Test(expected=RegraNegocioException.class)
  40. public void naoDeveAceitarUmModeloDeCarroSemFabricante() throws Exception {
  41. modeloCarro.setFabricante(null);
  42. sut.salvar(modeloCarro);
  43. }
  44. @Test
  45. public void validarMensagemDaExceptionCasoOModeloNaoSejaSalvoPorFaltaDeFabricante() throws Exception {
  46. modeloCarro.setFabricante(null);
  47. try {
  48. sut.salvar(modeloCarro);
  49. } catch (RegraNegocioException e) {
  50. assertEquals(MENSAGEM_ERRO_SEM_FABRICANTE, e.getMessage());
  51. }
  52. }
  53. @Test(expected=RegraNegocioException.class)
  54. public void naoDeveAceitarUmModeloDeCarroSeDescricaoForNula() throws Exception {
  55. modeloCarro.setDescricao(null);
  56. sut.salvar(modeloCarro);
  57. }
  58. @Test(expected=RegraNegocioException.class)
  59. public void naoDeveAceitarUmModeloDeCarrosSeDescricaoForVazia() throws Exception {
  60. modeloCarro.setDescricao("");
  61. sut.salvar(modeloCarro);
  62. }
  63. @Test
  64. public void validarMensagemDaExceptionCasoADescricaoDoModeloEstejaNulaOuVazia() throws Exception {
  65. modeloCarro.setDescricao(" ");
  66. try {
  67. sut.salvar(modeloCarro);
  68. } catch (RegraNegocioException e) {
  69. assertEquals(MENSAGEM_ERRO_SEM_DESCRICAO, e.getMessage());
  70. }
  71. }
  72. @Test
  73. public void deveBuscarListaDeModelosDoBanco() throws Exception {
  74. when(daoMock.buscarTodos()).thenReturn(criarListaDeModelos());
  75. List<ModeloCarro> lista = sut.buscarTodos();
  76. assertEquals(6, lista.size());
  77. }
  78. @Test
  79. public void deveBuscarTodosOsModelosDeDeterminadoFabricante() throws Exception {
  80. when(daoMock.buscarTodos()).thenReturn(criarListaDeModelos());
  81. Fabricante fabricante = new Fabricante();
  82. fabricante.setNome("Chevrolet");
  83. List<ModeloCarro> lista = sut.buscarTodos(fabricante);
  84. assertEquals(3, lista.size());
  85. }
  86. @Test
  87. public void deveBuscarModeloDeCarroPorCodigo() throws Exception {
  88. sut.buscarPorCodigo(1L);
  89. verify(daoMock).buscarPorCodigo(1L);
  90. }
  91. @Test
  92. public void deveExcluirModeloDeCarroPassadoPorParametro() throws Exception {
  93. when(daoMock.buscarPorCodigo(1L)).thenReturn(modeloCarro);
  94. sut.excluir(modeloCarro);
  95. verify(daoMock).excluir(modeloCarro);
  96. }
  97. @Test(expected=RegraNegocioException.class)
  98. public void deveLancarExceptionQuandoTentarExcluirUmModeloDeCarroQueNaoExisteNoBanco() throws Exception {
  99. when(daoMock.buscarPorCodigo(1L)).thenReturn(null);
  100. sut.excluir(modeloCarro);
  101. }
  102. @Test
  103. public void validarMensagemDaExceptionQuandoTentarExcluirUmModeloDeCarroQueNaoExiste() throws Exception {
  104. when(daoMock.buscarPorCodigo(1L)).thenReturn(null);
  105. try {
  106. sut.excluir(modeloCarro);
  107. } catch(RegraNegocioException e) {
  108. assertEquals(MENSAGEM_ERRO_MODELO_INEXISTENTE, e.getMessage());
  109. }
  110. }
  111. private List<ModeloCarro> criarListaDeModelos() {
  112. List<ModeloCarro> modelos = new ArrayList<ModeloCarro>();
  113. modelos.add(new ModeloCarroBuilder().comCodigo(1L).comDescricao("Fusca").comFabricante("Volkswagen").construir());
  114. modelos.add(new ModeloCarroBuilder().comCodigo(2L).comDescricao("HB 20").comFabricante("Hyundai").construir());
  115. modelos.add(new ModeloCarroBuilder().comCodigo(3L).comDescricao("Vectra").comFabricante("Chevrolet").construir());
  116. modelos.add(new ModeloCarroBuilder().comCodigo(4L).comDescricao("Astra").comFabricante("Chevrolet").construir());
  117. modelos.add(new ModeloCarroBuilder().comCodigo(5L).comDescricao("S10").comFabricante("Chevrolet").construir());
  118. modelos.add(new ModeloCarroBuilder().comCodigo(6L).comDescricao("Classe B").comFabricante("Mercedes Bens").construir());
  119. return modelos;
  120. }
  121. }