com.softwarecorporativo.monitoriaifpe.funcionais.atividade.TesteAtividade.java Source code

Java tutorial

Introduction

Here is the source code for com.softwarecorporativo.monitoriaifpe.funcionais.atividade.TesteAtividade.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.softwarecorporativo.monitoriaifpe.funcionais.atividade;

import com.softwarecorporativo.monitoriaifpe.funcionais.MonitoriaTestCase;
import com.softwarecorporativo.monitoriaifpe.modelo.aluno.Aluno;
import com.softwarecorporativo.monitoriaifpe.modelo.atividade.Atividade;
import com.softwarecorporativo.monitoriaifpe.modelo.monitoria.Monitoria;
import com.softwarecorporativo.monitoriaifpe.modelo.util.Util;
import com.softwarecorporativo.monitoriaifpe.modelo.util.constantes.Modalidade;
import com.softwarecorporativo.monitoriaifpe.modelo.util.constantes.SituacaoAtividade;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.validation.ConstraintViolation;
import org.apache.commons.lang.RandomStringUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Test;
import static org.junit.Assert.assertTrue;

/**
 *
 * @author EdmilsonS
 */
public class TesteAtividade extends MonitoriaTestCase {

    @Test
    public void testeInserirAtividade() {
        Atividade atividade = montarObjetoAtividade();
        super.entityManager.persist(atividade);
        super.entityManager.flush();
        super.entityManager.refresh(atividade);
        assertNotNull(atividade.getChavePrimaria());
    }

    @Test
    public void testeRemoverAtividade() {
        Atividade atividade = super.entityManager.find(Atividade.class, 1L);
        super.entityManager.remove(atividade);
        super.entityManager.flush();
        assertNull(super.entityManager.find(Atividade.class, 1L));
    }

    @Test
    public void testeAlterarAtividade() {
        Atividade atividade = super.entityManager.find(Atividade.class, 1L);
        atividade.setSituacao(SituacaoAtividade.AGUARDANDO_APROVACAO);
        atividade.setDescricao("Descrio Alterada");
        super.entityManager.merge(atividade);
        super.entityManager.flush();
        super.entityManager.clear();
        atividade = super.entityManager.find(Atividade.class, 1L);
        assertEquals(SituacaoAtividade.AGUARDANDO_APROVACAO, atividade.getSituacao());
    }

    @Test
    public void testeConsultarAtividadesAprovadas() {
        TypedQuery<Atividade> query = super.entityManager.createQuery(
                "SELECT a FROM Atividade a WHERE a.situacao = :situacao ORDER BY a.descricao", Atividade.class);
        query.setParameter("situacao", SituacaoAtividade.APROVADA);

        List<Atividade> atividadesAprovadas = query.getResultList();
        assertEquals(20, atividadesAprovadas.size());
        for (Atividade atividade : atividadesAprovadas) {
            atividade.getSituacao().equals(SituacaoAtividade.APROVADA);
        }
    }

    @Test
    public void testeConsultarAtividadesEmEspera() {
        TypedQuery<Atividade> query = super.entityManager.createQuery(
                "SELECT a FROM Atividade a WHERE a.situacao = :situacao ORDER BY a.descricao ASC", Atividade.class);
        query.setParameter("situacao", SituacaoAtividade.AGUARDANDO_APROVACAO);

        List<Atividade> atividadesEmEspera = query.getResultList();
        assertEquals(26, atividadesEmEspera.size());
        for (Atividade atividade : atividadesEmEspera) {
            atividade.getSituacao().equals(SituacaoAtividade.AGUARDANDO_APROVACAO);
        }
    }

    @Test
    public void testeConsultarAtividadesPorDescricao() {
        TypedQuery<Atividade> query = super.entityManager.createQuery(
                "SELECT a FROM Atividade a WHERE a.descricao LIKE :descricao ORDER BY a.descricao DESC",
                Atividade.class);
        query.setParameter("descricao", "Correo%");

        List<Atividade> atividades = query.getResultList();
        assertEquals(26, atividades.size());
        for (Atividade atividade : atividades) {
            assertTrue(atividade.getDescricao().startsWith("Correo"));
        }
    }

    /*
        @Test
        public void testeConsultarAtividadesDoMes() {
    TypedQuery<Atividade> query = super.entityManager.createQuery(
            "SELECT a FROM Atividade a WHERE a.data BETWEEN ?1 AND ?2 ORDER BY a.data",
            Atividade.class);
        
    query.setParameter(1, Util.getDate(1, Calendar.JANUARY, 2016));
    query.setParameter(2, Util.getDate(31, Calendar.JANUARY, 2016));
        
    List<Atividade> atividades = query.getResultList();
    assertEquals(23, atividades.size());
    Calendar calendar = Calendar.getInstance();
    for (Atividade atividade : atividades) {
        calendar.setTime(atividade.getData());
        assertEquals(Calendar.JANUARY, calendar.get(Calendar.MONTH));
    }
        }
    */
    @Test
    public void testeConsultarAtividadesSemObservacoes() {

        TypedQuery<Atividade> query = super.entityManager
                .createQuery("SELECT a FROM Atividade a WHERE a.observacoes IS NULL", Atividade.class);

        List<Atividade> atividades = query.getResultList();
        assertEquals(46, atividades.size());
        for (Atividade atividade : atividades) {
            assertNull(atividade.getObservacoes());
        }
    }

    @Test
    public void testeVerificarAtividadeNaMonitoria() {
        TypedQuery<Atividade> queryAtividade = super.entityManager.createQuery(
                "SELECT a FROM Atividade a INNER JOIN FETCH a.monitoria WHERE a.chavePrimaria = ?1",
                Atividade.class);
        queryAtividade.setParameter(1, 1L);

        Atividade atividade = queryAtividade.getSingleResult();

        TypedQuery<Monitoria> queryMonitoria = super.entityManager
                .createQuery("SELECT m FROM Monitoria m WHERE :item MEMBER OF m.atividades", Monitoria.class);
        queryMonitoria.setParameter("item", atividade);

        Monitoria monitoria = queryMonitoria.getSingleResult();
        assertEquals(atividade.getMonitoria(), monitoria);
    }
    /*
        @Test
        public void testeConsultarAtividadesPassadas() {
    TypedQuery<Atividade> query = super.entityManager.createQuery(
            "SELECT a FROM Atividade a WHERE a.data < current_date() ORDER BY a.descricao",
            Atividade.class);
        
    Date dataAtual = Calendar.getInstance().getTime();
    List<Atividade> atividades = query.getResultList();
    assertEquals(46, atividades.size());
    for (Atividade atividade : atividades) {
        assertTrue(atividade.getData().before(dataAtual));
    }
        
        } */

    @Test
    public void testeConsultarAtividadePorMonitoriaBolsista() {
        TypedQuery<Atividade> query = super.entityManager.createQuery(
                "SELECT a FROM Atividade a WHERE a.monitoria IN ( SELECT m FROM Monitoria m WHERE m.modalidade = 'BOLSISTA')",
                Atividade.class);

        List<Atividade> atividades = query.getResultList();
        assertEquals(23, atividades.size());
        for (Atividade atividade : atividades) {
            assertEquals(Modalidade.BOLSISTA, atividade.getMonitoria().getModalidade());
        }
    }

    @Test
    public void testeVerificarQuantidadeAtividades() {
        Long quantidadeEsperada = 46L;
        TypedQuery<Long> query = super.entityManager.createQuery(
                "SELECT COUNT(a) FROM Atividade a WHERE EXISTS ( SELECT m FROM Monitoria m)", Long.class);
        Long quantidade = query.getSingleResult();
        assertEquals(quantidadeEsperada, quantidade);
    }

    @Test
    public void testeConsultarAtividadeMaisAntiga() {
        Atividade atividadeEsperada = super.entityManager.find(Atividade.class, 1L);
        TypedQuery<Atividade> query = super.entityManager.createQuery(
                "SELECT a FROM Atividade a WHERE NOT(a.data > ALL ( SELECT aa.data FROM Atividade aa))",
                Atividade.class);

        Atividade atividade = query.getSingleResult();
        assertEquals(atividadeEsperada, atividade);
    }

    @Test
    public void testeConsultarAtividadesPorAluno() {
        Aluno alunoEsperado = super.entityManager.find(Aluno.class, 1L);
        TypedQuery<Atividade> query = super.entityManager.createQuery(
                "SELECT a FROM Atividade a INNER JOIN FETCH a.monitoria m INNER JOIN FETCH m.aluno al where CONCAT(al.nome, al.sobrenome) = :nomeAluno",
                Atividade.class);
        String nomeAluno = alunoEsperado.getNome().concat(alunoEsperado.getSobrenome());
        query.setParameter("nomeAluno", nomeAluno);
        List<Atividade> atividades = query.getResultList();
        assertEquals(23, atividades.size());
        for (Atividade atividade : atividades) {
            assertEquals(alunoEsperado, atividade.getMonitoria().getAluno());
        }
    }

    @Test
    public void testeAprovarAtividadesDeMonitoria() {
        Query query = super.entityManager
                .createQuery("UPDATE Atividade AS a SET a.situacao = ?1 WHERE a.situacao = ?2");
        query.setParameter(1, SituacaoAtividade.APROVADA);
        query.setParameter(2, SituacaoAtividade.AGUARDANDO_APROVACAO);
        query.executeUpdate();
        TypedQuery<Long> typedQuery = super.entityManager
                .createQuery("SELECT COUNT(a) FROM Atividade a where a.situacao = :situacao", Long.class);
        typedQuery.setParameter("situacao", SituacaoAtividade.AGUARDANDO_APROVACAO);
        Long quantidadeEsperada = 0L;
        Long quantidade = typedQuery.getSingleResult();
        assertEquals(quantidadeEsperada, quantidade);
    }

    @Test
    public void testeRemoverAtividadesDeMonitoria() {
        Monitoria monitoria = super.entityManager.find(Monitoria.class, 2L);
        Query query = super.entityManager.createQuery("DELETE Atividade AS a WHERE a.monitoria = ?1");
        query.setParameter(1, monitoria);
        query.executeUpdate();
        TypedQuery<Long> typedQuery = super.entityManager
                .createQuery("SELECT COUNT(a) FROM Atividade a where a.monitoria = :monitoria", Long.class);
        typedQuery.setParameter("monitoria", monitoria);
        Long quantidadeEsperada = 0L;
        Long quantidade = typedQuery.getSingleResult();
        assertEquals(quantidadeEsperada, quantidade);
    }
    /*
    @Test
    public void testeCriarAtividadeComHorarioEntradaAposSaida() {
    String mensagemEsperada = "O horrio de sada deve ser posterior ao horrio de entrada";
    Atividade atividade = montarObjetoAtividade();
    atividade.setHorarioEntrada(Util.getTime(14, 30, 0));
    atividade.setHorarioSaida(Util.getTime(14, 0, 0));
    Set<ConstraintViolation<Atividade>> constraintViolations = validator.validate(atividade);
    assertEquals(1, constraintViolations.size());
    String mensagemObtida = constraintViolations.iterator().next().getMessage();
    assertEquals(mensagemEsperada, mensagemObtida);
    } 
        
    @Test
    public void testeCriarAtividadeComHorarioEntradaIgualSaida() {
    String mensagemEsperada = "O horrio de sada deve ser posterior ao horrio de entrada";
    Atividade atividade = montarObjetoAtividade();
    atividade.setHorarioEntrada(Util.getTime(14, 0, 0));
    atividade.setHorarioSaida(Util.getTime(14, 0, 0));
    Set<ConstraintViolation<Atividade>> constraintViolations = validator.validate(atividade);
    assertEquals(1, constraintViolations.size());
    String mensagemObtida = constraintViolations.iterator().next().getMessage();
    assertEquals(mensagemEsperada, mensagemObtida);
    }*/

    @Test
    public void testeCriarAtividadeComDescricaoTamanhoExcedente() {
        String mensagemEsperada = "tamanho deve estar entre 0 e 140";
        Atividade atividade = montarObjetoAtividade();
        String descricao = RandomStringUtils.random(145);
        atividade.setDescricao(descricao);
        Set<ConstraintViolation<Atividade>> constraintViolations = validator.validate(atividade);
        assertEquals(1, constraintViolations.size());
        String mensagemObtida = constraintViolations.iterator().next().getMessage();
        assertEquals(mensagemEsperada, mensagemObtida);
    }

    @Test
    public void testeCriarAtividadeComDescricaoVazia() {
        String mensagemEsperada = "No pode estar em branco";
        Atividade atividade = montarObjetoAtividade();
        atividade.setDescricao("");
        Set<ConstraintViolation<Atividade>> constraintViolations = validator.validate(atividade);
        String mensagemObtida = constraintViolations.iterator().next().getMessage();
        assertEquals(1, constraintViolations.size());
        assertEquals(mensagemEsperada, mensagemObtida);
    }

    @Test
    public void testeCriarAtividadeComObservacaoTamanhoExcedente() {
        String mensagemEsperada = "tamanho deve estar entre 0 e 140";
        Atividade atividade = montarObjetoAtividade();
        String descricao = RandomStringUtils.random(145);
        atividade.setDescricao(descricao);
        Set<ConstraintViolation<Atividade>> constraintViolations = validator.validate(atividade);
        assertEquals(1, constraintViolations.size());
        String mensagemObtida = constraintViolations.iterator().next().getMessage();
        assertEquals(mensagemEsperada, mensagemObtida);
    }
    /*
    @Test
    public void testeCriarAtividadeComAtributosInvalidos() {
    Atividade atividade = montarObjetoAtividade();
    atividade.setData(null);
    atividade.setDescricao(null);
    atividade.setMonitoria(null);
    atividade.setHorarioEntrada(null);
    atividade.setHorarioSaida(null);
    atividade.setSituacao(null);
    Set<ConstraintViolation<Atividade>> constraintViolations = validator.validate(atividade);
    assertEquals(7, constraintViolations.size());
        
    }
        
    @Test
    public void testeCriarAtividadeForaDoSemestreEmPeriodo() {    
    Atividade atividade = montarObjetoAtividade();
    atividade.setData(Util.getDate(14, 11, 2016));
    } */

    @Test
    public void testeCriarAtividadeValida() {
        Atividade atividade = montarObjetoAtividade();
        Set<ConstraintViolation<Atividade>> constraintViolations = validator.validate(atividade);
        assertEquals(0, constraintViolations.size());
    }

    private Atividade montarObjetoAtividade() {
        Atividade atividade = new Atividade();
        Date date = Calendar.getInstance().getTime();
        /*atividade.setData(date);
        atividade.setDescricao("Descrio da Atividade");
        atividade.setHorarioEntrada(Util.getTime(14, 0, 0));
        atividade.setHorarioSaida(Util.getTime(15, 0, 0));*/
        atividade.setObservacoes("Observao da Atividade");
        atividade.setSituacao(SituacaoAtividade.APROVADA);
        atividade.setMonitoria(super.entityManager.find(Monitoria.class, 1L));
        return atividade;
    }

}