package br.gov.al.saude.rhd.core.domain;
import static br.gov.al.saude.test.ConstantesTestHelper.CronogramaConstantes.ANO_2012;
import static br.gov.al.saude.test.ConstantesTestHelper.CronogramaEtapaConstantes.DATA_FINAL_01_06_2013;
import static br.gov.al.saude.test.ConstantesTestHelper.CronogramaEtapaConstantes.DATA_INICIAL_01_01_2013;
import static br.gov.al.saude.test.ConstantesTestHelper.CronogramaEtapaConstantes.DATA_INICIAL_01_03_2013;
import static br.gov.al.saude.test.ConstantesTestHelper.EtapaConstantes.SEQUENCIAL_ETAPA_1;
import static br.gov.al.saude.test.ConstantesTestHelper.EtapaConstantes.SEQUENCIAL_ETAPA_3;
import java.util.ArrayList;
import java.util.HashSet;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JMock;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import br.gov.al.saude.framework.core.exception.NegocioException;
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.util.DataUtils;
import br.gov.al.saude.framework.core.validador.Validador;
import br.gov.al.saude.rhd.core.domain.cronograma.CronogramaService;
import br.gov.al.saude.rhd.core.domain.cronograma.impl.CronogramaServiceImpl;
import br.gov.al.saude.rhd.core.infrastructure.persistence.jpa.CronogramaRepository;
import br.gov.al.saude.rhd.model.Cronograma;
import br.gov.al.saude.rhd.model.CronogramaEtapa;
import br.gov.al.saude.rhd.model.Etapa;
import br.gov.al.saude.rhd.model.dto.PeriodoDTO;
import br.gov.al.saude.sca.model.usuario.view.UsuarioView;
import br.gov.al.saude.test.builder.CronogramaBuilder;
import br.gov.al.saude.test.builder.CronogramaEtapaBuilder;
import br.gov.al.saude.test.builder.EtapaBuilder;
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 Anderson Gomes
* @since 10/05/2013
*/
@RunWith
(JMock.
class)
public class CronogramaServiceImplTest
extends ServiceImplTest
<Cronograma
> {
private static final String MENSAGEM_O_CRONOGRAMA_INFORMADO_JA_EXISTE =
"O cronograma informado já existe.";
private static final String MENSAGEM_UM_CRONOGRAMA_DEVERA_TER_NO_MINIMO_UMA_ETAPA_VINCULADA =
"Um cronograma deverá ter, no mínimo, uma etapa vinculada.";
private static final String MENSAGEM_A_DATA_INICIAL_NAO_PODE_SER_POSTERIOR_A_DATA_FINAL =
"A data inicial não pode ser posterior a data final.";
private static final String MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_FINAL_DA_ETAPA =
"Obrigatório informar a data final da etapa";
private static final String MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_INICIAL_DA_ETAPA =
"Obrigatório informar a data inicial da etapa";
private static final String MENSAGEM_OBRIGATORIO_INFORMAR_O_ANO =
"Obrigatório informar o ano";
private static final String MENSAGEM_ETAPA_JA_VINCULADA_AO_CRONOGRAMA =
"A etapa já está vinculada ao cronograma.";
private static final String MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO =
"Já existe um cronograma vigente no período informado.";
private static final String DATA_INICIO_02_01_2013 =
"02/01/2013";
private static final String DATA_INICIO_19_01_2013 =
"19/01/2013";
private static final String DATA_INICIO_20_01_2013 =
"20/01/2013";
private static final String DATA_INICIO_21_01_2013 =
"21/01/2013";
private static final String DATA_FINAL_20_01_2013 =
"20/01/2013";
private static final String DATA_FINAL_21_01_2013 =
"21/01/2013";
private static final String DATA_FINAL_26_02_2013 =
"26/02/2013";
private CronogramaService cronogramaService
;
private CronogramaRepository cronogramaRepositoryMock
;
private Cronograma cronograma
;
private Etapa etapa
;
private CronogramaEtapa cronogramaEtapa
;
@Before
public void inicializarContexto
() {
super.
inicializarContexto();
cronogramaRepositoryMock = getContexto
().
mock(CronogramaRepository.
class);
validadorMock = getContexto
().
mock(Validador.
class);
cronogramaService =
new CronogramaServiceImpl
(validadorMock, cronogramaRepositoryMock
);
cronograma =
new CronogramaBuilder
().
comNumeroAno(ANO_2012
).
build();
etapa =
new EtapaBuilder
().
comCodigo(SEQUENCIAL_ETAPA_1
).
build();
cronogramaEtapa =
new CronogramaEtapaBuilder
()
.
comEtapa(etapa
)
.
comCronograma(cronograma
)
.
comDataInicialEtapa(DATA_INICIO_20_01_2013
)
.
comDataFinalEtapa(DATA_FINAL_21_01_2013
)
.
build();
cronograma.
adicionarCronogramaEtapa(cronogramaEtapa
);
setEntidade
(cronograma
);
}
@
Override
protected GenericService
<Cronograma
> getService
() {
return cronogramaService
;
}
@
Override
protected GenericRepository
<Cronograma
> getRepositoryMock
() {
return cronogramaRepositoryMock
;
}
@Test
public void aoConsultarCronogramaPorNumeroAnoDeveriaDelegarParaOhRepositorio
() throws Exception {
getContexto
().
checking(new Expectations
(){{
oneOf
(cronogramaRepositoryMock
).
consultarCronogramaPorNumeroAno(with
(new Long(ANO_2012
)));
will
(returnValue
(new ArrayList<Cronograma
>()));
}});
cronogramaService.
consultarCronogramaPorNumeroAno(new Long(ANO_2012
));
}
@Test
public void aoCadastrarCronogramaComParametroAnoNaoInformadoDeveriaLancarExcecao
() throws Exception {
preencherCronogramaSemInformarOhAnoDoCronograma
();
getContexto
().
checking(new Expectations
(){{
oneOf
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
will
(throwException
(new NegocioException
(MENSAGEM_OBRIGATORIO_INFORMAR_O_ANO
)));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_OBRIGATORIO_INFORMAR_O_ANO
);
}
@Test
public void aoCadastrarCronogramaComParametroDataInicialDaEtapaNaoForInformadaDeveriaLancarExcecao
() throws Exception {
preencherCronogramaSemInformarAhDataInicialDaEtapa
();
getContexto
().
checking(new Expectations
(){{
oneOf
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
will
(throwException
(new NegocioException
(MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_INICIAL_DA_ETAPA
)));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_INICIAL_DA_ETAPA
);
}
@Test
public void aoCadastrarCronogramaComParametroDataFinalDaEtapaNaoForInformadaDeveriaLancarExcecao
() throws Exception {
preencherCronogramaSemInformarAhDataFinalDaEtapa
();
getContexto
().
checking(new Expectations
(){{
oneOf
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
will
(throwException
(new NegocioException
(MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_FINAL_DA_ETAPA
)));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_FINAL_DA_ETAPA
);
}
@Test
public void aoCadastrarCronogramaComDataInicialPosteriorAhDataFinalDaEtapaDeveriaLancarExcecao
() throws Exception {
preencherCronogramaComDataInicialPosteriorAhDataFinalDaEtapa
();
getContexto
().
checking(new Expectations
(){{
oneOf
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
will
(throwException
(new NegocioException
(MENSAGEM_A_DATA_INICIAL_NAO_PODE_SER_POSTERIOR_A_DATA_FINAL
)));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_A_DATA_INICIAL_NAO_PODE_SER_POSTERIOR_A_DATA_FINAL
);
}
@Test
public void aoCadastrarCronogramaComNenhumaEtapaVinculadaDeveriaLancarExcecao
() throws Exception {
preencherCronogramaComNenhumaEtapaVinculada
();
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_UM_CRONOGRAMA_DEVERA_TER_NO_MINIMO_UMA_ETAPA_VINCULADA
);
}
@Test
public void aoCadastrarCronogramaComCronogramaJaExistenteDeveriaLancarExcecao
() throws Exception {
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
oneOf
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(new Cronograma
()));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_O_CRONOGRAMA_INFORMADO_JA_EXISTE
);
}
@Test
public void aoCadastrarCronogramaComEtapaJaVinculadaDuasVezesDeveriaLancarExcecao
() throws Exception {
preencherCronogramaComDuasEtapasDeIdIguais
();
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_ETAPA_JA_VINCULADA_AO_CRONOGRAMA
);
}
@Test
public void aoCadastrarCronogramaComCronogramaVigenteNoPeriodoDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataInicial(DataUtils.
converterStringParaData(DATA_INICIO_19_01_2013
));
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_21_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoCadastrarCronogramaComDataInicialProximoCronogramaAntesDataFinalCronogramaAhCadastrarDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_20_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoCadastrarCronogramaComDataInicialProximoCronogramaIgualAhDataFinalCronogramaAhCadastrarDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_21_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoCadastrarCronogramaComDataInicialProximoCronogramaAposDataFinalCronogramaAhCadastrarDeveriaDelegarParaOhRepositorio
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_26_02_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
oneOf
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
cronogramaService.
cadastrar(cronograma
);
}
@Test
public void aoCadastrarCronogramaComDataInicialProximoCronogramaNulaDeveriaDelegarParaOhRepositorio
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(null);
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
oneOf
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
cronogramaService.
cadastrar(cronograma
);
}
@Test
public void aoCadastrarCronogramaComDataFinalCronogramaAnteriorAposDataInicialCronogramaAhCadastrarDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataInicial(DataUtils.
converterStringParaData(DATA_INICIO_21_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoCadastrarCronogramaComDataFinalCronogramaAnteriorIgualAhDataInicialCronogramaAhCadastrarDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataInicial(DataUtils.
converterStringParaData(DATA_INICIO_20_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
cadastrar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoCadastrarCronogramaComDataFinalCronogramaAnteriorAntesDataInicialCronogramaAhCadastrarDeveriaDelegarParaOhRepositorio
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataInicial(DataUtils.
converterStringParaData(DATA_INICIO_02_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
oneOf
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
cronogramaService.
cadastrar(cronograma
);
}
@Test
public void aoCadastrarCronogramaComDataFinalCronogramaAnteriorNulaDeveriaDelegarParaRepositorio
() throws Exception {
Etapa etapa2 =
new EtapaBuilder
().
comCodigo(SEQUENCIAL_ETAPA_3
).
build();
getEntidade
().
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
()
.
comCronogramaEtapaId(SEQUENCIAL_ETAPA_3, ANO_2012
)
.
comEtapa(etapa2
).
comCronograma(getEntidade
())
.
comDataInicialEtapa(DATA_INICIAL_01_01_2013
)
.
comDataFinalEtapa(DATA_FINAL_26_02_2013
)
.
build());
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataInicial(null);
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Cadastrar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
oneOf
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
cronogramaService.
cadastrar(cronograma
);
}
@Test
public void aoAlterarCronogramaInserindoHistoricoDeveriaDelegarParaOhValidadorComContextoAlterar
() throws Exception {
getContexto
().
checking(new Expectations
(){{
oneOf
(validadorMock
).
validar(with
(any
(Cronograma.
class)), with
(new Class<?>[]{Alterar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(null));
ignoring
(cronogramaRepositoryMock
).
inserirHistorico(with
(same
(cronograma
)), with
(any
(UsuarioView.
class)));
ignoring
(cronogramaRepositoryMock
).
alterar(with
(same
(cronograma
)));
}});
cronogramaService.
alterarCronogramaInserindoHistorico(cronograma,
new UsuarioView
());
}
@Test
public void aoAlterarCronogramaInserindoHistoricoQuandoParametroDataInicialDaEtapaNaoForInformadaDeveriaLancarExcecao
() throws Exception {
getContexto
().
checking(new Expectations
(){{
oneOf
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
will
(throwException
(new NegocioException
(MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_INICIAL_DA_ETAPA
)));
never
(cronogramaRepositoryMock
).
alterar(cronograma
);
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterarCronogramaInserindoHistorico(cronograma,
new UsuarioView
());
}
}, MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_INICIAL_DA_ETAPA
);
}
@Test
public void aoAlterarCronogramaInserindoHistoricoQuandoParametroDataFinalDaEtapaNaoForInformadaDeveriaLancarExcecao
() throws Exception {
getContexto
().
checking(new Expectations
(){{
oneOf
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
will
(throwException
(new NegocioException
(MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_FINAL_DA_ETAPA
)));
never
(cronogramaRepositoryMock
).
alterar(cronograma
);
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterarCronogramaInserindoHistorico(cronograma,
new UsuarioView
());
}
}, MENSAGEM_OBRIGATORIO_INFORMAR_A_DATA_FINAL_DA_ETAPA
);
}
@Test
public void aoAlterarCronogramaInserindoHistoricoComDataInicialPosteriorAhDataFinalDaEtapaDeveriaLancarExcecao
() throws Exception {
preencherCronogramaComDataInicialPosteriorAhDataFinalDaEtapa
();
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
never
(cronogramaRepositoryMock
).
alterar(cronograma
);
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterarCronogramaInserindoHistorico(cronograma,
new UsuarioView
());
}
}, MENSAGEM_A_DATA_INICIAL_NAO_PODE_SER_POSTERIOR_A_DATA_FINAL
);
}
@Test
public void aoAlterarCronogramaInserindoHistoricoComNenhumaEtapaVinculadaDeveriaLancarExcecao
() throws Exception {
preencherCronogramaComNenhumaEtapaVinculada
();
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
never
(cronogramaRepositoryMock
).
cadastrar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterar(cronograma
);
}
}, MENSAGEM_UM_CRONOGRAMA_DEVERA_TER_NO_MINIMO_UMA_ETAPA_VINCULADA
);
}
@Test
public void aoAlterarCronogramaInserindoHistoricoDeveriaDelegarOhAlterarParaOhRepositorio
() throws Exception {
getContexto
().
checking(new Expectations
(){{
ignoring
(getValidadorMock
()).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
ignoring
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
oneOf
(cronogramaRepositoryMock
).
inserirHistorico(with
(same
(cronograma
)), with
(any
(UsuarioView.
class)));
oneOf
(cronogramaRepositoryMock
).
alterar(with
(same
(cronograma
)));
}});
cronogramaService.
alterarCronogramaInserindoHistorico(cronograma,
new UsuarioView
());
}
@Test
public void aoAlterarCronogramaComEtapaJaVinculadaDuasVezesDeveriaLancarExcecao
() throws Exception {
preencherCronogramaComDuasEtapasDeIdIguais
();
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
never
(cronogramaRepositoryMock
).
alterar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterar(cronograma
);
}
}, MENSAGEM_ETAPA_JA_VINCULADA_AO_CRONOGRAMA
);
}
@Test
public void aoAlterarCronogramaComCronogramaVigenteNoPeriodoDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataInicial(DataUtils.
converterStringParaData(DATA_INICIO_19_01_2013
));
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_21_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
alterar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoAlterarCronogramaComDataInicialProximoCronogramaAntesDataFinalCronogramaAhCadastrarDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_20_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
alterar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoAlterarCronogramaComDataInicialProximoCronogramaIgualAhDataFinalCronogramaAhCadastrarDeveriaLancarExcecao
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_21_01_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
never
(cronogramaRepositoryMock
).
alterar(with
(same
(getEntidade
())));
}});
VerificadorLancamentoException.
verificarMensagemLancamentoExceptionSemRetornoMensagem(new CommandSemMensagem
() {
@
Override
public void execute
() throws Exception {
cronogramaService.
alterar(cronograma
);
}
}, MENSAGEM_EXISTE_CRONOGRAMA_PERIODO_INFORMADO
);
}
@Test
public void aoAlterarCronogramaComDataInicialProximoCronogramaAposDataFinalCronogramaAhCadastrarDeveriaDelegarParaOhRepositorio
() throws Exception {
Etapa etapa2 =
new EtapaBuilder
().
comCodigo(SEQUENCIAL_ETAPA_3
).
build();
getEntidade
().
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
()
.
comCronogramaEtapaId(SEQUENCIAL_ETAPA_3, ANO_2012
)
.
comEtapa(etapa2
).
comCronograma(getEntidade
())
.
comDataInicialEtapa(DATA_INICIAL_01_01_2013
)
.
comDataFinalEtapa(DATA_FINAL_26_02_2013
)
.
build());
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(DataUtils.
converterStringParaData(DATA_FINAL_01_06_2013
));
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
oneOf
(cronogramaRepositoryMock
).
alterar(with
(same
(getEntidade
())));
}});
cronogramaService.
alterar(getEntidade
());
}
@Test
public void aoAlterarCronogramaComDataInicialProximoCronogramaNulaDeveriaDelegarParaOhRepositorio
() throws Exception {
final PeriodoDTO periodo =
new PeriodoDTO
();
periodo.
setDataFinal(null);
getContexto
().
checking(new Expectations
(){{
ignoring
(validadorMock
).
validar(with
(same
(getEntidade
())), with
(new Class<?>[]{Alterar.
class}));
oneOf
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
will
(returnValue
(periodo
));
oneOf
(cronogramaRepositoryMock
).
alterar(with
(same
(getEntidade
())));
}});
cronogramaService.
alterar(cronograma
);
}
@Test
public void aoConsultarCronogramaCorrenteDeveriaDelegarParaOhRepositorio
() throws Exception {
getContexto
().
checking(new Expectations
(){{
oneOf
(cronogramaRepositoryMock
).
consultarCronogramaCorrente();
will
(returnValue
(new Cronograma
()));
}});
cronogramaService.
consultarCronogramaCorrente();
}
@
Override
protected void expectativasDeNegocioFuncionalidadeCadastrar
() {
getContexto
().
checking(new Expectations
(){{
ignoring
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
ignoring
(getRepositoryMock
()).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
}});
}
@
Override
protected void expectativasDeNegocioFuncionalidadeAlterar
() {
getContexto
().
checking(new Expectations
(){{
ignoring
(cronogramaRepositoryMock
).
consultarPeriodoDeVigenciaDasEtapasCadastradas(with
(any
(Cronograma.
class)));
ignoring
(getRepositoryMock
()).
consultarPorId(with
(same
(getEntidade
())));
will
(returnValue
(null));
}});
}
private void preencherCronogramaSemInformarOhAnoDoCronograma
() {
cronograma.
setNumeroAno(null);
cronograma.
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
().
comEtapa(etapa
).
comCronograma(cronograma
).
comDataInicialEtapa(DATA_INICIAL_01_01_2013
).
build());
}
private void preencherCronogramaSemInformarAhDataInicialDaEtapa
() {
cronograma.
setCronogramaEtapas(null);
cronograma.
setNumeroAno(new Long(ANO_2012
));
cronograma.
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
().
comEtapa(etapa
).
comCronograma(cronograma
).
comDataFinalEtapa(DATA_FINAL_01_06_2013
).
build());
}
private void preencherCronogramaSemInformarAhDataFinalDaEtapa
() {
cronograma.
setCronogramaEtapas(null);
cronograma.
setNumeroAno(new Long(ANO_2012
));
cronograma.
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
().
comEtapa(etapa
).
comCronograma(cronograma
).
comDataInicialEtapa(DATA_INICIAL_01_01_2013
).
build());
}
private void preencherCronogramaComDataInicialPosteriorAhDataFinalDaEtapa
() {
cronograma.
setCronogramaEtapas(null);
cronograma.
setNumeroAno(new Long(ANO_2012
));
cronograma.
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
().
comEtapa(etapa
).
comCronograma(cronograma
).
comDataInicialEtapa(DATA_FINAL_01_06_2013
).
comDataFinalEtapa(DATA_INICIAL_01_01_2013
).
build());
}
private void preencherCronogramaComDuasEtapasDeIdIguais
() {
cronograma.
setCronogramaEtapas(null);
cronograma.
setNumeroAno(new Long(ANO_2012
));
Etapa etapa1 =
new EtapaBuilder
().
comCodigo(SEQUENCIAL_ETAPA_1
).
build();
Etapa etapa2 =
new EtapaBuilder
().
comCodigo(SEQUENCIAL_ETAPA_1
).
build();
cronograma.
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
().
comEtapa(etapa1
).
comCronograma(cronograma
).
comDataInicialEtapa(DATA_INICIAL_01_01_2013
).
comDataFinalEtapa(DATA_FINAL_01_06_2013
).
build());
cronograma.
adicionarCronogramaEtapa(new CronogramaEtapaBuilder
().
comEtapa(etapa2
).
comCronograma(cronograma
).
comDataInicialEtapa(DATA_INICIAL_01_03_2013
).
comDataFinalEtapa(DATA_FINAL_01_06_2013
).
build());
}
private void preencherCronogramaComNenhumaEtapaVinculada
() {
cronograma.
setCronogramaEtapas(new HashSet<CronogramaEtapa
>());
}
}