package br.usp.ime.academicdevoir.controller; import static org.junit.Assert.assertNotNull; 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 java.math.BigInteger; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.junit.Before; import org.junit.Test; import br.com.caelum.vraptor.util.test.MockResult; import br.usp.ime.academicdevoir.dao.DisciplinaDao; import br.usp.ime.academicdevoir.dao.ListaDeExerciciosDao; import br.usp.ime.academicdevoir.dao.ListaDeRespostasDao; import br.usp.ime.academicdevoir.dao.QuestaoDao; import br.usp.ime.academicdevoir.dao.TagDao; import br.usp.ime.academicdevoir.entidade.Professor; import br.usp.ime.academicdevoir.entidade.Questao; import br.usp.ime.academicdevoir.entidade.QuestaoDeMultiplaEscolha; import br.usp.ime.academicdevoir.entidade.QuestaoDeSubmissaoDeArquivo; import br.usp.ime.academicdevoir.entidade.QuestaoDeTexto; import br.usp.ime.academicdevoir.entidade.QuestaoDeVouF; import br.usp.ime.academicdevoir.infra.Privilegio; import br.usp.ime.academicdevoir.infra.UsuarioSession; public class QuestoesControllerTeste { /** * @uml.property name="questoesController" * @uml.associationEnd */ private QuestoesController questoesController; /** * @uml.property name="dao" * @uml.associationEnd */ private QuestaoDao dao; /** * @uml.property name="result" * @uml.associationEnd */ private MockResult result; /** * @uml.property name="questaoDeMultiplaEscolha" * @uml.associationEnd */ private QuestaoDeMultiplaEscolha questaoDeMultiplaEscolha; /** * @uml.property name="questaoDeSubmissaoDeArquivo" * @uml.associationEnd */ private QuestaoDeSubmissaoDeArquivo questaoDeSubmissaoDeArquivo; /** * @uml.property name="questaoDeTexto" * @uml.associationEnd */ private QuestaoDeTexto questaoDeTexto; /** * @uml.property name="questaoDeVouF" * @uml.associationEnd */ private QuestaoDeVouF questaoDeVouF; /** * @uml.property name="usuarioSession" * @uml.associationEnd */ private UsuarioSession usuarioSession; private TagDao tagDao; private ListaDeExerciciosDao listaDeExerciciosDao; private ListaDeRespostasDao listaDeRespostasDao; private DisciplinaDao disciplinaDao; @Before public void SetUp() { Professor professor = new Professor(); professor.setPrivilegio(Privilegio.ADMINISTRADOR); usuarioSession = new UsuarioSession(); usuarioSession.setUsuario(professor); result = spy(new MockResult()); dao = mock(QuestaoDao.class); disciplinaDao = mock(DisciplinaDao.class); listaDeExerciciosDao = mock(ListaDeExerciciosDao.class); questoesController = new QuestoesController(dao, tagDao, listaDeExerciciosDao, listaDeRespostasDao, result, disciplinaDao, usuarioSession); questaoDeMultiplaEscolha = new QuestaoDeMultiplaEscolha(); questaoDeSubmissaoDeArquivo = new QuestaoDeSubmissaoDeArquivo(); questaoDeTexto = new QuestaoDeTexto(); questaoDeVouF = new QuestaoDeVouF(); questaoDeMultiplaEscolha.setId(0L); questaoDeSubmissaoDeArquivo.setId(1L); questaoDeTexto.setId(2L); questaoDeVouF.setId(3L); when(dao.listaTudo()).thenReturn(new ArrayList<Questao>()); when(dao.carrega(questaoDeMultiplaEscolha.getId().longValue())).thenReturn(questaoDeMultiplaEscolha); when(dao.carrega(questaoDeSubmissaoDeArquivo.getId().longValue())).thenReturn(questaoDeSubmissaoDeArquivo); when(dao.carrega(questaoDeTexto.getId().longValue())).thenReturn(questaoDeTexto); when(dao.carrega(questaoDeVouF.getId().longValue())).thenReturn(questaoDeVouF); when(listaDeExerciciosDao.buscaListasQueContemQuestao(any(Long.class))).thenReturn(new ArrayList<BigInteger>()); } @Test public void testeAlteracaoQuestaoDeMultiplaEscolha() { questoesController.alteracao(questaoDeMultiplaEscolha.getId()); verify(result).redirectTo(QuestoesDeMultiplaEscolhaController.class); } @Test public void testeAlteracaoQuestaoDeSubmissaoDeArquivo() { questoesController.alteracao(questaoDeSubmissaoDeArquivo.getId()); verify(result).redirectTo(QuestoesDeSubmissaoDeArquivoController.class); } @Test public void testeAlteracaoQuestaoDeTexto() { questoesController.alteracao(questaoDeTexto.getId()); verify(result).redirectTo(QuestoesDeTextoController.class); } @Test public void testeAlteracaoQuestaoDeVouF() { questoesController.alteracao(questaoDeVouF.getId()); verify(result).redirectTo(QuestoesDeVouFController.class); } @Test public void testeRemove() { questoesController.remove(new Random().nextLong() % 4); verify(result).redirectTo(QuestoesController.class); } @Test public void testeLista() { questoesController.lista(); List<Questao> questoes = result.included("lista"); assertNotNull(questoes); } }