Skip to content

Instantly share code, notes, and snippets.

@rponte
Created April 4, 2014 15:14
Show Gist options
  • Save rponte/9976753 to your computer and use it in GitHub Desktop.
Save rponte/9976753 to your computer and use it in GitHub Desktop.
Example of a VRaptor controller and its unit tests
@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"));
}
}
}
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