Subversion Repositories Integrator Subversion

Rev

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

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

import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.CODIGO_ORGAO_JA_CADASTRADO;
import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.DESCRICAO_ORGAO_JA_CADASTRADA;
import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.NAO_EH_POSSIVEL_INATIVAR_ORGAO_VINCULADO_A_UNIDADE_ATIVA;

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

import org.jmock.Expectations;
import org.junit.Before;
import org.junit.Test;

import br.gov.al.saude.framework.core.generic.GenericRepository;
import br.gov.al.saude.framework.core.generic.GenericService;
import br.gov.al.saude.framework.core.interfaces.Alterar;
import br.gov.al.saude.framework.core.interfaces.Cadastrar;
import br.gov.al.saude.framework.core.validador.Validador;
import br.gov.al.saude.srv.core.domain.orgao.OrgaoService;
import br.gov.al.saude.srv.core.domain.orgao.impl.OrgaoServiceImpl;
import br.gov.al.saude.srv.core.infrastructure.persistence.jpa.orgao.OrgaoRepository;
import br.gov.al.saude.srv.core.infrastructure.persistence.jpa.unidade.UnidadeRepository;
import br.gov.al.saude.srv.model.Orgao;
import br.gov.al.saude.srv.model.Unidade;
import br.gov.al.saude.test.unidade.generic.service.ServiceImplTest;
import br.gov.al.saude.test.util.CommandSemMensagem;
import br.gov.al.saude.test.util.VerificadorLancamentoException;

public class OrgaoServiceImplTest extends ServiceImplTest<Orgao> {

        private OrgaoService orgaoService;
        private OrgaoRepository orgaoRepositoryMock;
        private UnidadeRepository unidadeRepositoryMock;

        private Orgao getOrgao() {
                Orgao orgao = new Orgao();
                orgao.setSequencial(1);
                orgao.setCodigoOrgao(1500);
                orgao.setDescricao("SECRETARIA DE ALAGOAS");
                orgao.setEsfera("E");
                orgao.setSigla("SAL");
                orgao.setAtivo(false);
                return orgao;
        }

        private List<Unidade> getUnidadeAtivas() {
                List<Unidade> unidadesAtiva = new ArrayList<Unidade>();
                return unidadesAtiva;
        }
       
        @Before
        public void inicializarContexto() {
                orgaoRepositoryMock = getContexto().mock(OrgaoRepository.class);
                unidadeRepositoryMock = getContexto().mock(UnidadeRepository.class);
                validadorMock = getContexto().mock(Validador.class);
                orgaoService = new OrgaoServiceImpl(validadorMock, orgaoRepositoryMock, unidadeRepositoryMock);
                Orgao orgao = new Orgao();
                orgao.setAtivo(true);
                setEntidade(orgao);
        }
       
        @Override
        protected GenericService<Orgao> getService() {
                return orgaoService;
        }
       
        @Override
        protected void expectativasDeNegocioFuncionalidadeCadastrar() {
                getContexto().checking(new Expectations(){{
                        never(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        oneOf(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        will(returnValue(null));
                }});
        }
       
        @Override
        protected void expectativasDeNegocioFuncionalidadeAlterar() {
                getContexto().checking(new Expectations(){{
                        never(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        oneOf(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        will(returnValue(null));
                        never(unidadeRepositoryMock).consultarUnidadeAtivasPorOrgao(with(any(Orgao.class)));
                }});
        }
       
        @Test
        public void aoCadastrarOrgaoComCodigoDeveriaDelegarParaOhRepositorio() {
                final Orgao orgao = getOrgao();
               
                getContexto().checking(new Expectations(){{
                        oneOf(getValidadorMock()).validar(with(same(orgao)), with(new Class<?>[]{ Cadastrar.class }));
                        oneOf(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        will(returnValue(null));
                        oneOf(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        will(returnValue(null));
                        oneOf(orgaoRepositoryMock).cadastrar(with(same(orgao)));
                }});

                orgaoService.cadastrar(orgao);
        }

        @Test
        public void aoCadastrarOrgaoComCodigoJahCadastradoDeveriaRetornarMensagem() {
                final Orgao orgao = getOrgao();
               
                getContexto().checking(new Expectations(){{
                        oneOf(getValidadorMock()).validar(with(same(orgao)), with(new Class<?>[]{ Cadastrar.class }));
                        oneOf(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        will(returnValue(orgao));
                        never(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        never(orgaoRepositoryMock).cadastrar(with(same(orgao)));
                }});

                VerificadorLancamentoException.verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem() {
                        @Override
                        public void execute() throws Exception {
                                orgaoService.cadastrar(orgao);
                        }
                }, CODIGO_ORGAO_JA_CADASTRADO);
        }
       
        @Test
        public void aoCadastrarOrgaoComDescricaoJahCadastradaDeveriaRetornarMensagem() {
                final Orgao orgao = getOrgao();
               
                getContexto().checking(new Expectations(){{
                        oneOf(getValidadorMock()).validar(with(same(orgao)), with(new Class<?>[]{ Cadastrar.class }));
                        oneOf(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        will(returnValue(null));
                        oneOf(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        will(returnValue(orgao));
                        never(orgaoRepositoryMock).cadastrar(with(same(orgao)));
                }});

                VerificadorLancamentoException.verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem() {
                        @Override
                        public void execute() throws Exception {
                                orgaoService.cadastrar(orgao);
                        }
                }, DESCRICAO_ORGAO_JA_CADASTRADA);
        }
       
        @Test
        public void aoAlterarOrgaoParaInativoComUnidadesAtivasDeveriaRetornarMensagem() {
                final Orgao orgao = getOrgao();
                final List<Unidade> unidadesAtiva = getUnidadeAtivas();
                unidadesAtiva.add(new Unidade());
               
                getContexto().checking(new Expectations(){{
                        oneOf(getValidadorMock()).validar(with(any(Orgao.class)), with(new Class<?>[]{ Alterar.class }));
                        oneOf(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        will(returnValue(null));
                        oneOf(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        will(returnValue(null));
                        oneOf(unidadeRepositoryMock).consultarUnidadeAtivasPorOrgao(with(any(Orgao.class)));
                        will(returnValue(unidadesAtiva));
                        never(orgaoRepositoryMock).alterar(with(same(orgao)));
                }});

                VerificadorLancamentoException.verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem() {
                        @Override
                        public void execute() throws Exception {
                                orgaoService.alterar(orgao);
                        }
                }, NAO_EH_POSSIVEL_INATIVAR_ORGAO_VINCULADO_A_UNIDADE_ATIVA);
        }
       
        @Test
        public void aoAlterarOrgaoParaInativoSemUnidadesAtivasDeveriaDelegarParaOhRepositorio() {
                final Orgao orgao = getOrgao();
                final List<Unidade> unidadesAtiva = getUnidadeAtivas();
               
                getContexto().checking(new Expectations(){{
                        oneOf(getValidadorMock()).validar(with(any(Orgao.class)), with(new Class<?>[]{ Alterar.class }));
                        oneOf(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        will(returnValue(null));
                        oneOf(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        will(returnValue(null));
                        oneOf(unidadeRepositoryMock).consultarUnidadeAtivasPorOrgao(with(any(Orgao.class)));
                        will(returnValue(unidadesAtiva));
                        oneOf(orgaoRepositoryMock).alterar(with(same(orgao)));
                }});

                orgaoService.alterar(orgao);
        }

        @Test
        public void aoAlterarOrgaoSemAlterarDescricaoIhCodigoDeveriaDelegarParaOhRepositorio() {
                final Orgao orgao = getOrgao();
                final List<Unidade> unidadesAtiva = getUnidadeAtivas();
               
                getContexto().checking(new Expectations(){{
                        oneOf(getValidadorMock()).validar(with(any(Orgao.class)), with(new Class<?>[]{ Alterar.class }));
                        oneOf(orgaoRepositoryMock).consultarPorCodigoOrgao(with(any(Integer.class)));
                        will(returnValue(orgao));
                        oneOf(orgaoRepositoryMock).consultarPorDescricao(with(any(String.class)));
                        will(returnValue(orgao));
                        oneOf(unidadeRepositoryMock).consultarUnidadeAtivasPorOrgao(with(any(Orgao.class)));
                        will(returnValue(unidadesAtiva));
                        oneOf(orgaoRepositoryMock).alterar(with(same(orgao)));
                }});

                orgaoService.alterar(orgao);
        }
       
        @Test
        public void aoConsultarOrgaosDeveriaDelegarParaOhRepositorio() {               
                getContexto().checking(new Expectations(){{
                        oneOf(orgaoRepositoryMock).consultarOrgaos(with(any(Orgao.class)), with(any(Integer.class)), with(any(Integer.class)));
                }});

                orgaoService.consultarOrgaos(getOrgao(), 0, 5);
        }
       
        @Test
        public void aoObterQuantidadeDeRegistrosDeConsultarOrgaosDeveriaDelegarParaOhRepositorio() {           
                getContexto().checking(new Expectations(){{
                        oneOf(orgaoRepositoryMock).obterQuantidadeDeRegistrosDeConsultarOrgaos(with(any(Orgao.class)));
                }});

                orgaoService.obterQuantidadeDeRegistrosDeConsultarOrgaos(getOrgao());
        }
       
       
        @Override
        protected GenericRepository<Orgao> getRepositoryMock() {
                return orgaoRepositoryMock;
        }

        @Test
        public void aoListarOrgaosDeveriaDelegarParaOhRepositorio() {          
                getContexto().checking(new Expectations(){{
                        oneOf(orgaoRepositoryMock).listarOrgao();
                }});
               
                orgaoService.listarOrgao();
        }
       
        @Test
        public void aoListarOrgaoAtivoDeveriaDelegarParaOhRepositorio() {              
                getContexto().checking(new Expectations(){{
                        oneOf(orgaoRepositoryMock).listarOrgaoAtivo();
                }});
                orgaoService.listarOrgaoAtivo();
        }
}