Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.gov.al.saude.rhd.core.domain;

import static br.gov.al.saude.test.ConstantesTestHelper.ServidorConstantes.MATRICULA_LUCIANO_BARBOSA_2301011;
import static br.gov.al.saude.test.ConstantesTestHelper.SolicitacaoRevisaoConstantes.DESCRICAO_SOLICITACAO_NA_SOLICITACAO_ANTERIOR_CORRECAO_EFETUADA_MAS_A_NOTA_CONTINUA_A_MESMA;
import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.List;

import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

import br.gov.al.saude.framework.core.interfaces.Cadastrar;
import br.gov.al.saude.framework.core.validador.Validador;
import br.gov.al.saude.rhd.core.domain.avaliacao.AvaliacaoService;
import br.gov.al.saude.rhd.core.domain.avaliacao.impl.AvaliacaoServiceImpl;
import br.gov.al.saude.rhd.core.infrastructure.persistence.jpa.AvaliacaoDesempenhoRepository;
import br.gov.al.saude.rhd.core.infrastructure.persistence.jpa.AvaliacaoRepository;
import br.gov.al.saude.rhd.core.infrastructure.persistence.jpa.ServidorFaltaRepository;
import br.gov.al.saude.rhd.core.infrastructure.persistence.jpa.ServidorRepository;
import br.gov.al.saude.rhd.model.Avaliacao;
import br.gov.al.saude.rhd.model.AvaliacaoDesempenho;
import br.gov.al.saude.rhd.model.QuestaoAvaliacaoDesempenho;
import br.gov.al.saude.rhd.model.RevisaoAvaliacao;
import br.gov.al.saude.rhd.model.RevisaoAvaliacaoDesempenho;
import br.gov.al.saude.rhd.model.RevisaoAvaliacaoDesempenhoId;
import br.gov.al.saude.rhd.model.ServidorAvaliacao;
import br.gov.al.saude.rhd.model.view.QualificacaoServidorView;
import br.gov.al.saude.rhd.model.view.ServidorDadoFuncionalView;
import br.gov.al.saude.rhd.model.view.ServidorView;
import br.gov.al.saude.rhd.parametros.ParametrosConsultarRevisaoAvaliacaoNaoRespondida;
import br.gov.al.saude.rhd.tipo.TipoAvaliacao;
import br.gov.al.saude.rhd.tipo.TipoAvaliacaoDesempenho;
import br.gov.al.saude.rhd.tipo.TipoQualificacao;
import br.gov.al.saude.rhd.tipo.TipoQuestao;
import br.gov.al.saude.rhd.tipo.TipoRespostaMultiplaEscolha;
import br.gov.al.saude.rhd.tipo.TipoRevisao;
import br.gov.al.saude.sca.model.usuario.view.UsuarioView;
import br.gov.al.saude.test.builder.AvaliacaoDesempenhoBuilder;
import br.gov.al.saude.test.builder.QualificacaoServidorBuilder;
import br.gov.al.saude.test.builder.QuestaoAvaliacaoDesempenhoBuilder;
import br.gov.al.saude.test.builder.RevisaoAvaliacaoBuilder;
import br.gov.al.saude.test.builder.RevisaoAvaliacaoDesempenhoBuilder;
import br.gov.al.saude.test.builder.ServidorAvaliacaoBuilder;
import br.gov.al.saude.test.builder.UsuarioViewBuilder;
import br.gov.al.saude.test.util.CommandSemMensagem;
import br.gov.al.saude.test.util.VerificadorLancamentoException;

@RunWith(JMock.class)
public class AvaliacaoServiceImplTest {
        @RunWith(Suite.class)
        @Suite.SuiteClasses({
                AoVisualizarNotaAvaliacao.AoCalcularPontuacaoExtra.class,
                AoVisualizarNotaAvaliacao.AoCalcularNotaAssiduidade.class,
                AoVisualizarNotaAvaliacao.AoCalcularNotaQualificacao.class,
                AoVisualizarNotaAvaliacao.AoCalcularNotaDesempenho.class,
                AoVisualizarNotaAvaliacao.AoCalcularNotaResultadoFinal.class,
                AoVisualizarNotaAvaliacao.AoConsultarIhSetarSolicitacoesDeRevisaoDasAvaliacoes.class,
                AoSolicitarRevisaoAvaliacao.class,
                AoResponderSolicitacaoRevisao.class,
                AoConsultarRevisaoNaoRespondida.class,
                AoObterQuantidadeRegistrosConsultarRevisaoNaoRespondida.class,
                AoConsultarRevisaoAvaliacaoPorSequencial.class
        })
       
        public static class AllTests{}

        protected String ROLE_AVALIADOR = "RHD_SERVIDOR_RHD_PAPEL";
        protected String ROLE_COORDENADOR = "RHD_COORDENADOR_RHD_PAPEL";
        protected AvaliacaoService avaliacaoService;
        protected ServidorRepository servidorRepositoryMock;
        protected ServidorFaltaRepository servidorFaltaRepositoryMock;
        protected AvaliacaoDesempenhoRepository avaliacaoDesempenhoRepositoryMock;
        protected AvaliacaoRepository avaliacaoRepositoryMock;
        protected Validador validadorMock;
        protected Mockery contexto = new JUnit4Mockery();
        protected ParametrosConsultarRevisaoAvaliacaoNaoRespondida parametrosConsultarRevisaoAvaliacaoNaoRespondida;
        protected UsuarioView usuario;

        @Before
        public void inicializarContexto(){
                servidorRepositoryMock = contexto.mock(ServidorRepository.class);
                servidorFaltaRepositoryMock = contexto.mock(ServidorFaltaRepository.class);
                avaliacaoRepositoryMock = contexto.mock(AvaliacaoRepository.class);
                avaliacaoDesempenhoRepositoryMock = contexto.mock(AvaliacaoDesempenhoRepository.class);
                validadorMock = contexto.mock(Validador.class);
                avaliacaoService = new AvaliacaoServiceImpl(servidorRepositoryMock, servidorFaltaRepositoryMock,
                avaliacaoRepositoryMock, avaliacaoDesempenhoRepositoryMock, validadorMock);
        }

        public static class AoVisualizarNotaAvaliacao extends AvaliacaoServiceImplTest {

                public static class AoConsultarIhSetarSolicitacoesDeRevisaoDasAvaliacoes extends AoVisualizarNotaAvaliacao {
                        @Test
                        public void aoVisualizarNotaAvaliacaoIhConsultarIhSetarSolicitacaoDeRevisaoAvaliacaoAssiduidadeDeveriaDelegarParaOhRepositorioAvaliacaoRepository() throws Exception {
                                contexto.checking(new Expectations(){{
                                        oneOf(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoIhConsultarIhSetarSolicitacaoDeRevisaoAvaliacaoDesempenhoDeveriaDelegarParaOhRepositorioAvaliacaoRepository() throws Exception {
                                contexto.checking(new Expectations(){{
                                        oneOf(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        oneOf(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoIhConsultarIhSetarSolicitacaoDeRevisaoAvaliacaoQualificacaoDeveriaDelegarParaOhRepositorioAvaliacaoRepository() throws Exception {
                                contexto.checking(new Expectations(){{
                                        oneOf(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        oneOf(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        oneOf(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());
                        }
                }

                public static class AoCalcularPontuacaoExtra extends AvaliacaoServiceImplTest {
                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaDelegarParaOhServidorRepository() throws Exception{
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        oneOf(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(new ArrayList<QualificacaoServidorView>()));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularPontuacaoExtraComo5Porcento() throws Exception {
                                QualificacaoServidorView qualificacaoServidorView = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.PRODUCAO_INTELECTUAL.getValue()).build();
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();
                                listaQualificacaoServidorView.add(qualificacaoServidorView);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(new ServidorAvaliacaoBuilder().build());
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar pontuação extra 5%.", new Double(5),avaliacao.getNotaPontuacaoExtra());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularPontuacaoExtraComoZeroPorcento() throws Exception {
                                QualificacaoServidorView qualificacaoServidorView = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.FORMACAO_ACADEMICA.getValue()).build();
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();
                                listaQualificacaoServidorView.add(qualificacaoServidorView);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(new ServidorAvaliacaoBuilder().build());
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar pontuação extra 0%.", new Double(0),avaliacao.getNotaPontuacaoExtra());
                        }
                       
                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularPontuacaoDesempenhoComoZero() throws Exception {
                                ServidorView servidorView = new ServidorView();
                                ServidorAvaliacao servidorAvaliacao = new ServidorAvaliacaoBuilder().comServidor(servidorView).build();
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});
                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(servidorAvaliacao);
                                assertEquals("Deveria calcular nota avaliação desempenho como zero.", new Double(0), avaliacao.getNotaDesempenho());
                        }
                }

                public static class AoCalcularNotaAssiduidade extends AoVisualizarNotaAvaliacao {
                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaDelegarParaOhServidorFaltaRepository() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(new ArrayList<QualificacaoServidorView>()));
                                        oneOf(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoComServidorQuePossuiUmaFaltaDeveriaCalcularAssiduidadeComoVintePorcento() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(1L));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar assiduidade 20%.", new Double(20), avaliacao.getNotaAssiduidade());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoComServidorQueNaoPossuiFaltaDeveriaCalcularAssiduidadeComoVintePorcento() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(0L));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar assiduidade 20%.", new Double(20),avaliacao.getNotaAssiduidade());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoComServidorQuePossuiCincoFaltasDeveriaCalcularAssiduidadeComoZeroPorcento() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(5L));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar assiduidade 0%.", new Double(0),avaliacao.getNotaAssiduidade());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoComServidorQuePossuiSeisFaltasDeveriaCalcularAssiduidadeComoZeroPorcento() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(6L));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar assiduidade 0%.", new Double(0),avaliacao.getNotaAssiduidade());
                        }
                       
                        @Test
                        public void aoVisualizarNotaAvaliacaoComServidorQuePossuiTresFaltasDeveriaCalcularAssiduidadeComoDezPorcento() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(3L));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar assiduidade 10%.", new Double(10),avaliacao.getNotaAssiduidade());
                        }
                       
                        @Test
                        public void aoVisualizarNotaAvaliacaoComServidorQuePossuiQuatroFaltasDeveriaCalcularAssiduidadeComoDezPorcento() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(4L));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar assiduidade 10%.", new Double(10),avaliacao.getNotaAssiduidade());
                        }
                       
                }

                public static class AoCalcularNotaQualificacao extends AoVisualizarNotaAvaliacao {
                       
                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaDelegarParaOhAvaliacaoRepository() throws Exception {
                                ServidorAvaliacao servidorAvaliacao = criarServidorAvaliacaoPadrao();
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(new ArrayList<QualificacaoServidorView>()));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        oneOf(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(servidorAvaliacao);
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoComQualificaoComplementarDe40HorasIhCargaHorariaExigida40DeveriaCalcularQualificacaoCom10Porcento() throws Exception {
                                ServidorAvaliacao servidorAvaliacao = criarServidorAvaliacaoPadrao();
                                QualificacaoServidorView qualificacaoServidorView = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.FORMACAO_COMPLEMENTAR.getValue()).comCargaHoraria("40") .build();
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();
                                listaQualificacaoServidorView.add(qualificacaoServidorView);
                                contexto.checking(new Expectations(){{
                                       
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        will(returnValue(40));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(servidorAvaliacao);

                                assertEquals("Deveria retornar assiduidade 10%.", new Double(10), avaliacao.getNotaQualificacao());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoComQualificaoComplementarDe40HorasIhParticipaoEmEventoDe10HorasIhCargaHorariaExigida40DeveriaCalcularQualificacaoCom10Porcento() throws Exception {
                                ServidorAvaliacao servidorAvaliacao = criarServidorAvaliacaoPadrao();
                                QualificacaoServidorView qualificacaoServidorViewCompementar = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.FORMACAO_COMPLEMENTAR.getValue()).comCargaHoraria("40") .build();
                                QualificacaoServidorView qualificacaoServidorViewParticipacaoEventos = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.PARTICIPACAO_EVENTOS.getValue()).comCargaHoraria("10") .build();
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();
                                listaQualificacaoServidorView.add(qualificacaoServidorViewCompementar);
                                listaQualificacaoServidorView.add(qualificacaoServidorViewParticipacaoEventos);
                               
                                contexto.checking(new Expectations(){{
                                       
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        will(returnValue(40));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(servidorAvaliacao);

                                assertEquals("Deveria retornar assiduidade 10%.", new Double(10),avaliacao.getNotaQualificacao());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoComQualificaoComplementarDe30HorasIhCargaHorariaExigida40DeveriaCalcularQualificacaoCom7Ponto5Porcento() throws Exception {
                                ServidorAvaliacao servidorAvaliacao = criarServidorAvaliacaoPadrao();
                                QualificacaoServidorView qualificacaoServidorView = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.FORMACAO_COMPLEMENTAR.getValue()).comCargaHoraria("30") .build();
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();
                                listaQualificacaoServidorView.add(qualificacaoServidorView);
                               
                                contexto.checking(new Expectations(){{
                                       
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        will(returnValue(40));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(servidorAvaliacao);

                                assertEquals("Deveria retornar assiduidade 7.5%.", new Double(7.5),avaliacao.getNotaQualificacao());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoSemQualificaoComplementarIhCargaHorariaExigida40DeveriaCalcularQualificacaoComZeroPorcento() throws Exception {
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        will(returnValue(40));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar assiduidade 0%.", new Double(0),avaliacao.getNotaQualificacao());
                        }
                }

                public static class AoCalcularNotaDesempenho extends AoVisualizarNotaAvaliacao {
                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaDelegarParaAvaliacaoDesempenhoRepositoryListarAutoAvaliacao() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        oneOf(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(new ArrayList<QuestaoAvaliacaoDesempenho>()));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());      
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaDelegarParaAvaliacaoDesempenhoRepositoryListarAvaliacao() throws Exception {
                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        oneOf(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(new ArrayList<QuestaoAvaliacaoDesempenho>()));
                                }});

                                avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());      
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularNovaDesempenhoComo70Porcento() throws Exception {
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaSuperaEsperado = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.SUPERA_O_ESPERADO.getValue()).build();

                                QuestaoAvaliacaoDesempenho questaoAutoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaSuperaEsperado) .comTipoAvaliacao(TipoAvaliacaoDesempenho.AUTOAVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAutoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAutoAvaliacao.add(questaoAutoAvaliacao);

                                QuestaoAvaliacaoDesempenho questaoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaSuperaEsperado) .comTipoAvaliacao(TipoAvaliacaoDesempenho.AVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAvaliacao.add(questaoAvaliacao);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAutoAvaliacao));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAvaliacao));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar desempenho 70%.", new Double(70),avaliacao.getNotaDesempenho());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularNovaDesempenhoComo59Ponto5Porcento() throws Exception {
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaSuperaEsperado = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.SUPERA_O_ESPERADO.getValue()).build();
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaAtendeOhEsperado = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.ATENDE_O_ESPERADO.getValue()).build();

                                QuestaoAvaliacaoDesempenho questaoAutoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaSuperaEsperado) .comTipoAvaliacao(TipoAvaliacaoDesempenho.AUTOAVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAutoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAutoAvaliacao.add(questaoAutoAvaliacao);

                                QuestaoAvaliacaoDesempenho questaoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaAtendeOhEsperado) .comTipoAvaliacao(TipoAvaliacaoDesempenho.AVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAvaliacao.add(questaoAvaliacao);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAutoAvaliacao));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAvaliacao));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar desempenho 59.5%.", new Double(59.5),avaliacao.getNotaDesempenho());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularNovaDesempenhoComo28Porcento() throws Exception {
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaNaoAtendeOhEsperado = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.NAO_ATENDE_O_ESPERADO.getValue()).build();
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaAtendeParcialmente = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.ATENDE_PARCIALMENTE_O_ESPERADO.getValue()).build();

                                QuestaoAvaliacaoDesempenho questaoAutoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaNaoAtendeOhEsperado) .comTipoAvaliacao(TipoAvaliacaoDesempenho.AUTOAVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAutoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAutoAvaliacao.add(questaoAutoAvaliacao);

                                QuestaoAvaliacaoDesempenho questaoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaAtendeParcialmente) .comTipoAvaliacao(TipoAvaliacaoDesempenho.AVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAvaliacao.add(questaoAvaliacao);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAutoAvaliacao));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAvaliacao));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar desempenho 28%.", new Double(28),avaliacao.getNotaDesempenho());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularNovaDesempenhoComo42Porcento() throws Exception {
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaSuperaOhEsperado = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.SUPERA_O_ESPERADO.getValue()).build();

                                QuestaoAvaliacaoDesempenho questaoAutoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comTipoAvaliacao(TipoAvaliacaoDesempenho.AUTOAVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAutoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAutoAvaliacao.add(questaoAutoAvaliacao);

                                QuestaoAvaliacaoDesempenho questaoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaSuperaOhEsperado).comTipoAvaliacao(TipoAvaliacaoDesempenho.AVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAvaliacao.add(questaoAvaliacao);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAutoAvaliacao));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAvaliacao));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar desempenho 42%.", new Double(42),avaliacao.getNotaDesempenho());
                        }


                }

                public static class AoCalcularNotaResultadoFinal extends AoVisualizarNotaAvaliacao {
                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularResultadoFinalComo67Porcento() throws Exception {
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaSuperaOhEsperado = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.SUPERA_O_ESPERADO.getValue()).build();

                                QuestaoAvaliacaoDesempenho questaoAutoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comTipoAvaliacao(TipoAvaliacaoDesempenho.AUTOAVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAutoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAutoAvaliacao.add(questaoAutoAvaliacao);

                                QuestaoAvaliacaoDesempenho questaoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaSuperaOhEsperado).comTipoAvaliacao(TipoAvaliacaoDesempenho.AVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAvaliacao.add(questaoAvaliacao);

                                QualificacaoServidorView qualificacaoServidorView = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.PRODUCAO_INTELECTUAL.getValue()).build();
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();
                                listaQualificacaoServidorView.add(qualificacaoServidorView);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAutoAvaliacao));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAvaliacao));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(new ServidorAvaliacaoBuilder().build());

                                assertEquals("Deveria retornar desempenho 67%.", new Double(67),avaliacao.getNotaResultadoFinal());
                        }

                        @Test
                        public void aoVisualizarNotaAvaliacaoDeveriaCalcularResultadoFinalComo100Porcento() throws Exception {
                                ServidorAvaliacao servidorAvaliacao = criarServidorAvaliacaoPadrao();
                               
                                AvaliacaoDesempenho avaliacaoDesempenhoRespostaSuperaOhEsperado = new AvaliacaoDesempenhoBuilder().comTipoRespostaMultiplaEscolha(TipoRespostaMultiplaEscolha.SUPERA_O_ESPERADO.getValue()).build();

                                QuestaoAvaliacaoDesempenho questaoAutoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaSuperaOhEsperado).comTipoAvaliacao(TipoAvaliacaoDesempenho.AUTOAVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAutoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAutoAvaliacao.add(questaoAutoAvaliacao);

                                QuestaoAvaliacaoDesempenho questaoAvaliacao = new QuestaoAvaliacaoDesempenhoBuilder().comAvaliacaoDesempenho(avaliacaoDesempenhoRespostaSuperaOhEsperado).comTipoAvaliacao(TipoAvaliacaoDesempenho.AVALIACAO.getValue()).comTipoQuestao(TipoQuestao.MULTIPLA_ESCOLHA.getValue()).build();
                                final List<QuestaoAvaliacaoDesempenho> listaQuestaoAvaliacao = new ArrayList<QuestaoAvaliacaoDesempenho>();
                                listaQuestaoAvaliacao.add(questaoAvaliacao);

                                QualificacaoServidorView qualificacaoServidorProducaoIntelectual = new QualificacaoServidorBuilder().comTipoQualificacao(TipoQualificacao.PRODUCAO_INTELECTUAL.getValue()).build();
                                QualificacaoServidorView qualificacaoServidorFormacaoComplementar = new QualificacaoServidorBuilder().comCargaHoraria("40") .comTipoQualificacao(TipoQualificacao.FORMACAO_COMPLEMENTAR.getValue()).build();
                                final List<QualificacaoServidorView> listaQualificacaoServidorView = new ArrayList<QualificacaoServidorView>();
                                listaQualificacaoServidorView.add(qualificacaoServidorProducaoIntelectual);
                                listaQualificacaoServidorView.add(qualificacaoServidorFormacaoComplementar);

                                contexto.checking(new Expectations(){{
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                        ignoring(servidorRepositoryMock).listarQualificacaoServidorCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQualificacaoServidorView));
                                        ignoring(servidorFaltaRepositoryMock).consultarTotalFaltasServidorNoCronograma(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(0L));
                                        ignoring(avaliacaoRepositoryMock).consultarCargaHorariaExigida(with(any(String.class)), with(any(String.class)));
                                        will(returnValue(10));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAutoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAutoAvaliacao));
                                        ignoring(avaliacaoDesempenhoRepositoryMock).listarQuestaoAvaliacao(with(any(ServidorAvaliacao.class)));
                                        will(returnValue(listaQuestaoAvaliacao));
                                }});

                                Avaliacao avaliacao = avaliacaoService.visualizarNotaAvaliacao(servidorAvaliacao);     

                                assertEquals("Deveria retornar desempenho 100%.", new Double(100),avaliacao.getNotaResultadoFinal());
                        }
                }
               
                protected ServidorAvaliacao criarServidorAvaliacaoPadrao() {
                        ServidorDadoFuncionalView servidorDadoFuncionalView = new ServidorDadoFuncionalView();
                        servidorDadoFuncionalView.setNumeroMatricula(new Long(MATRICULA_LUCIANO_BARBOSA_2301011));
                        ServidorView servidorView = new ServidorView();
                        servidorView.getListaDadosFuncionaisView().add(servidorDadoFuncionalView);
                        ServidorAvaliacao servidorAvaliacao = new ServidorAvaliacaoBuilder()
                                                                                                          .comServidor(servidorView)
                                                                                                          .build();
                        return servidorAvaliacao;
                }
        }
       
        public static class AoSolicitarRevisaoAvaliacao extends AvaliacaoServiceImplTest {
                RevisaoAvaliacao revisaoAvaliacaoTipoAssiduidade;
                RevisaoAvaliacao revisaoAvaliacaoTipoDesempenho;
                List<RevisaoAvaliacaoDesempenho> revisoesAvaliacaoDesempenho;

                @Before
                public void inicializarContexto(){
                        super.inicializarContexto();
                        revisaoAvaliacaoTipoAssiduidade = new RevisaoAvaliacaoBuilder().comTipoAvaliacao(TipoAvaliacao.ASSIDUIDADE.getValue()).build();
                        revisaoAvaliacaoTipoDesempenho = new RevisaoAvaliacaoBuilder().comTipoAvaliacao(TipoAvaliacao.DESEMPENHO.getValue()).build();
                }
               
                @Test
                public void aoSolicitarRevisaoAvaliacaoDesempenhoDeveriaDelegarParaOhRepositorioSolicitarRevisaoAvaliacao() throws Exception {
                        contexto.checking(new Expectations(){{
                                ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                oneOf(avaliacaoRepositoryMock).solicitarRevisaoAvaliacao(with(any(RevisaoAvaliacao.class)));
                                ignoring(validadorMock).validar(revisaoAvaliacaoTipoDesempenho, Cadastrar.class);
                                ignoring(avaliacaoRepositoryMock).solicitarRevisaoAvaliacaoDesempenho(with(any(RevisaoAvaliacaoDesempenho.class)));
                        }});
                       
                        avaliacaoService.solicitarRevisaoAvaliacao(revisaoAvaliacaoTipoDesempenho);
                }
               
                @Test
                public void aoSolicitarRevisaoAvaliacaoDesempenhoDeveriaDelegarParaOhRepositorioSolicitarRevisaoAvaliacaoDesempenho() throws Exception {
                        revisoesAvaliacaoDesempenho = new ArrayList<RevisaoAvaliacaoDesempenho>();
                        revisoesAvaliacaoDesempenho.add(new RevisaoAvaliacaoDesempenhoBuilder()
                                                                                                .comRevisaoAvaliacaoDesempenhoId(new RevisaoAvaliacaoDesempenhoId())
                                                                                                .comSolicitacao(DESCRICAO_SOLICITACAO_NA_SOLICITACAO_ANTERIOR_CORRECAO_EFETUADA_MAS_A_NOTA_CONTINUA_A_MESMA)
                                                                                                .build());
                        revisaoAvaliacaoTipoDesempenho.setRevisoesAvaliacaoDesempenho(revisoesAvaliacaoDesempenho);
                        contexto.checking(new Expectations(){{
                                ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                ignoring(avaliacaoRepositoryMock).solicitarRevisaoAvaliacao(with(any(RevisaoAvaliacao.class)));
                                ignoring(validadorMock).validar(new RevisaoAvaliacaoDesempenhoBuilder().comRevisaoAvaliacaoDesempenhoId(new RevisaoAvaliacaoDesempenhoId()).build(), Cadastrar.class);
                                oneOf(avaliacaoRepositoryMock).solicitarRevisaoAvaliacaoDesempenho(with(any(RevisaoAvaliacaoDesempenho.class)));
                        }});
                       
                        avaliacaoService.solicitarRevisaoAvaliacao(revisaoAvaliacaoTipoDesempenho);
                }
               
                @Test
                public void aoSolicitarRevisaoAvaliacaoAssiduidadeDeveriaDelegarParaOhAvaliacaoRepositorySolicitarRevisaoAvaliacao() throws Exception {
                        contexto.checking(new Expectations(){{
                                ignoring(validadorMock).validar(revisaoAvaliacaoTipoAssiduidade, Cadastrar.class);
                                ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                oneOf(avaliacaoRepositoryMock).solicitarRevisaoAvaliacao(with(any(RevisaoAvaliacao.class)));
                        }});
                       
                        avaliacaoService.solicitarRevisaoAvaliacao(revisaoAvaliacaoTipoAssiduidade);
                }
               
                @Test
                public void aoSolicitarRevisaoAvaliacaoAssiduidadeDeveriaDelegarParaOhValidador() throws Exception {
                        contexto.checking(new Expectations(){{
                                oneOf(validadorMock).validar(revisaoAvaliacaoTipoAssiduidade, Cadastrar.class);
                                ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                ignoring(avaliacaoRepositoryMock).solicitarRevisaoAvaliacao(with(any(RevisaoAvaliacao.class)));
                        }});
                       
                        avaliacaoService.solicitarRevisaoAvaliacao(revisaoAvaliacaoTipoAssiduidade);
                }
               
                @Test
                public void aoSolicitarRevisaoAvaliacaoAssiduidadeDeveriaDelegarParaOhAvaliacaoRepositoryListarRevisaoAvaliacaoServidor() throws Exception {
                        contexto.checking(new Expectations(){{
                                ignoring(validadorMock).validar(revisaoAvaliacaoTipoAssiduidade, Cadastrar.class);
                                oneOf(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                ignoring(avaliacaoRepositoryMock).solicitarRevisaoAvaliacao(with(any(RevisaoAvaliacao.class)));
                        }});
                       
                        avaliacaoService.solicitarRevisaoAvaliacao(revisaoAvaliacaoTipoAssiduidade);
                }
               
                @Test
                public void aoSolicitarRevisaoAvaliacaoAssiduidadeComListaRevisaoComTipoRevisaoRecursoDeveriaLancarExcecao() throws Exception {
                        final List<RevisaoAvaliacao> revisoes = new ArrayList<RevisaoAvaliacao>();
                        RevisaoAvaliacao revisaoAvaliacao = new RevisaoAvaliacaoBuilder()
                                                                                                        .comTipoRevisao(TipoRevisao.RECURSO.getValue())
                                                                                                        .comTipoAvaliacao(TipoAvaliacao.ASSIDUIDADE.getValue())
                                                                                                        .build();
                        revisoes.add(revisaoAvaliacao);
                       
                        contexto.checking(new Expectations(){{
                                ignoring(validadorMock).validar(revisaoAvaliacaoTipoAssiduidade, Cadastrar.class);
                                ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                will(returnValue(revisoes));
                                ignoring(avaliacaoRepositoryMock).solicitarRevisaoAvaliacao(with(any(RevisaoAvaliacao.class)));
                        }});
                       
                        VerificadorLancamentoException.verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem() {
                                @Override
                                public void execute() throws Exception {
                                        avaliacaoService.solicitarRevisaoAvaliacao(revisaoAvaliacaoTipoAssiduidade);
                                }
                        }, "Já foi realizada anteriormente uma revisão do tipo Recurso para a avaliação Assiduidade.");
                }
               
                @Test
                public void aoSolicitarRevisaoAvaliacaoSemInformarSolicitacaoDeveriaLancarExcecaoXXX() throws Exception {
                        revisoesAvaliacaoDesempenho = new ArrayList<RevisaoAvaliacaoDesempenho>();
                        revisoesAvaliacaoDesempenho.add(new RevisaoAvaliacaoDesempenhoBuilder().build());
                        revisaoAvaliacaoTipoDesempenho.setRevisoesAvaliacaoDesempenho(revisoesAvaliacaoDesempenho);
                        contexto.checking(new Expectations(){{
                                ignoring(avaliacaoRepositoryMock).listarRevisaoAvaliacaoServidor(with(any(ServidorAvaliacao.class)), with(any(String.class)));
                                ignoring(avaliacaoRepositoryMock).solicitarRevisaoAvaliacao(with(any(RevisaoAvaliacao.class)));
                                ignoring(validadorMock).validar(new RevisaoAvaliacaoDesempenhoBuilder().comRevisaoAvaliacaoDesempenhoId(new RevisaoAvaliacaoDesempenhoId()).build(), Cadastrar.class);
                                never(avaliacaoRepositoryMock).solicitarRevisaoAvaliacaoDesempenho(with(any(RevisaoAvaliacaoDesempenho.class)));
                        }});
                       
                        VerificadorLancamentoException.verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem() {
                                @Override
                                public void execute() throws Exception {
                                        avaliacaoService.solicitarRevisaoAvaliacao(revisaoAvaliacaoTipoDesempenho);
                                }
                        }, "Obrigatório informar a solicitação.");
                }

        }
       
        public static class AoResponderSolicitacaoRevisao extends AvaliacaoServiceImplTest {
                @Test
                public void aoResponderSolicitacaoRevisaoDeveriaDelegarParaOhRepositorio() throws Exception {
                        contexto.checking(new Expectations(){{
                                oneOf(avaliacaoRepositoryMock).responderSolicitacaoRevisao(with(new RevisaoAvaliacao()));
                        }});
                       
                        avaliacaoService.responderSolicitacaoRevisao(new RevisaoAvaliacao());
                }
        }
       
        public static class AoConsultarRevisaoNaoRespondida extends AvaliacaoServiceImplTest {
               
                @Before
                public void setUp(){
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida = new ParametrosConsultarRevisaoAvaliacaoNaoRespondida();
                }
               
                @Test
                public void informandoUsuarioComPapelComumDeveriaDelegarParaOhRepositorio() throws Exception {
                        usuario = new UsuarioViewBuilder().comRole(ROLE_AVALIADOR).build();
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida.setUsuario(usuario);
                        contexto.checking(new Expectations(){{
                                oneOf(avaliacaoRepositoryMock).consultarRevisaoReconsideracaoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                                never(avaliacaoRepositoryMock).consultarRevisaoRecursoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                        }});
                        avaliacaoService.consultarRevisaoNaoRespondida(parametrosConsultarRevisaoAvaliacaoNaoRespondida);
                }
               
                @Test
                public void informandoUsuarioComPapelCoordenadorDeveriaDelegarParaOhRepositorio() throws Exception {
                        usuario = new UsuarioViewBuilder().comRole(ROLE_COORDENADOR).build();
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida.setUsuario(usuario);
                        contexto.checking(new Expectations(){{
                                oneOf(avaliacaoRepositoryMock).consultarRevisaoReconsideracaoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                                oneOf(avaliacaoRepositoryMock).consultarRevisaoRecursoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                        }});
                        avaliacaoService.consultarRevisaoNaoRespondida(parametrosConsultarRevisaoAvaliacaoNaoRespondida);
                }
               
                @After
                public void tearDown(){
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida = null;
                        usuario = null;
                }
        }
       
        public static class AoObterQuantidadeRegistrosConsultarRevisaoNaoRespondida extends AvaliacaoServiceImplTest {
               
                @Before
                public void setUp(){
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida = new ParametrosConsultarRevisaoAvaliacaoNaoRespondida();
                }
               
                @Test
                public void informandoUsuarioComPapelComumDeveriaDelegarParaOhRepositorio() throws Exception {
                        usuario = new UsuarioViewBuilder().comRole(ROLE_AVALIADOR).build();
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida.setUsuario(usuario);
                        contexto.checking(new Expectations(){{
                                oneOf(avaliacaoRepositoryMock).obterQuantidadeRegistrosConsultarRevisaoReconsideracaoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                                never(avaliacaoRepositoryMock).obterQuantidadeRegistrosConsultarRevisaoRecursoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                        }});
                        avaliacaoService.obterQuantidadeRegistrosConsultarRevisaoNaoRespondida(parametrosConsultarRevisaoAvaliacaoNaoRespondida);
                }
               
                @Test
                public void informandoUsuarioComPapelCoordenadorDeveriaDelegarParaOhRepositorio() throws Exception {
                        usuario = new UsuarioViewBuilder().comRole(ROLE_COORDENADOR).build();
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida.setUsuario(usuario);
                        contexto.checking(new Expectations(){{
                                oneOf(avaliacaoRepositoryMock).obterQuantidadeRegistrosConsultarRevisaoReconsideracaoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                                oneOf(avaliacaoRepositoryMock).obterQuantidadeRegistrosConsultarRevisaoRecursoNaoRespondida(with(same(parametrosConsultarRevisaoAvaliacaoNaoRespondida)));
                        }});
                        avaliacaoService.obterQuantidadeRegistrosConsultarRevisaoNaoRespondida(parametrosConsultarRevisaoAvaliacaoNaoRespondida);
                }
               
                @After
                public void tearDown(){
                        parametrosConsultarRevisaoAvaliacaoNaoRespondida = null;
                        usuario = null;
                }
        }
       
        public static class AoConsultarRevisaoAvaliacaoPorSequencial extends AvaliacaoServiceImplTest {
               
                @Test
                public void informandoSequencialValidoDeveriaDelegarParaOhRepositorio() throws Exception {
                        contexto.checking(new Expectations(){{
                                oneOf(avaliacaoRepositoryMock).consultarRevisaoAvaliacaoPorSequencial(with(any(Long.class)));
                        }});
                        avaliacaoService.consultarRevisaoAvaliacaoPorSequencial(new Long("1"));
                }
               
               
                @Test
                public void informandoSequencialNuloDeveriaDelegarParaOhRepositorio() throws Exception {
                        contexto.checking(new Expectations(){{
                                oneOf(avaliacaoRepositoryMock).consultarRevisaoAvaliacaoPorSequencial(with(any(Long.class)));
                        }});
                        avaliacaoService.consultarRevisaoAvaliacaoPorSequencial(null);
                }
               
        }

}