package br.com.caelum.stella.boleto; import static org.junit.Assert.assertEquals; import java.math.BigDecimal; import java.util.Calendar; import org.junit.Test; public class BoletoTest { @Test public void novoBoletoDeveTerAlgunsValoresPadrao() { Boleto b = Boleto.novoBoleto(); assertEquals("R$", b.getEspecieMoeda()); assertEquals(9, b.getCodigoEspecieMoeda()); assertEquals(false, b.getAceite()); assertEquals("DV", b.getEspecieDocumento()); } @Test public void regraDoFatorVencimentoParaDataDaManha() { Boleto b = Boleto.novoBoleto(); Calendar data = Calendar.getInstance(); data.set(Calendar.DAY_OF_MONTH, 2); data.set(Calendar.MONTH, 5 - 1); data.set(Calendar.YEAR, 2008); data.set(Calendar.HOUR_OF_DAY, 1); b.comDatas(Datas.novasDatas().comVencimento(data)); assertEquals("3860", b.getFatorVencimento()); } @Test(expected = IllegalArgumentException.class) public void fatorVencimentoComDataMuitoAntiga() { Datas.novasDatas().comDocumento(01, 01, 1996).comProcessamento(01, 1, 1996).comVencimento(1, 2, 1996); } @Test(expected = IllegalArgumentException.class) public void fatorVencimentoComDataMaiorQueOPermitido() { Datas.novasDatas().comDocumento(01, 01, 2025).comProcessamento(01, 1, 2025).comVencimento(1, 2, 2025); } public void regraDoFatorVencimentoParaDataDaNoite() { Boleto b = Boleto.novoBoleto(); Calendar data = Calendar.getInstance(); data.set(Calendar.DAY_OF_MONTH, 2); data.set(Calendar.MONTH, 5 - 1); data.set(Calendar.YEAR, 2008); data.set(Calendar.HOUR_OF_DAY, 23); b.comDatas(Datas.novasDatas().comVencimento(data)); assertEquals("3860", b.getFatorVencimento()); } @Test public void regraDoFatorVencimentoParaDataDaExtremaNoite() { Boleto b = Boleto.novoBoleto(); Calendar data = Calendar.getInstance(); data.set(Calendar.DAY_OF_MONTH, 2); data.set(Calendar.MONTH, 5 - 1); data.set(Calendar.YEAR, 2008); data.set(Calendar.HOUR_OF_DAY, 23); data.set(Calendar.MINUTE, 59); data.set(Calendar.SECOND, 59); data.set(Calendar.MILLISECOND, 999); b.comDatas(Datas.novasDatas().comVencimento(data)); assertEquals("3860", b.getFatorVencimento()); } @Test public void regraDoFatorVencimentoParaDataDoExtremaManha() { Boleto b = Boleto.novoBoleto(); Calendar data = Calendar.getInstance(); data.set(Calendar.DAY_OF_MONTH, 2); data.set(Calendar.MONTH, 5 - 1); data.set(Calendar.YEAR, 2008); data.set(Calendar.HOUR_OF_DAY, 0); data.set(Calendar.MINUTE, 0); data.set(Calendar.SECOND, 0); data.set(Calendar.MILLISECOND, 0); b.comDatas(Datas.novasDatas().comVencimento(data)); assertEquals("3860", b.getFatorVencimento()); } @Test public void valorFormatadoPorStringDeveTerDezDigitos() { Boleto b = Boleto.novoBoleto(); b.comValorBoleto("3.00"); String valorFormatado = b.getValorFormatado(); assertEquals(10, valorFormatado.length()); assertEquals("0000000300", valorFormatado); } @Test public void valorFormatadoPorStringSemPontos() { Boleto b = Boleto.novoBoleto(); b.comValorBoleto("300"); assertEquals("0000030000", b.getValorFormatado()); } @Test public void valorFormatadoPorDouble() { Boleto b = Boleto.novoBoleto(); b.comValorBoleto(3d); assertEquals("0000000300", b.getValorFormatado()); } @Test public void valorFormatadoPorBigDecimal() { Boleto b = Boleto.novoBoleto(); b.comValorBoleto(new BigDecimal(3)); assertEquals("0000000300", b.getValorFormatado()); } @Test public void numeroDoDocumentoFormatadoDeveTerQuatroDigitos() { Boleto b = Boleto.novoBoleto(); b.comNumeroDoDocumento("232"); String numeroFormatado = b.getNumeroDoDocumentoFormatado(); assertEquals(4, numeroFormatado.length()); assertEquals("0232", numeroFormatado); } @Test(expected = IllegalArgumentException.class) public void boletoNaoDeveAceitarMaisDeCincoInstrucoes() { Boleto b = Boleto.novoBoleto(); b.comInstrucoes("", "", "", "", "", ""); } @Test public void boletoDeveAceitarNoMaximoCincoInstrucoes() { Boleto b = Boleto.novoBoleto(); b.comInstrucoes("", "", "", "", ""); assertEquals(5, b.getInstrucoes().size()); } @Test(expected = IllegalArgumentException.class) public void boletoNaoDeveAceitarMaisDeCincoDescricoes() { Boleto b = Boleto.novoBoleto(); b.comDescricoes("", "", "", "", "", ""); } @Test public void boletoDeveAceitarNoMaximoCincoDescricoes() { Boleto b = Boleto.novoBoleto(); b.comDescricoes("", "", "", "", ""); assertEquals(5, b.getDescricoes().size()); } @Test(expected = IllegalArgumentException.class) public void boletoNaoDeveAceitarDescricaoNula() { Boleto b = Boleto.novoBoleto(); b.comDescricao(null); } @Test(expected = UnsupportedOperationException.class) public void boletoNaoDeveAceitarDescricaoQuandoTemCincoDescricoes() { Boleto b = Boleto.novoBoleto(); b.comDescricoes("","","","",""); b.comDescricao(""); } @Test(expected = IllegalArgumentException.class) public void boletoNaoDeveAceitarMaisDeDoisLocais() { Boleto b = Boleto.novoBoleto(); b.comLocaisDePagamento("", "", ""); } @Test public void boletoDeveAceitarNoMaximoDoisLocais() { Boleto b = Boleto.novoBoleto(); b.comLocaisDePagamento("", ""); assertEquals(2, b.getLocaisDePagamento().size()); } }