package gcom.cobranca;
import static org.junit.Assert.*;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyInt;
import gcom.cobranca.parcelamento.Parcelamento;
import gcom.cobranca.parcelamento.ParcelamentoFaixaDescontoBO;
import gcom.faturamento.conta.Conta;
import gcom.util.ErroRepositorioException;
import java.math.BigDecimal;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class ParcelamentoFaixaDescontoTest {
@InjectMocks
private ParcelamentoFaixaDescontoBO bo;
@Mock
private RepositorioCobrancaHBM repositorio;
private Conta conta;
@Before
public void setup() {
bo = new ParcelamentoFaixaDescontoBO(repositorio);
conta = new Conta();
conta.setValorAgua(new BigDecimal(100.00));
conta.setValorEsgoto(new BigDecimal(0.00));
conta.setValorDebitos(new BigDecimal(5.00));
conta.setValorCreditos(new BigDecimal(2.00));
conta.setValorImposto(new BigDecimal(0.00));
MockitoAnnotations.initMocks(this);
}
@Test
public void testFaixa90() throws ErroRepositorioException {
conta.setReferencia(200610);
mockPercentual(new BigDecimal(90.00));
BigDecimal valorDesconto = bo.calcularValorDescontoConta(conta);
assertEquals(new BigDecimal(92.70).setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), valorDesconto);
}
@Test
public void testFaixa75() throws ErroRepositorioException {
conta.setReferencia(200805);
mockPercentual(new BigDecimal(75.00));
BigDecimal valorDesconto = bo.calcularValorDescontoConta(conta);
assertEquals(new BigDecimal(77.25).setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), valorDesconto);
}
@Test
public void testFaixa60() throws ErroRepositorioException {
conta.setReferencia(201001);
mockPercentual(new BigDecimal(60.00));
BigDecimal valorDesconto = bo.calcularValorDescontoConta(conta);
assertEquals(new BigDecimal(61.80).setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), valorDesconto);
}
@Test
public void testFaixa45() throws ErroRepositorioException {
conta.setReferencia(201111);
mockPercentual(new BigDecimal(45.00));
BigDecimal valorDesconto = bo.calcularValorDescontoConta(conta);
assertEquals(new BigDecimal(46.35).setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), valorDesconto);
}
@Test
public void testFaixa30() throws ErroRepositorioException {
conta.setReferencia(201308);
mockPercentual(new BigDecimal(30.00));
BigDecimal valorDesconto = bo.calcularValorDescontoConta(conta);
assertEquals(new BigDecimal(30.90).setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), valorDesconto);
}
@Test
public void testFaixa0() throws ErroRepositorioException {
conta.setReferencia(201601);
mockPercentual(new BigDecimal(0.00));
BigDecimal valorDesconto = bo.calcularValorDescontoConta(conta);
assertEquals(new BigDecimal(0.00).setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO), valorDesconto);
}
private void mockPercentual(BigDecimal retorno) throws ErroRepositorioException {
when(repositorio.getPercentualDescontoPorFaixa(anyInt())).thenReturn(retorno);
}
}