package com.fincatto.documentofiscal.nfe400.classes.nota;

import java.math.BigDecimal;

import org.junit.Assert;
import org.junit.Test;

import com.fincatto.documentofiscal.nfe400.FabricaDeObjetosFake;
import com.fincatto.documentofiscal.nfe400.classes.NFIndicadorFormaPagamento;

public class NFNotaInfoFormaPagamentoTest {

    @Test(expected = NumberFormatException.class)
    public void naoDevePermitirValorPagamentoComTamanhoInvalido() {
        new NFNotaInfoFormaPagamento().setValorPagamento(new BigDecimal("10000000000000"));
    }

    @Test
    public void devePermitirCartaoNulo() {
        final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();
        formaPagamento.setIndicadorFormaPagamento(NFIndicadorFormaPagamento.A_VISTA);
        formaPagamento.setMeioPagamento(NFMeioPagamento.CARTAO_CREDITO);
        formaPagamento.setValorPagamento(new BigDecimal("999999999999.99"));
        formaPagamento.toString();
    }

    @Test
    public void devePermitirIndicadordePagamentoNulo() {
        final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();
        formaPagamento.setMeioPagamento(NFMeioPagamento.CARTAO_CREDITO);
        formaPagamento.setValorPagamento(new BigDecimal("999999999999.99"));
        formaPagamento.setCartao(FabricaDeObjetosFake.getNFNotaInfoCartao());
        formaPagamento.toString();
    }

    @Test(expected = IllegalStateException.class)
    public void naoDevePermitirValorPagamentoNulo() {
        final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();
        formaPagamento.setIndicadorFormaPagamento(NFIndicadorFormaPagamento.A_PRAZO);
        formaPagamento.setMeioPagamento(NFMeioPagamento.CARTAO_CREDITO);
        formaPagamento.setCartao(FabricaDeObjetosFake.getNFNotaInfoCartao());
        formaPagamento.toString();
    }

    @Test(expected = IllegalStateException.class)
    public void naoDevePermitirFormaPagamentoMoedaNulo() {
        final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();
        formaPagamento.setIndicadorFormaPagamento(NFIndicadorFormaPagamento.A_VISTA);
        formaPagamento.setCartao(FabricaDeObjetosFake.getNFNotaInfoCartao());
        formaPagamento.setValorPagamento(new BigDecimal("999999999999.99"));
        formaPagamento.toString();
    }

    @Test
    public void deveGerarXMLDeAcordoComOPadraoEstabelecido() {
        final String xmlEsperado = "<NFNotaInfoFormaPagamento><indPag>1</indPag><tPag>03</tPag><vPag>999999999999.99</vPag><card><tpIntegra>1</tpIntegra><CNPJ>12345678901234</CNPJ><tBand>02</tBand><cAut>9ItpS1hBk3TyhjUB3I90</cAut></card></NFNotaInfoFormaPagamento>";
        Assert.assertEquals(xmlEsperado, FabricaDeObjetosFake.getNFNotaInfoFormaPagamento().toString());
    }
}
@@ -2783,9 +2783,1273 @@
 ;%0A    %7D%0A
-%7D
+    %0A%09/**%0A%09 * YA02a-10 55/65 Quando o codigo do meio de pagamento (tag: tPag) for%0A%09 * preenchido com o codigo 99 - Outros, obrigatorio o preenchimento da descricao%0A%09 * do meio de pagamento (tag: xPag)%0A%09 */%0A    @Test%0A    public void deveInformarDescricaoMeioPagamentoQuando99Outros() %7B%0A%0A    %09final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();%0A    %09formaPagamento.setMeioPagamento(NFMeioPagamento.OUTRO);%0A    %09formaPagamento.setDescricaoMeioPagamento(%22Nota promissoria%22);%0A    %09Assert.assertNotNull(%22Rejeicao 441: Descricao do pagamento obrigatoria para meio de pagamento 99 - Outros%22, formaPagamento.getDescricaoMeioPagamento());%0A    %7D%0A%0A    @Test(expected = IllegalStateException.class)%0A    public void tamanhoMinimo2CampoDescricaoMeioPagamento() %7B%0A    %09%0A    %09final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();%0A    %09formaPagamento.setDescricaoMeioPagamento(%22a%22);%0A    %7D%0A%0A    @Test(expected = IllegalStateException.class)%0A    public void tamanhoMaximo60CampoDescricaoMeioPagamento() %7B%0A    %09%0A    %09final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();%0A    %09formaPagamento.setDescricaoMeioPagamento(%22Descricao com mais de 60 carecteres descricao com mais de 60 carecteres%22);%0A    %7D%0A    %0A%7D%0A

Update NFNotaInfoFormaPagamentoTest.java