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());
    }
    
	/**
	 * YA02a-10 55/65 Quando o codigo do meio de pagamento (tag: tPag) for
	 * preenchido com o codigo 99 - Outros, obrigatorio o preenchimento da descricao
	 * do meio de pagamento (tag: xPag)
	 */
    @Test
    public void deveInformarDescricaoMeioPagamentoQuando99Outros() {

    	final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();
    	formaPagamento.setMeioPagamento(NFMeioPagamento.OUTRO);
    	formaPagamento.setDescricaoMeioPagamento("Nota promissoria");
    	Assert.assertNotNull("Rejeicao 441: Descricao do pagamento obrigatoria para meio de pagamento 99 - Outros", formaPagamento.getDescricaoMeioPagamento());
    }

    @Test(expected = IllegalStateException.class)
    public void tamanhoMinimo2CampoDescricaoMeioPagamento() {
    	
    	final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();
    	formaPagamento.setDescricaoMeioPagamento("a");
    }

    @Test(expected = IllegalStateException.class)
    public void tamanhoMaximo60CampoDescricaoMeioPagamento() {
    	
    	final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();
    	formaPagamento.setDescricaoMeioPagamento("Descricao com mais de 60 carecteres descricao com mais de 60 carecteres");
    }
    
}

@@ -3439,32 +3439,677 @@
 ento());%0A    %7D%0A%0A
+%09/**%0A%09 * YA02a-20 55/65 Quando o codigo do meio de pagamento for diferente 99 - Outros%0A%09 * (tag: tPag%3C%3E99), proibido o preenchimento da descricao do meio de pagamento%0A%09 * (tag: xPag)%0A%09 */%0A    @Test%0A    public void naoDeveInformarDescricaoMeioPagamentoQuandoDiferente99Outros() %7B%0A    %09%0A    %09final NFNotaInfoFormaPagamento formaPagamento = new NFNotaInfoFormaPagamento();%0A    %09formaPagamento.setMeioPagamento(NFMeioPagamento.DINHEIRO);%0A    %09Assert.assertNotEquals(%2299%22, formaPagamento.getMeioPagamento().getCodigo());%0A    %09Assert.assertNull(%22Rejei%C3%A7%C3%A3o 442: Descricao do pagamento nao permitida%22, formaPagamento.getDescricaoMeioPagamento());%0A    %7D%0A%0A
     @Test(expect

Update NFNotaInfoFormaPagamentoTest.java