package br.usp.ime.academicdevoir.controller; import static org.junit.Assert.assertNotNull; 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.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import br.com.caelum.vraptor.Validator; import br.com.caelum.vraptor.util.test.JSR303MockValidator; import br.com.caelum.vraptor.util.test.MockResult; import br.com.caelum.vraptor.validator.ValidationException; import br.usp.ime.academicdevoir.dao.AlunoDao; import br.usp.ime.academicdevoir.dao.DisciplinaDao; import br.usp.ime.academicdevoir.dao.ListaDeExerciciosDao; import br.usp.ime.academicdevoir.dao.TurmaDao; import br.usp.ime.academicdevoir.entidade.Aluno; import br.usp.ime.academicdevoir.entidade.Disciplina; import br.usp.ime.academicdevoir.entidade.ListaDeExercicios; import br.usp.ime.academicdevoir.entidade.Professor; import br.usp.ime.academicdevoir.entidade.Turma; import br.usp.ime.academicdevoir.infra.Privilegio; import br.usp.ime.academicdevoir.infra.UsuarioSession; import br.usp.ime.academicdevoir.util.Given; public class TurmasControllerTeste { /** * @uml.property name="turmasController" * @uml.associationEnd readOnly="true" */ TurmasController turmasController; /** * @uml.property name="turmaDao" * @uml.associationEnd readOnly="true" */ TurmaDao turmaDao; /** * @uml.property name="disciplinaDao" * @uml.associationEnd readOnly="true" */ DisciplinaDao disciplinaDao; /** * @uml.property name="alunoDao" * @uml.associationEnd readOnly="true" */ AlunoDao alunoDao; /** * @uml.property name="result" * @uml.associationEnd readOnly="true" */ MockResult result; /** * @uml.property name="turma" * @uml.associationEnd readOnly="true" */ private Turma turma; /** * @uml.property name="disciplinas" */ private List<Disciplina> disciplinas; /** * @uml.property name="turmas" */ private List<Turma> turmas; private UsuarioSession usuarioSession; private ListaDeExerciciosDao listaDeExerciciosDao; private Professor admin; private Aluno aluno; private Disciplina disciplina; private Validator validator; @Before public void SetUp() { admin = new Professor(); admin.setId(0L); admin.setPrivilegio(Privilegio.ADMINISTRADOR); aluno = new Aluno(); aluno.setId(0L); aluno.setPrivilegio(Privilegio.ALUNO); usuarioSession = new UsuarioSession(); usuarioSession.setUsuario(admin); validator = spy(new JSR303MockValidator()); turmaDao = mock(TurmaDao.class); disciplinaDao = mock(DisciplinaDao.class); alunoDao = mock(AlunoDao.class); result = spy(new MockResult()); turmasController = new TurmasController(result, validator, turmaDao, disciplinaDao, alunoDao, listaDeExerciciosDao, usuarioSession); turma = new Turma(); List<Integer> data = new ArrayList<Integer>(); data.add(2); data.add(12); data.add(2012); turma.setId(0L); turma.setPrazoDeMatricula(data); turma.setProfessor(new Professor()); turma.setDisciplina(new Disciplina()); turma.setListas(new ArrayList<ListaDeExercicios>()); turmas = new ArrayList<Turma>(); disciplina = new Disciplina(); disciplina.setId(0L); disciplina.setNome("Disciplina"); disciplinas = new ArrayList<Disciplina>(); disciplinas.add(disciplina); when(turmaDao.carrega(turma.getId())).thenReturn(turma); when(turmaDao.listaTudo()).thenReturn(turmas); when(disciplinaDao.listaTudo()).thenReturn(disciplinas); when(alunoDao.carrega(aluno.getId())).thenReturn(aluno); } @Test public void testeHome() { turmasController.home(turma.getId()); Turma turma = result.included("turma"); assertNotNull(turma); } @Test public void testeListaAlunos() { turmasController.lista(); List<Turma> turmas = result.included("listaDeTurmas"); assertNotNull(turmas); } @Test public void testeLista() { turmasController.lista(); List<Turma> turmas = result.included("listaDeTurmas"); /*Poderia verificar se todos os campos de turmas estao corretos.*/ //TODO Como fazer isso usando coisas de JUnit? assertNotNull(turmas); } @Test public void deveCadastrar() { turma = Given.novaTurma(); turma.setProfessor(Given.novoProfessor()); turmasController.cadastra(turma, Given.prazoDeMatricula()); verify(result).redirectTo(ProfessoresController.class); } @Test(expected=ValidationException.class) public void naoDeveCadastrarTurmaSemDisciplina() { turma = Given.novaTurma(); turma.setDisciplina(new Disciplina()); turma.setProfessor(Given.novoProfessor()); turmasController.cadastra(turma, Given.prazoDeMatricula()); } @Test public void testeAlteracao() { turmasController.alteracao(turma.getId()); Turma turma = result.included("turma"); assertNotNull(turma); } /*@Test public void testeAltera() { turmasController.altera(turma.getId(), "xpto", "sim", ); verify(turmaDao).atualizaTurma(turma); verify(result).redirectTo(TurmasController.class); }*/ @Test public void testeRemove() { turmasController.remove(turma.getId()); verify(turmaDao).removeTurma(turma); verify(result).redirectTo(ProfessoresController.class); } @Test public void testeRemoveMatriculaPorAdministrador() { turmasController.removeMatricula(aluno.getId(), turma.getId()); verify(alunoDao).removeMatricula(aluno, turma); verify(result).redirectTo(TurmasController.class); } @Test public void testeRemoveMatriculaPorAluno() { usuarioSession.setUsuario(aluno); turmasController.removeMatricula(aluno.getId(), turma.getId()); verify(alunoDao).removeMatricula(aluno, turma); verify(result).redirectTo(AlunosController.class); } }