github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/parser/parser_test.go (about)

     1  package parser
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  )
     7  
     8  const xmlDoc = `
     9  <?xml version="1.0" encoding="UTF-8"?>
    10  <SOAP-ENV:Envelope 
    11      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    12      <SOAP-ENV:Body>
    13          <ns0:resposta 
    14              xmlns:ns0="http://www.tibco.com/schemas/bws_registro_cbr/Recursos/XSD/Schema.xsd">
    15              <ns0:siglaSistemaMensagem></ns0:siglaSistemaMensagem>
    16              <ns0:codigoRetornoPrograma>92</ns0:codigoRetornoPrograma>
    17              <ns0:nomeProgramaErro>CBRSR004</ns0:nomeProgramaErro>
    18              <ns0:textoMensagemErro>O Numero do Titulo informado nao esta disponivel.</ns0:textoMensagemErro>
    19              <ns0:numeroPosicaoErroPrograma>11</ns0:numeroPosicaoErroPrograma>
    20              <ns0:codigoTipoRetornoPrograma>0</ns0:codigoTipoRetornoPrograma>
    21              <ns0:textoNumeroTituloCobrancaBb></ns0:textoNumeroTituloCobrancaBb>
    22              <ns0:numeroCarteiraCobranca>17</ns0:numeroCarteiraCobranca>
    23              <ns0:numeroVariacaoCarteiraCobranca>19</ns0:numeroVariacaoCarteiraCobranca>
    24              <ns0:codigoPrefixoDependenciaBeneficiario>3851</ns0:codigoPrefixoDependenciaBeneficiario>
    25              <ns0:numeroContaCorrenteBeneficiario>8570</ns0:numeroContaCorrenteBeneficiario>
    26              <ns0:codigoCliente>932131545</ns0:codigoCliente>
    27              <ns0:linhaDigitavel></ns0:linhaDigitavel>
    28              <ns0:codigoBarraNumerico></ns0:codigoBarraNumerico>
    29              <ns0:codigoTipoEnderecoBeneficiario>0</ns0:codigoTipoEnderecoBeneficiario>
    30              <ns0:nomeLogradouroBeneficiario></ns0:nomeLogradouroBeneficiario>
    31              <ns0:nomeBairroBeneficiario></ns0:nomeBairroBeneficiario>
    32              <ns0:nomeMunicipioBeneficiario></ns0:nomeMunicipioBeneficiario>
    33              <ns0:codigoMunicipioBeneficiario>0</ns0:codigoMunicipioBeneficiario>
    34              <ns0:siglaUfBeneficiario></ns0:siglaUfBeneficiario>
    35              <ns0:codigoCepBeneficiario>0</ns0:codigoCepBeneficiario>
    36              <ns0:indicadorComprovacaoBeneficiario></ns0:indicadorComprovacaoBeneficiario>
    37              <ns0:numeroContratoCobranca>17414296</ns0:numeroContratoCobranca>
    38          </ns0:resposta>
    39      </SOAP-ENV:Body>
    40  </SOAP-ENV:Envelope>
    41  `
    42  
    43  func TestXmlParser(t *testing.T) {
    44  	doc, err := ParseXML(xmlDoc)
    45  	if err != nil {
    46  		t.Fail()
    47  	}
    48  	translator := NewTranslatorMap()
    49  	translator.AddRule(Rule{XMLQuery: "///ns0:resposta/ns0:codigoRetornoPrograma", MapKey: "returnCode"})
    50  	values := ExtractValuesFromXML(doc, translator)
    51  	for _, rule := range translator.GetRules() {
    52  		_, ok := values[rule.MapKey]
    53  		if !ok {
    54  			t.Fail()
    55  		}
    56  	}
    57  }
    58  
    59  const errorBB = `
    60  <?xml version="1.0" encoding="UTF-8"?>
    61  <SOAP-ENV:Envelope 
    62      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    63      <SOAP-ENV:Body>
    64          <SOAP-ENV:Fault>
    65              <faultcode 
    66                  xmlns="">SOAP-ENV:Server
    67              </faultcode>
    68              <faultstring 
    69                  xmlns="">This is an operation implementation generated fault
    70              </faultstring>
    71              <faultactor 
    72                  xmlns=""/>
    73                  <detail 
    74                      xmlns="">
    75                      <ns:erro 
    76                          xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    77                          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    78                          xmlns:ns="http://www.tibco.com/schemas/bws_registro_cbr/Recursos/XSD/Schema.xsd" 
    79                          xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/">
    80                          <ns:Mensagem>Dados de entrada inválidos.</ns:Mensagem>
    81                      </ns:erro>
    82                  </detail>
    83              </SOAP-ENV:Fault>
    84          </SOAP-ENV:Body>
    85      </SOAP-ENV:Envelope>
    86  `
    87  
    88  func TestXMLErrorParser(t *testing.T) {
    89  	doc, err := ParseXML(errorBB)
    90  	if err != nil {
    91  		t.Fail()
    92  	}
    93  	translator := NewTranslatorMap()
    94  	translator.AddRule(Rule{XMLQuery: "//////ns:Mensagem", MapKey: "messageString"})
    95  	values := ExtractValuesFromXML(doc, translator)
    96  	fmt.Println(values)
    97  	for _, rule := range translator.GetRules() {
    98  		_, ok := values[rule.MapKey]
    99  		if !ok {
   100  			t.Fail()
   101  		}
   102  	}
   103  }