package br.usp.ime.academicdevoir.controller;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.vraptor.util.test.JSR303MockValidator;
import br.com.caelum.vraptor.util.test.MockResult;
import br.usp.ime.academicdevoir.dao.DisciplinaDao;
import br.usp.ime.academicdevoir.dao.QuestaoDeSubmissaoDeArquivoDao;
import br.usp.ime.academicdevoir.dao.TagDao;
import br.usp.ime.academicdevoir.entidade.Professor;
import br.usp.ime.academicdevoir.entidade.QuestaoDeSubmissaoDeArquivo;
import br.usp.ime.academicdevoir.entidade.Tag;
import br.usp.ime.academicdevoir.infra.Privilegio;
import br.usp.ime.academicdevoir.infra.UsuarioSession;
import br.usp.ime.academicdevoir.util.Given;
public class QuestoesDeSubmissaoDeArquivoControllerTeste {
/**
* @uml.property name="questoesC"
* @uml.associationEnd
*/
private QuestoesDeSubmissaoDeArquivoController questoesC;
/**
* @uml.property name="dao"
* @uml.associationEnd
*/
private QuestaoDeSubmissaoDeArquivoDao dao;
/**
* @uml.property name="result"
* @uml.associationEnd
*/
private MockResult result;
/**
* @uml.property name="validator"
* @uml.associationEnd
*/
private JSR303MockValidator validator;
/**
* @uml.property name="usuarioSession"
* @uml.associationEnd
*/
private UsuarioSession usuarioSession;
private TagDao tagDao;
private DisciplinaDao disciplinaDao;
@Before
public void SetUp() {
Professor professor = new Professor();
professor.setPrivilegio(Privilegio.ADMINISTRADOR);
usuarioSession = new UsuarioSession();
usuarioSession.setUsuario(professor);
dao = mock(QuestaoDeSubmissaoDeArquivoDao.class);
tagDao = mock(TagDao.class);
disciplinaDao = mock(DisciplinaDao.class);
result = spy(new MockResult());
validator = spy(new JSR303MockValidator());
questoesC = new QuestoesDeSubmissaoDeArquivoController(dao, tagDao, disciplinaDao, result,
validator, usuarioSession);
when(tagDao.buscaPeloNome(any(String.class))).thenReturn(new Tag("tagQualquer"));
}
@Test
public void testeAdiciona() {
QuestaoDeSubmissaoDeArquivo questao = Given.novaQuestaoDeSubmissaoDeArquivo();
when(disciplinaDao.carrega(questao.getDisciplina().getId())).thenReturn(questao.getDisciplina());
questoesC.cadastra(questao, new String("tagQualquer"));
verify(validator).validate(questao);
verify(validator).onErrorRedirectTo(QuestoesController.class);
verify(dao).salva(questao);
verify(result).redirectTo(questoesC);
}
@Test
public void testeAtualiza() {
QuestaoDeSubmissaoDeArquivo questao = new QuestaoDeSubmissaoDeArquivo();
questao.setEnunciado("Enuciado");
questoesC.altera(questao, new String("tagQualquer"));
verify(validator).validate(questao);
verify(validator).onErrorUsePageOf(QuestoesDeSubmissaoDeArquivoController.class);
verify(dao).atualiza(questao);
verify(result).redirectTo(questoesC);
}
@Test
public void testeRemove() {
QuestaoDeSubmissaoDeArquivo temp = new QuestaoDeSubmissaoDeArquivo();
when(dao.carrega(0L)).thenReturn(temp);
questoesC.remove(0L);
verify(dao).remove(temp);
verify(result).redirectTo(questoesC);
}
}