package br.gov.al.saude.rhd.core.domain;
import static br.gov.al.saude.test.ConstantesTestHelper.MensagensRetorno.MSG_ERRO_SERVIDOR_NAO_EXISTE;
import static br.gov.al.saude.test.ConstantesTestHelper.ServidorConstantes.SEQUENCIAL_SERVIDOR_LUCIANO_BARBOSA_1;
import static org.junit.Assert.assertTrue;
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.consulta.restricao.Restricoes;
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.validador.Validador;
import br.gov.al.saude.rhd.core.domain.servidor.ServidorService;
import br.gov.al.saude.rhd.core.domain.servidor.impl.ServidorServiceImpl;
import br.gov.al.saude.rhd.core.infrastructure.persistence.jpa.ServidorAvaliacaoRepository;
import br.gov.al.saude.rhd.core.infrastructure.persistence.jpa.ServidorRepository;
import br.gov.al.saude.rhd.model.Cronograma;
import br.gov.al.saude.rhd.model.QualificacaoServidorCronograma;
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.test.builder.ServidorAvaliacaoBuilder;
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;
/**
* @author Bruno Lopes
* @since 29/05/2013
*/
public class ServidorServiceImplTest
extends ServiceImplTest
<ServidorView
> {
protected static final Long CRONOGRAMA_2013 = 2013L
;
protected static final Integer PRIMEIRO_REGISTRO_0 =
0;
protected static final Integer TAMANHO_PAGINA_5 =
5;
private ServidorService servidorService
;
private ServidorRepository servidorRepositoryMock
;
private ServidorAvaliacaoRepository servidorAvaliacaoRepositoryMock
;
@Before
public void inicializarContexto
() {
super.
inicializarContexto();
servidorRepositoryMock = getContexto
().
mock(ServidorRepository.
class);
servidorAvaliacaoRepositoryMock = getContexto
().
mock(ServidorAvaliacaoRepository.
class);
validadorMock = getContexto
().
mock(Validador.
class);
servidorService =
new ServidorServiceImpl
(validadorMock, servidorRepositoryMock, servidorAvaliacaoRepositoryMock
);
}
protected GenericService
<ServidorView
> getService
() {
return servidorService
;
}
protected GenericRepository
<ServidorView
> getRepositoryMock
() {
return servidorRepositoryMock
;
}
@Test
public void aoConsultarDadosPessoaisDeveriaDelegarParaOhRepositorio
() {
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
consultarServidorPorSequencialPessoa(new Long(SEQUENCIAL_SERVIDOR_LUCIANO_BARBOSA_1
));
will
(returnValue
(new ServidorView
()));
}});
servidorService.
consultarDadosPessoais(new Long(SEQUENCIAL_SERVIDOR_LUCIANO_BARBOSA_1
));
}
@Test
public void aoConsultarDadosPessoaisComServidorNaoExistenteDeveriaLancarExcecao
() {
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
consultarServidorPorSequencialPessoa(new Long(SEQUENCIAL_SERVIDOR_LUCIANO_BARBOSA_1
));
will
(returnValue
(null));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
servidorService.
consultarDadosPessoais(new Long(SEQUENCIAL_SERVIDOR_LUCIANO_BARBOSA_1
));
}
}, MSG_ERRO_SERVIDOR_NAO_EXISTE
);
}
@Test @
SuppressWarnings("unchecked")
public void aoListarServidorParticipanteDoOrgaoEhCronogramaDeveriaDelegarParaOhRepositorio
() {
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
listarServidorParticipanteDeGrupoDaUnidadeEhCronograma(with
(any
(List.
class)), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
}});
servidorService.
listarServidorParticipanteDeGrupoDaUnidadeEhCronograma(new ArrayList<Long>(), CRONOGRAMA_2013, PRIMEIRO_REGISTRO_0, TAMANHO_PAGINA_5
);
}
@Test @
SuppressWarnings("unchecked")
public void aoListarServidorParticipanteDoOrgaoEhCronogramaDeveriaRetornarUmaLista
() {
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
listarServidorParticipanteDeGrupoDaUnidadeEhCronograma(with
(any
(List.
class)), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
will
(returnValue
(new ArrayList<ServidorView
>()));
}});
List<?> listaRetorno = servidorService.
listarServidorParticipanteDeGrupoDaUnidadeEhCronograma(new ArrayList<Long>(), CRONOGRAMA_2013, PRIMEIRO_REGISTRO_0, TAMANHO_PAGINA_5
);
assertTrue
("Deveria retornar uma lista.", listaRetorno.
getClass().
equals(java.
util.
ArrayList.
class));
}
@Test @
SuppressWarnings("unchecked")
public void aoListarServidorParticipanteDoOrgaoEhCronogramaDeveriaRetornarUmaListaDeServidoresView
() {
final List<ServidorView
> listaServidores =
new ArrayList<ServidorView
>();
listaServidores.
add(new ServidorView
());
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
listarServidorParticipanteDeGrupoDaUnidadeEhCronograma(with
(any
(List.
class)), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
will
(returnValue
(listaServidores
));
}});
List<?> listaRetorno = servidorService.
listarServidorParticipanteDeGrupoDaUnidadeEhCronograma(new ArrayList<Long>(), CRONOGRAMA_2013, PRIMEIRO_REGISTRO_0, TAMANHO_PAGINA_5
);
assertTrue
("Deveria retornar uma lista de servidores.", listaRetorno.
get(PRIMEIRO_REGISTRO_0
).
getClass().
equals(ServidorView.
class));
}
@Test
public void aoListarQualificacaoServidorDeveriaDelegarParaOhRepositorio
() {
getContexto
().
checking(new Expectations
() {{
oneOf
(servidorRepositoryMock
).
listarQualificacaoServidor(with
(any
(ServidorDadoFuncionalView.
class)));
}});
servidorService.
listarQualificacaoServidor(new ServidorDadoFuncionalView
());
}
@Test
public void aoListarQualificacaoServidorCronogramaDeveriaDelegarParaOhRepositorio
() {
getContexto
().
checking(new Expectations
() {{
oneOf
(servidorRepositoryMock
).
listarQualificacaoServidorCronograma(with
(any
(ServidorAvaliacao.
class)));
}});
servidorService.
listarQualificacaoServidorCronograma(new ServidorAvaliacaoBuilder
().
build());
}
@Test
public void aoListarQualificacaoServidorDeveriaRetornarUmaLista
() {
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
listarQualificacaoServidor(with
(any
(ServidorDadoFuncionalView.
class)));
will
(returnValue
(new ArrayList<ServidorView
>()));
}});
List<?> listaRetorno = servidorService.
listarQualificacaoServidor(new ServidorDadoFuncionalView
());
assertTrue
("Deveria retornar uma lista.", listaRetorno.
getClass().
equals(java.
util.
ArrayList.
class));
}
@Test
public void aoListarQualificacaoServidorDeveriaRetornarUmaListaDeQualificacaoServidorView
() {
final List<QualificacaoServidorView
> listaQualificacoes =
new ArrayList<QualificacaoServidorView
>();
listaQualificacoes.
add(new QualificacaoServidorView
());
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
listarQualificacaoServidor(with
(any
(ServidorDadoFuncionalView.
class)));
will
(returnValue
(listaQualificacoes
));
}});
List<?> listaRetorno = servidorService.
listarQualificacaoServidor(new ServidorDadoFuncionalView
());
assertTrue
("Deveria retornar uma lista de servidores.", listaRetorno.
get(PRIMEIRO_REGISTRO_0
).
getClass().
equals(QualificacaoServidorView.
class));
}
@Test
@
SuppressWarnings("unchecked")
public void aoVincularQualificacaoDeveriaDelegarParaOhRepositorio
() {
QualificacaoServidorView qualificacaoRedes =
new QualificacaoServidorView
();
QualificacaoServidorView
[] qualificacoes =
new QualificacaoServidorView
[1];
qualificacoes
[0] = qualificacaoRedes
;
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorRepositoryMock
).
vincularQualificacao(with
(any
(QualificacaoServidorCronograma.
class)));
oneOf
(servidorRepositoryMock
).
desvincularQualificacoesNaoSelecionadasPorQualificacoesSelecionadas(with
(any
(ServidorDadoFuncionalView.
class)), with
(any
(Cronograma.
class)), with
(any
(List.
class)));
}});
servidorService.
vincularQualificacao(new ServidorDadoFuncionalView
(),
new Cronograma
(), qualificacoes
);
}
@Test
@
SuppressWarnings("unchecked")
public void aoVincularDuasQualificacoesDeveriaDelegarParaOhRepositorioDuasVezes
() {
QualificacaoServidorView qualificacaoRedes =
new QualificacaoServidorView
();
QualificacaoServidorView qualificacaoJava =
new QualificacaoServidorView
();
QualificacaoServidorView
[] qualificacoes =
new QualificacaoServidorView
[2];
qualificacoes
[0] = qualificacaoRedes
;
qualificacoes
[1] = qualificacaoJava
;
getContexto
().
checking(new Expectations
(){{
exactly
(2).
of(servidorRepositoryMock
).
vincularQualificacao(with
(any
(QualificacaoServidorCronograma.
class)));
oneOf
(servidorRepositoryMock
).
desvincularQualificacoesNaoSelecionadasPorQualificacoesSelecionadas(with
(any
(ServidorDadoFuncionalView.
class)), with
(any
(Cronograma.
class)), with
(any
(List.
class)));
}});
servidorService.
vincularQualificacao(new ServidorDadoFuncionalView
(),
new Cronograma
(), qualificacoes
);
}
@Test
@
SuppressWarnings("unchecked")
public void aoVincularSemSelecionarQualificacaoNaoDeveriaDelegarParaOhRepositorio
() {
getContexto
().
checking(new Expectations
(){{
never
(servidorRepositoryMock
).
vincularQualificacao(with
(any
(QualificacaoServidorCronograma.
class)));
oneOf
(servidorRepositoryMock
).
desvincularQualificacoesNaoSelecionadasPorQualificacoesSelecionadas(with
(any
(ServidorDadoFuncionalView.
class)), with
(any
(Cronograma.
class)), with
(any
(List.
class)));
}});
servidorService.
vincularQualificacao(new ServidorDadoFuncionalView
(),
new Cronograma
(),
new QualificacaoServidorView
[0]);
}
@Test
public void aoListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaDeveriaDelegarParaOhServidorAvaliacaoRepository
() {
final List<Restricoes
> restricoes =
new ArrayList<Restricoes
>();
restricoes.
add(Restricoes.
igual("tipoEfetivoExercicio",
"SIM"));
restricoes.
add(Restricoes.
igual("cronograma.numeroAno", 2013L
));
restricoes.
add(Restricoes.
igual("nome",
"Antonio Geroncio"));
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorAvaliacaoRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
never
(servidorRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(restricoes
), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
}});
servidorService.
listarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes,
new Integer(0),
new Integer(0));
}
@Test @
SuppressWarnings("unchecked")
public void aoListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaDeveriaDelegarParaOhServidorRepository
() {
final List<Restricoes
> restricoes =
new ArrayList<Restricoes
>();
restricoes.
add(Restricoes.
igual("nome",
"Antonio Geroncio"));
restricoes.
add(Restricoes.
igual("cronograma.numeroAno", 2013L
));
getContexto
().
checking(new Expectations
(){{
never
(servidorAvaliacaoRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
oneOf
(servidorRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(any
(List.
class)), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
}});
servidorService.
listarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes,
new Integer(0),
new Integer(0));
}
@Test @
SuppressWarnings("unchecked")
public void aoListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaComRestricaoCronogramaNulaDeveriaDelegarParaOhServidorRepository
() {
final List<Restricoes
> restricoes =
new ArrayList<Restricoes
>();
restricoes.
add(Restricoes.
igual("cronograma.numeroAno",
null));
getContexto
().
checking(new Expectations
(){{
never
(servidorAvaliacaoRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
oneOf
(servidorRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(any
(List.
class)), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
}});
servidorService.
listarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes,
new Integer(0),
new Integer(0));
}
@Test
public void aoListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaComListaRestricoesVaziaDeveriaNaoDelegarParaOhServidorRepository
() {
final List<Restricoes
> restricoes =
new ArrayList<Restricoes
>();
getContexto
().
checking(new Expectations
(){{
never
(servidorAvaliacaoRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
never
(servidorRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(restricoes
), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
}});
servidorService.
listarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes,
new Integer(0),
new Integer(0));
}
@Test
public void aoListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaComListaRestricoesNulaDeveriaNaoDelegarParaOhRepository
() {
final List<Restricoes
> restricoes =
null;
getContexto
().
checking(new Expectations
(){{
never
(servidorAvaliacaoRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
never
(servidorRepositoryMock
).
listarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(restricoes
), with
(any
(Long.
class)), with
(any
(Integer.
class)), with
(any
(Integer.
class)));
}});
servidorService.
listarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes,
new Integer(0),
new Integer(0));
}
@Test
public void aoObterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaDeveriaDelegarParaOhServidorAvaliacaoRepository
() {
final List<Restricoes
> restricoes =
new ArrayList<Restricoes
>();
restricoes.
add(Restricoes.
igual("tipoEfetivoExercicio",
"SIM"));
restricoes.
add(Restricoes.
igual("cronograma.numeroAno", 2013L
));
restricoes.
add(Restricoes.
igual("nome",
"Antonio Geroncio"));
getContexto
().
checking(new Expectations
(){{
oneOf
(servidorAvaliacaoRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
));
never
(servidorRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(restricoes
));
}});
servidorService.
obterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes
);
}
@Test @
SuppressWarnings("unchecked")
public void aoObterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaDeveriaDelegarParaOhServidorRepository
() {
final List<Restricoes
> restricoes =
new ArrayList<Restricoes
>();
restricoes.
add(Restricoes.
igual("cronograma.numeroAno", 2013L
));
restricoes.
add(Restricoes.
igual("nome",
"Antonio Geroncio"));
getContexto
().
checking(new Expectations
(){{
never
(servidorAvaliacaoRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
));
oneOf
(servidorRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(any
(List.
class)));
}});
servidorService.
obterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes
);
}
@Test @
SuppressWarnings("unchecked")
public void aoObterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaComListaRestricoesNulaDeveriaNaoDelegarParaOhRepository
() {
final List<Restricoes
> restricoes =
null;
getContexto
().
checking(new Expectations
(){{
never
(servidorAvaliacaoRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
));
never
(servidorRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(any
(List.
class)));
}});
servidorService.
obterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes
);
}
@Test @
SuppressWarnings("unchecked")
public void aoObterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemandaComListaRestricoesVaziaDeveriaNaoDelegarParaOhServidorRepository
() {
final List<Restricoes
> restricoes =
new ArrayList<Restricoes
>();
getContexto
().
checking(new Expectations
(){{
never
(servidorAvaliacaoRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorAvaliacao(with
(restricoes
));
never
(servidorRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorDadoFuncionalViewDtoPorServidorDadoFuncional(with
(any
(List.
class)));
}});
servidorService.
obterQuantidadeDeRegistrosListarServidorDadoFuncionalParticipacaoAvaliacaoPorDemanda(restricoes
);
}
@Test @
SuppressWarnings("unchecked")
public void aoObterQuantidadeDeRegistrosListarServidorParticipanteDeGrupoDaUnidadeEhCronogramaDeveriaDelegarParaOhService
() {
getContexto
().
checking(new Expectations
() {{
oneOf
(servidorRepositoryMock
).
obterQuantidadeDeRegistrosListarServidorParticipanteDeGrupoDaUnidadeEhCronograma(with
(any
(List.
class)), with
(any
(Long.
class)));
}});
servidorService.
obterQuantidadeDeRegistrosListarServidorParticipanteDeGrupoDaUnidadeEhCronograma(new ArrayList<Long>(),
new Long(0));
}
}