Created
April 4, 2014 15:14
-
-
Save rponte/9976753 to your computer and use it in GitHub Desktop.
Example of a VRaptor controller and its unit tests
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Resource | |
public class CategoriaController { | |
private final Result result; | |
private final CategoriaService service; | |
private final Validator validator; | |
public CategoriaController(CategoriaService service, Result result, | |
Validator validator) { | |
this.service = service; | |
this.result = result; | |
this.validator = validator; | |
} | |
@Get("/financeiro/categorias") | |
public List<Categoria> lista(Categoria categoria) { | |
result.include("categoria", categoria); | |
return service.busca(categoria); | |
} | |
@Get("/financeiro/categorias/novo") | |
public void novo() { | |
} | |
@Post("/financeiro/categorias") | |
public void adiciona(Categoria categoria) { | |
validar(categoria); | |
validator.onErrorForwardTo(this).novo(); | |
service.salva(categoria); | |
result.include("notice", "Categoria adicionada com sucesso!"); | |
result.redirectTo(this).lista(new Categoria()); | |
} | |
@Get("/financeiro/categorias/{id}") | |
public Categoria edita(Long id) { | |
Categoria categoria = service.carrega(id); | |
return categoria; | |
} | |
@Put("/financeiro/categorias/{categoria.id}") | |
public void altera(Categoria categoria) { | |
validar(categoria); | |
validator.onErrorForwardTo(this).edita(); | |
service.atualiza(categoria); | |
result.include("notice", "Categoria atualizada com sucesso!"); | |
result.redirectTo(this).lista(new Categoria()); | |
} | |
public void edita() {} | |
@Delete("/financeiro/categorias/{id}") | |
public void remove(Long id) { | |
service.deleta(new Categoria(id)); | |
result.nothing(); | |
} | |
private void validar(Categoria categoria) { | |
if (isBlank(categoria.getNome()) || categoria.getNome().length() > 45) { | |
validator.add(new ValidationMessage( | |
"Campo obrigatório ou tamanho de 45 letras excedido.", | |
"Nome")); | |
} | |
if (length(categoria.getDescricao()) > 100) { | |
validator.add(new ValidationMessage( | |
"Tamanho de 100 letras excedido.", "Descrição")); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class CategoriaControllerTest { | |
private CategoriaController controller; | |
@Mock | |
private CategoriaService service; | |
private Result result; | |
private Validator validator; | |
@Before | |
public void setup() { | |
MockitoAnnotations.initMocks(this); | |
result = new MockResult(); | |
validator = new MockValidator(); | |
controller = new CategoriaController(service, result, validator); | |
} | |
@Test | |
public void deveriaListarTodasAsCategorias() { | |
List<Categoria> categoriasEsperadas = Lists | |
.newArrayList(new Categoria()); | |
when(service.busca(any(Categoria.class))).thenReturn( | |
categoriasEsperadas); | |
List<Categoria> todas = controller.lista(new Categoria()); | |
assertEquals("categorias", categoriasEsperadas, todas); | |
} | |
@Test | |
public void deveriaAdicionarCategoria() { | |
Categoria categoria = new Categoria(); | |
categoria.setNome("Nome da categoria"); | |
controller.adiciona(categoria); | |
verify(service).salva(categoria); | |
assertEquals("notice", "Categoria adicionada com sucesso!", result | |
.included().get("notice")); | |
} | |
@Test | |
public void deveriaPrepararPararEditarCategoria() { | |
Long id = 8L; | |
Categoria encontrada = new Categoria(); | |
when(service.carrega(id)).thenReturn(encontrada); | |
Categoria categoria = controller.edita(id); | |
assertEquals("categoria carregada", encontrada, categoria); | |
} | |
@Test | |
public void deveriaAtualizarCategoria() { | |
Categoria categoria = new Categoria(); | |
categoria.setNome("Este nome eh so pq tem validation"); | |
controller.altera(categoria); | |
verify(service).atualiza(categoria); | |
assertEquals("notice", "Categoria atualizada com sucesso!", result | |
.included().get("notice")); | |
} | |
@Test | |
public void deveriaRemoverCategoria() { | |
Long id = 9L; | |
controller.remove(id); | |
ArgumentCaptor<Categoria> argument = ArgumentCaptor | |
.forClass(Categoria.class); | |
verify(service).deleta(argument.capture()); | |
assertEquals("id da categoria", id, argument.getValue().getId()); | |
} | |
@Test | |
public void deveriaValidarOsAtributosDaCategoriaASerSalva() { | |
try { | |
Categoria categoria = new Categoria(); | |
controller.adiciona(categoria); | |
} catch (ValidationException e) { | |
verificaMensagensDeErro(e.getErrors()); | |
} | |
} | |
@Test | |
public void deveriaValidarOsAtributosDaCategoriaASerAtualizada() { | |
try { | |
Categoria categoria = new Categoria(); | |
controller.altera(categoria); | |
} catch (ValidationException e) { | |
verificaMensagensDeErro(e.getErrors()); | |
} | |
} | |
@Test | |
public void deveriaValidarOTamanhoDosAtributosDaCategoriaASerSalva() { | |
try { | |
Categoria categoria = new Categoria(); | |
categoria | |
.setNome("nome grande, pra poder passar dos 45 caraceteres" | |
+ " de um texto e dar a ValidationException, " | |
+ " que eh o esperado."); | |
controller.adiciona(categoria); | |
} catch (ValidationException e) { | |
verificaMensagensDeErro(e.getErrors()); | |
} | |
} | |
private void verificaMensagensDeErro(List<Message> errors) { | |
for (Message erro : errors) { | |
if (erro.getCategory().equals("Nome")) { | |
assertTrue(erro.getMessage().equals( | |
"Campo obrigatório ou tamanho de 45 letras excedido.")); | |
} | |
if (erro.getCategory().equals("Descrição")) { | |
assertTrue(erro.getMessage().equals( | |
"Tamanho de 100 letras excedido.")); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment