br_nfe 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/.travis.yml +8 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +27 -3
- data/LICENSE +1 -1
- data/README.markdown +10 -12
- data/Rakefile +13 -0
- data/br_nfe.gemspec +18 -21
- data/lib/br_nfe/active_model_base.rb +7 -1
- data/lib/br_nfe/base.rb +175 -37
- data/lib/br_nfe/endereco.rb +7 -1
- data/lib/br_nfe/helper/have_rps.rb +1 -1
- data/lib/br_nfe/helper/values_ts/service_v1.rb +313 -0
- data/lib/br_nfe/response/service/build_response.rb +286 -0
- data/lib/br_nfe/response/service/default.rb +185 -0
- data/lib/br_nfe/{servico/response → response/service}/nota_fiscal.rb +11 -10
- data/lib/br_nfe/response/service/paths/base.rb +93 -0
- data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +22 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +31 -0
- data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +36 -0
- data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +127 -0
- data/lib/br_nfe/service/base.rb +59 -0
- data/lib/br_nfe/service/betha/base.rb +8 -0
- data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +39 -0
- data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +34 -0
- data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +32 -0
- data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +32 -0
- data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +30 -0
- data/lib/br_nfe/service/betha/v1/gateway.rb +21 -0
- data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +37 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +19 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +17 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +17 -0
- data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +20 -0
- data/lib/br_nfe/service/concerns/rules/consulta_nfs_por_rps.rb +18 -0
- data/lib/br_nfe/service/concerns/rules/consulta_nfse.rb +29 -0
- data/lib/br_nfe/service/concerns/rules/recepcao_lote_rps.rb +50 -0
- data/lib/br_nfe/{servico → service}/intermediario.rb +1 -1
- data/lib/br_nfe/service/item.rb +70 -0
- data/lib/br_nfe/service/rps.rb +231 -0
- data/lib/br_nfe/service/sc/florianopolis/base.rb +25 -0
- data/lib/br_nfe/service/sc/florianopolis/cancellation.rb +30 -0
- data/lib/br_nfe/service/sc/florianopolis/emission_rps.rb +19 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_address.xml.slim +21 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_contact.xml.slim +3 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_service_item.xml.slim +9 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/cancellation.xml.slim +6 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/inf_requisicao.xml.slim +55 -0
- data/lib/br_nfe/service/sc/gaspar/cancela_nfse.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_nfs_por_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_nfse.rb +17 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado.rb +13 -0
- data/lib/br_nfe/service/thema/v1/base.rb +55 -0
- data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +48 -0
- data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +49 -0
- data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +48 -0
- data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +47 -0
- data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +46 -0
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +51 -0
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +30 -0
- data/lib/br_nfe/service/xml/v1/_tc_contato.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_cpf_cnpj.xml.slim +5 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_construcao_civil.xml.slim +2 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_prestador.xml.slim +15 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_servico.xml.slim +14 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_tomador.xml.slim +15 -0
- data/lib/br_nfe/service/xml/v1/_tc_endereco.xml.slim +13 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_intermediario_servico.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_orgao_gerador.xml.slim +8 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_prestador.xml.slim +3 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_rps.xml.slim +16 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_tomador.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_inf_pedido_cancelamento.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_inf_rps.xml.slim +47 -0
- data/lib/br_nfe/service/xml/v1/_tc_lote_rps.xml.slim +9 -0
- data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_rps.xml.slim +8 -0
- data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +48 -0
- data/lib/br_nfe/service/xml/v1/servico_cancelar_nfse_envio.xml.slim +9 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_lote_rps_envio.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_envio.xml.slim +19 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_rps_envio.xml.slim +5 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_situacao_lote_rps_envio.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/servico_enviar_lote_rps_envio.xml.slim +9 -0
- data/lib/br_nfe/version.rb +2 -2
- data/lib/br_nfe/xml/_signed_info_sh1.xml.slim +9 -0
- data/lib/br_nfe/xml/signature_sh1.xml.slim +12 -0
- data/lib/br_nfe/xml/soap_env.xml.slim +3 -0
- data/lib/br_nfe.rb +72 -20
- data/test/br_nfe/base_test.rb +257 -108
- data/test/br_nfe/helper/have_intermediario_test.rb +2 -2
- data/test/br_nfe/helper/have_rps_test.rb +4 -4
- data/test/br_nfe/response/service/build_response_test.rb +377 -0
- data/test/br_nfe/response/service/default_test.rb +218 -0
- data/test/br_nfe/{servico/response → response/service}/nota_fiscal_test.rb +2 -2
- data/test/br_nfe/response/service/paths/base_test.rb +199 -0
- data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +25 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +34 -0
- data/test/br_nfe/response/service/paths/v1/tc_nfse_test.rb +122 -0
- data/test/br_nfe/service/base_test.rb +138 -0
- data/test/br_nfe/service/betha/base_test.rb +9 -0
- data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +60 -0
- data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +55 -0
- data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +55 -0
- data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +53 -0
- data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +49 -0
- data/test/br_nfe/service/betha/v1/gateway_test.rb +35 -0
- data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +84 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/xsd/TiposNFe_v01.xsd +583 -0
- data/test/br_nfe/service/betha/v1/xsd/nfse_v01.xsd +652 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_cancelar_nfse_envio_v01.xsd +17 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_lote_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_envio_v01.xsd +28 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_situacao_lote_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_enviar_lote_rps_envio_v01.xsd +17 -0
- data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema.xsd +308 -0
- data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema_v01.xsd +95 -0
- data/test/br_nfe/service/concerns/rules/cancelamento_nfs_test.rb +15 -0
- data/test/br_nfe/service/concerns/rules/consulta_nfs_por_rps_test.rb +36 -0
- data/test/br_nfe/service/concerns/rules/consulta_nfse_test.rb +42 -0
- data/test/br_nfe/{servico/base_test.rb → service/concerns/rules/recepcao_lote_rps_test.rb} +12 -4
- data/test/br_nfe/{servico → service}/intermediario_test.rb +1 -1
- data/test/br_nfe/service/item_test.rb +34 -0
- data/test/br_nfe/{servico → service}/rps_test.rb +191 -43
- data/test/br_nfe/service/sc/florianopolis/XSD/TiposNFSe_v2.0.xsd +863 -0
- data/test/br_nfe/service/sc/florianopolis/XSD/xmldsig-core-schema.xsd +309 -0
- data/test/br_nfe/service/sc/florianopolis/base_test.rb +20 -0
- data/test/br_nfe/service/sc/florianopolis/cancellation_test.rb +36 -0
- data/test/br_nfe/service/sc/florianopolis/emission_rps_test.rb +145 -0
- data/test/br_nfe/service/sc/gaspar/cancela_nfse_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_nfs_por_rps_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_nfse_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado_test.rb +22 -0
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_test.rb +22 -0
- data/test/br_nfe/service/thema/v1/base_test.rb +65 -0
- data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +56 -0
- data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +47 -0
- data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +50 -0
- data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +50 -0
- data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +47 -0
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +62 -0
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test_limitado.rb +50 -0
- data/test/br_nfe/service/thema/v1/xsd/nfse.xsd +656 -0
- data/test/br_nfe/service/thema/v1/xsd/xmldsig-core-schema20020212.xsd +318 -0
- data/test/br_nfe/service/xsd/v1/nfse.xsd +779 -0
- data/test/br_nfe/service/xsd/v1/xmldsig-core-schema20020212.xsd +316 -0
- data/test/cert.pfx +0 -0
- data/test/factories/base.rb +2 -0
- data/test/factories/destinatario.rb +3 -3
- data/test/factories/response/service/build_response.rb +5 -0
- data/test/factories/response/service/default.rb +10 -0
- data/test/factories/{servico/response → response/service}/nota_fiscal.rb +9 -9
- data/test/factories/service/base.rb +6 -0
- data/test/factories/service/betha/base.rb +4 -0
- data/test/factories/service/betha/v1/cancelamento_nfs.rb +9 -0
- data/test/factories/{servico → service}/betha/v1/consulta_lote_rps.rb +2 -2
- data/test/factories/{servico → service}/betha/v1/consulta_nfs_por_rps.rb +1 -1
- data/test/factories/service/betha/v1/consulta_nfse.rb +8 -0
- data/test/factories/{servico → service}/betha/v1/consulta_situacao_lote_rps.rb +2 -2
- data/test/factories/{servico → service}/betha/v1/gateway.rb +1 -1
- data/test/factories/service/betha/v1/recepcao_lote_rps.rb +8 -0
- data/test/factories/{servico → service}/intermediario.rb +2 -2
- data/test/factories/service/item.rb +12 -0
- data/test/factories/service/rps.rb +50 -0
- data/test/factories/service/sc/florianopolis/base.rb +5 -0
- data/test/factories/service/sc/florianopolis/cancellation.rb +7 -0
- data/test/factories/service/sc/florianopolis/emission_rps.rb +7 -0
- data/test/factories/service/sc/gaspar/cancela_nfse.rb +9 -0
- data/test/factories/service/sc/gaspar/consulta_lote_rps.rb +7 -0
- data/test/factories/service/sc/gaspar/consulta_nfs_por_rps.rb +6 -0
- data/test/factories/service/sc/gaspar/consulta_nfse.rb +8 -0
- data/test/factories/service/sc/gaspar/consulta_situacao_lote_rps.rb +6 -0
- data/test/factories/service/sc/gaspar/recepcao_lote_rps.rb +9 -0
- data/test/factories/service/sc/gaspar/recepcao_lote_rps_limitado.rb +9 -0
- data/test/factories/service/thema/v1/base.rb +7 -0
- data/test/factories/service/thema/v1/cancela_nfse.rb +9 -0
- data/test/factories/service/thema/v1/consulta_lote_rps.rb +7 -0
- data/test/factories/service/thema/v1/consulta_nfs_por_rps.rb +6 -0
- data/test/factories/service/thema/v1/consulta_nfse.rb +8 -0
- data/test/factories/service/thema/v1/consulta_situacao_lote_rps.rb +6 -0
- data/test/factories/service/thema/v1/recepcao_lote_rps.rb +9 -0
- data/test/factories/service/thema/v1/recepcao_lote_rps_limitado.rb +8 -0
- data/test/test_helper.rb +42 -0
- metadata +338 -121
- data/lib/br_nfe/servico/base.rb +0 -35
- data/lib/br_nfe/servico/betha/base.rb +0 -85
- data/lib/br_nfe/servico/betha/build_response.rb +0 -141
- data/lib/br_nfe/servico/betha/v1/build_response.rb +0 -121
- data/lib/br_nfe/servico/betha/v1/cancelamento_nfs.rb +0 -52
- data/lib/br_nfe/servico/betha/v1/consulta_lote_rps.rb +0 -33
- data/lib/br_nfe/servico/betha/v1/consulta_nfs_por_rps.rb +0 -37
- data/lib/br_nfe/servico/betha/v1/consulta_nfse.rb +0 -51
- data/lib/br_nfe/servico/betha/v1/consulta_situacao_lote_rps.rb +0 -18
- data/lib/br_nfe/servico/betha/v1/gateway.rb +0 -125
- data/lib/br_nfe/servico/betha/v1/recepcao_lote_rps.rb +0 -97
- data/lib/br_nfe/servico/betha/v2/build_response.rb +0 -159
- data/lib/br_nfe/servico/betha/v2/cancelamento_nfs.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/consulta_lote_rps.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/consulta_nfse_por_rps.rb +0 -27
- data/lib/br_nfe/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/gateway.rb +0 -230
- data/lib/br_nfe/servico/betha/v2/gera_nfse.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/recepcao_lote_rps.rb +0 -52
- data/lib/br_nfe/servico/betha/v2/substituicao_nfse.rb +0 -43
- data/lib/br_nfe/servico/response/default.rb +0 -34
- data/lib/br_nfe/servico/rps.rb +0 -108
- data/test/br_nfe/servico/betha/base_test.rb +0 -135
- data/test/br_nfe/servico/betha/v1/build_response_test.rb +0 -557
- data/test/br_nfe/servico/betha/v1/cancelamento_nfs_test.rb +0 -72
- data/test/br_nfe/servico/betha/v1/consulta_lote_rps_test.rb +0 -46
- data/test/br_nfe/servico/betha/v1/consulta_nfs_por_rps_test.rb +0 -68
- data/test/br_nfe/servico/betha/v1/consulta_nfse_test.rb +0 -74
- data/test/br_nfe/servico/betha/v1/consulta_situacao_lote_rps_test.rb +0 -27
- data/test/br_nfe/servico/betha/v1/gateway_test.rb +0 -151
- data/test/br_nfe/servico/betha/v1/recepcao_lote_rps_test.rb +0 -249
- data/test/br_nfe/servico/betha/v2/cancelamento_nfs_test.rb +0 -44
- data/test/br_nfe/servico/betha/v2/consulta_lote_rps_test.rb +0 -38
- data/test/br_nfe/servico/betha/v2/consulta_nfse_por_rps_test.rb +0 -36
- data/test/br_nfe/servico/betha/v2/envio_lote_rps_sincrono_test.rb +0 -51
- data/test/br_nfe/servico/betha/v2/gateway_test.rb +0 -372
- data/test/br_nfe/servico/betha/v2/gera_nfse_test.rb +0 -62
- data/test/br_nfe/servico/betha/v2/recepcao_lote_rps_test.rb +0 -108
- data/test/br_nfe/servico/betha/v2/substituicao_nfse_test.rb +0 -84
- data/test/br_nfe/servico/response/default_test.rb +0 -54
- data/test/factories/servico/base.rb +0 -5
- data/test/factories/servico/betha/base.rb +0 -5
- data/test/factories/servico/betha/v1/build_response.rb +0 -6
- data/test/factories/servico/betha/v1/cancelamento_nfs.rb +0 -7
- data/test/factories/servico/betha/v1/consulta_nfse.rb +0 -8
- data/test/factories/servico/betha/v1/recepcao_lote_rps.rb +0 -6
- data/test/factories/servico/betha/v2/cancelamento_nfs.rb +0 -7
- data/test/factories/servico/betha/v2/consulta_lote_rps.rb +0 -6
- data/test/factories/servico/betha/v2/consulta_nfse_por_rps.rb +0 -6
- data/test/factories/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -5
- data/test/factories/servico/betha/v2/gateway.rb +0 -5
- data/test/factories/servico/betha/v2/gera_nfse.rb +0 -6
- data/test/factories/servico/betha/v2/recepcao_lote_rps.rb +0 -5
- data/test/factories/servico/betha/v2/substituicao_nfse.rb +0 -8
- data/test/factories/servico/response/default.rb +0 -10
- data/test/factories/servico/rps.rb +0 -44
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
- xml_rps = render_xml '_tc_inf_rps', rps: rps
|
|
2
|
+
/ Alguns órgãos emissores não aceitam o atributo ID na tag (Como a betha)
|
|
3
|
+
- attributes_inf_rps = id_attribute? ? {id: "R#{rps.numero}"} : {}
|
|
4
|
+
InfRps *attributes_inf_rps
|
|
5
|
+
= xml_rps.html_safe
|
|
6
|
+
|
|
7
|
+
- if certificate
|
|
8
|
+
= render_xml('signature_sh1', data_xml: xml_rps.html_safe, uri: "#R#{rps.numero}").html_safe
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
- rps ||= false
|
|
2
|
+
- raise "É obrigatório passar um RPS por parâmetro" unless rps
|
|
3
|
+
|
|
4
|
+
ValorServicos = ts_valor(rps.total_services)
|
|
5
|
+
|
|
6
|
+
- if rps.deductions.present? && rps.deductions.to_f > 0.0
|
|
7
|
+
ValorDeducoes = ts_valor(rps.deductions)
|
|
8
|
+
|
|
9
|
+
- if rps.valor_pis.present? && rps.valor_pis.to_f > 0.0
|
|
10
|
+
ValorPis = ts_valor(rps.valor_pis)
|
|
11
|
+
|
|
12
|
+
- if rps.valor_cofins.present? && rps.valor_cofins.to_f > 0.0
|
|
13
|
+
ValorCofins = ts_valor(rps.valor_cofins)
|
|
14
|
+
|
|
15
|
+
- if rps.valor_inss.present? && rps.valor_inss.to_f > 0.0
|
|
16
|
+
ValorInss = ts_valor(rps.valor_inss)
|
|
17
|
+
|
|
18
|
+
- if rps.valor_ir.present? && rps.valor_ir.to_f > 0.0
|
|
19
|
+
ValorIr = ts_valor(rps.valor_ir)
|
|
20
|
+
|
|
21
|
+
- if rps.valor_csll.present? && rps.valor_csll.to_f > 0.0
|
|
22
|
+
ValorCsll = ts_valor(rps.valor_csll)
|
|
23
|
+
|
|
24
|
+
IssRetido = ts_sim_nao(rps.iss_retained?)
|
|
25
|
+
|
|
26
|
+
- if rps.total_iss.present? && rps.total_iss.to_f > 0.0
|
|
27
|
+
ValorIss = ts_valor(rps.total_iss)
|
|
28
|
+
|
|
29
|
+
- if rps.total_iss_retained.present? && rps.total_iss_retained.to_f > 0.0
|
|
30
|
+
ValorIssRetido = ts_valor(rps.total_iss_retained)
|
|
31
|
+
|
|
32
|
+
- if rps.outras_retencoes.present? && rps.outras_retencoes.to_f > 0.0
|
|
33
|
+
OutrasRetencoes = ts_valor(rps.outras_retencoes)
|
|
34
|
+
|
|
35
|
+
- if rps.base_calculation.present? && rps.base_calculation.to_f > 0.0
|
|
36
|
+
BaseCalculo = ts_valor(rps.base_calculation)
|
|
37
|
+
|
|
38
|
+
- if rps.iss_tax_rate.present? && rps.iss_tax_rate.to_f > 0.0
|
|
39
|
+
Aliquota = ts_aliquota(rps.iss_tax_rate)
|
|
40
|
+
|
|
41
|
+
- if rps.net_value.present? && rps.net_value.to_f > 0.0
|
|
42
|
+
ValorLiquidoNfse = ts_valor(rps.net_value)
|
|
43
|
+
|
|
44
|
+
- if rps.desconto_incondicionado.present? && rps.desconto_incondicionado.to_f > 0.0
|
|
45
|
+
DescontoIncondicionado = ts_valor(rps.desconto_incondicionado)
|
|
46
|
+
|
|
47
|
+
- if rps.desconto_condicionado.present? && rps.desconto_condicionado.to_f > 0.0
|
|
48
|
+
DescontoCondicionado = ts_valor(rps.desconto_condicionado)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
*{tag: "#{namespace_identifier.to_s+':' if namespace_identifier}CancelarNfseEnvio"} *message_namespaces
|
|
2
|
+
Pedido
|
|
3
|
+
- id_cancelamento = Time.now.nsec
|
|
4
|
+
- xml_pedido_cancel = render_xml '_tc_pedido_cancelamento', id_cancelamento: "C#{id_cancelamento}"
|
|
5
|
+
|
|
6
|
+
= xml_pedido_cancel.html_safe
|
|
7
|
+
|
|
8
|
+
- if certificate
|
|
9
|
+
= render_xml('signature_sh1', data_xml: xml_pedido_cancel.html_safe, uri: "#C#{id_cancelamento}").html_safe
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
*{tag: "#{namespace_identifier.to_s+':' if namespace_identifier}ConsultarNfseEnvio"} *message_namespaces
|
|
2
|
+
Prestador
|
|
3
|
+
= render_xml '_tc_identificacao_prestador'
|
|
4
|
+
|
|
5
|
+
- if nfe_number.present?
|
|
6
|
+
NumeroNfse = ts_numero_nfse(nfe_number)
|
|
7
|
+
|
|
8
|
+
- if start_date.present? && end_date.present?
|
|
9
|
+
PeriodoEmissao
|
|
10
|
+
DataInicial = ts_date(start_date)
|
|
11
|
+
DataFinal = ts_date(end_date)
|
|
12
|
+
|
|
13
|
+
- if destinatario.present? && destinatario.cpf_cnpj.present?
|
|
14
|
+
Tomador
|
|
15
|
+
= render_xml '_tc_identificacao_tomador', destinatario: destinatario
|
|
16
|
+
|
|
17
|
+
- if intermediario.present? && intermediario.cpf_cnpj.present?
|
|
18
|
+
IntermediarioServico
|
|
19
|
+
= render_xml '_tc_identificacao_intermediario_servico', intermediario: intermediario
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
*{tag: "#{namespace_identifier.to_s+':' if namespace_identifier}EnviarLoteRpsEnvio"} *message_namespaces
|
|
2
|
+
- xml_lote_rps = render_xml('_tc_lote_rps')
|
|
3
|
+
/ Alguns órgãos emissores não aceitam o atributo ID na tag (Como a betha)
|
|
4
|
+
- attributes_lote_rps = id_attribute? ? {id: "L#{numero_lote_rps}"} : {}
|
|
5
|
+
LoteRps *attributes_lote_rps
|
|
6
|
+
= xml_lote_rps.html_safe
|
|
7
|
+
|
|
8
|
+
- if certificate
|
|
9
|
+
= render_xml('signature_sh1', data_xml: xml_lote_rps.html_safe, uri: "#L#{numero_lote_rps}").html_safe
|
data/lib/br_nfe/version.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module BrNfe
|
|
2
2
|
module Version
|
|
3
|
-
MAJOR =
|
|
4
|
-
MINOR =
|
|
3
|
+
MAJOR = 2 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
|
|
4
|
+
MINOR = 0 #inclui novas funcionalidades, sem quebrar APIs existentes
|
|
5
5
|
PATCH = 0 #corrige bugs ou traz melhorias em implementações já existentes
|
|
6
6
|
CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
|
|
7
7
|
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"
|
|
2
|
+
CanonicalizationMethod Algorithm="#{canonicalization_method_algorithm}"
|
|
3
|
+
SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"
|
|
4
|
+
Reference URI="#{uri}"
|
|
5
|
+
Transforms
|
|
6
|
+
Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"
|
|
7
|
+
Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
|
|
8
|
+
DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"
|
|
9
|
+
DigestValue = remove_quebras Base64.encode64(OpenSSL::Digest::SHA1.digest(data_xml.html_safe))
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/ Alguns órgãos emissores não aceitam o atributo ID na tag (Como a betha)
|
|
2
|
+
- uri_value = id_attribute? ? uri : nil
|
|
3
|
+
Signature xmlns="http://www.w3.org/2000/09/xmldsig#"
|
|
4
|
+
- info_xml = render_xml('_signed_info_sh1', data_xml: data_xml, uri: uri_value)
|
|
5
|
+
= info_xml.html_safe
|
|
6
|
+
|
|
7
|
+
- signature_hash = certificate_key.sign(OpenSSL::Digest::SHA1.new, info_xml.html_safe)
|
|
8
|
+
SignatureValue = remove_quebras( Base64.encode64( signature_hash ) )
|
|
9
|
+
|
|
10
|
+
KeyInfo
|
|
11
|
+
X509Data
|
|
12
|
+
X509Certificate = certificate.to_s.gsub(/\-\-\-\-\-[A-Z]+ CERTIFICATE\-\-\-\-\-/, "").gsub(/\n/,"")
|
data/lib/br_nfe.rb
CHANGED
|
@@ -10,6 +10,7 @@ require "br_nfe/helper/string_methods"
|
|
|
10
10
|
|
|
11
11
|
require "signer"
|
|
12
12
|
require "savon"
|
|
13
|
+
require "slim"
|
|
13
14
|
|
|
14
15
|
require "br_nfe/helper/have_address"
|
|
15
16
|
require "br_nfe/helper/have_rps"
|
|
@@ -17,8 +18,24 @@ require "br_nfe/helper/have_emitente"
|
|
|
17
18
|
require "br_nfe/helper/have_destinatario"
|
|
18
19
|
require "br_nfe/helper/have_intermediario"
|
|
19
20
|
require "br_nfe/helper/have_condicao_pagamento"
|
|
21
|
+
require "br_nfe/helper/values_ts/service_v1"
|
|
20
22
|
|
|
23
|
+
# Regras e atributos para as classes
|
|
24
|
+
require "br_nfe/service/concerns/rules/recepcao_lote_rps"
|
|
25
|
+
require "br_nfe/service/concerns/rules/consulta_nfse"
|
|
26
|
+
require "br_nfe/service/concerns/rules/consulta_nfs_por_rps"
|
|
27
|
+
require "br_nfe/service/concerns/rules/cancelamento_nfs"
|
|
21
28
|
|
|
29
|
+
# Carrega os modules que contém os paths para buildar a resposta das requisições
|
|
30
|
+
require 'br_nfe/response/service/paths/base.rb'
|
|
31
|
+
require 'br_nfe/response/service/paths/v1/tc_nfse.rb'
|
|
32
|
+
|
|
33
|
+
require 'br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb'
|
|
34
|
+
require 'br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb'
|
|
35
|
+
require 'br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb'
|
|
36
|
+
require 'br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb'
|
|
37
|
+
require 'br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb'
|
|
38
|
+
require 'br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb'
|
|
22
39
|
|
|
23
40
|
# Copyright (C) 2015 Bruno M. Mergen
|
|
24
41
|
#
|
|
@@ -26,6 +43,10 @@ require "br_nfe/helper/have_condicao_pagamento"
|
|
|
26
43
|
#
|
|
27
44
|
#
|
|
28
45
|
module BrNfe
|
|
46
|
+
def self.root
|
|
47
|
+
File.expand_path '../..', __FILE__
|
|
48
|
+
end
|
|
49
|
+
|
|
29
50
|
Time::DATE_FORMATS[:br_nfe] = "%Y-%m-%dT%H:%M:%S"
|
|
30
51
|
DateTime::DATE_FORMATS[:br_nfe] = "%Y-%m-%dT%H:%M:%S"
|
|
31
52
|
Date::DATE_FORMATS[:br_nfe] = "%Y-%m-%d"
|
|
@@ -39,29 +60,37 @@ module BrNfe
|
|
|
39
60
|
autoload :Endereco
|
|
40
61
|
autoload :Emitente
|
|
41
62
|
autoload :Destinatario
|
|
42
|
-
autoload :Response
|
|
43
63
|
autoload :Base
|
|
44
64
|
autoload :CondicaoPagamento
|
|
45
65
|
|
|
46
|
-
module
|
|
66
|
+
module Response
|
|
67
|
+
module Service
|
|
68
|
+
extend ActiveSupport::Autoload
|
|
69
|
+
autoload :Default
|
|
70
|
+
autoload :NotaFiscal
|
|
71
|
+
autoload :BuildResponse
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
module Service
|
|
47
76
|
extend ActiveSupport::Autoload
|
|
48
77
|
autoload :Intermediario
|
|
78
|
+
autoload :Item
|
|
49
79
|
autoload :Rps
|
|
50
80
|
autoload :Base
|
|
51
81
|
|
|
52
|
-
module Response
|
|
53
|
-
extend ActiveSupport::Autoload
|
|
54
|
-
autoload :Default
|
|
55
|
-
autoload :NotaFiscal
|
|
56
|
-
end
|
|
57
82
|
module Betha
|
|
58
83
|
extend ActiveSupport::Autoload
|
|
59
84
|
autoload :Base
|
|
60
|
-
autoload :BuildResponse
|
|
61
85
|
module V1
|
|
86
|
+
module ResponsePaths
|
|
87
|
+
extend ActiveSupport::Autoload
|
|
88
|
+
autoload :ServicoConsultarLoteRpsResposta
|
|
89
|
+
autoload :ServicoConsultarNfseResposta
|
|
90
|
+
autoload :ServicoConsultarNfseRpsResposta
|
|
91
|
+
end
|
|
62
92
|
extend ActiveSupport::Autoload
|
|
63
93
|
autoload :Gateway
|
|
64
|
-
autoload :BuildResponse
|
|
65
94
|
autoload :ConsultaLoteRps
|
|
66
95
|
autoload :ConsultaNfse
|
|
67
96
|
autoload :ConsultaNfsPorRps
|
|
@@ -69,17 +98,37 @@ module BrNfe
|
|
|
69
98
|
autoload :ConsultaSituacaoLoteRps
|
|
70
99
|
autoload :RecepcaoLoteRps
|
|
71
100
|
end
|
|
72
|
-
|
|
101
|
+
end
|
|
102
|
+
module Thema
|
|
103
|
+
module V1
|
|
73
104
|
extend ActiveSupport::Autoload
|
|
74
|
-
autoload :
|
|
75
|
-
autoload :
|
|
76
|
-
autoload :
|
|
77
|
-
autoload :
|
|
78
|
-
autoload :
|
|
79
|
-
autoload :
|
|
80
|
-
autoload :
|
|
105
|
+
autoload :Base
|
|
106
|
+
autoload :CancelaNfse
|
|
107
|
+
autoload :ConsultaSituacaoLoteRps
|
|
108
|
+
autoload :ConsultaNfsPorRps
|
|
109
|
+
autoload :RecepcaoLoteRps
|
|
110
|
+
autoload :RecepcaoLoteRpsLimitado
|
|
111
|
+
autoload :ConsultaNfse
|
|
81
112
|
autoload :ConsultaLoteRps
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
module SC
|
|
116
|
+
module Florianopolis
|
|
117
|
+
extend ActiveSupport::Autoload
|
|
118
|
+
autoload :Base
|
|
119
|
+
autoload :EmissionRPS
|
|
120
|
+
autoload :Cancellation
|
|
121
|
+
end
|
|
122
|
+
module Gaspar
|
|
123
|
+
extend ActiveSupport::Autoload
|
|
124
|
+
autoload :Base
|
|
125
|
+
autoload :CancelaNfse
|
|
82
126
|
autoload :RecepcaoLoteRps
|
|
127
|
+
autoload :ConsultaNfsPorRps
|
|
128
|
+
autoload :ConsultaSituacaoLoteRps
|
|
129
|
+
autoload :RecepcaoLoteRpsLimitado
|
|
130
|
+
autoload :ConsultaNfse
|
|
131
|
+
autoload :ConsultaLoteRps
|
|
83
132
|
end
|
|
84
133
|
end
|
|
85
134
|
end
|
|
@@ -113,13 +162,16 @@ module BrNfe
|
|
|
113
162
|
@@destinatario_class = BrNfe::Destinatario
|
|
114
163
|
|
|
115
164
|
mattr_accessor :intermediario_class
|
|
116
|
-
@@intermediario_class = BrNfe::
|
|
165
|
+
@@intermediario_class = BrNfe::Service::Intermediario
|
|
117
166
|
|
|
118
167
|
mattr_accessor :condicao_pagamento_class
|
|
119
168
|
@@condicao_pagamento_class = BrNfe::CondicaoPagamento
|
|
120
169
|
|
|
121
170
|
mattr_accessor :rps_class
|
|
122
|
-
@@rps_class = BrNfe::
|
|
171
|
+
@@rps_class = BrNfe::Service::Rps
|
|
172
|
+
|
|
173
|
+
mattr_accessor :service_item_class
|
|
174
|
+
@@service_item_class = BrNfe::Service::Item
|
|
123
175
|
|
|
124
176
|
# Configurações do Cliente WSDL
|
|
125
177
|
mattr_accessor :client_wsdl_ssl_verify_mode
|
|
@@ -142,5 +194,5 @@ module BrNfe
|
|
|
142
194
|
######################### END CONFIGURAÇÕES #########################
|
|
143
195
|
|
|
144
196
|
include Helper
|
|
145
|
-
include
|
|
197
|
+
include Service
|
|
146
198
|
end
|
data/test/br_nfe/base_test.rb
CHANGED
|
@@ -3,19 +3,16 @@ require 'br_nfe/helper/have_emitente_test'
|
|
|
3
3
|
|
|
4
4
|
describe BrNfe::Base do
|
|
5
5
|
subject { FactoryGirl.build(:br_nfe_base, emitente: emitente) }
|
|
6
|
-
let(:certificado) { Certificado.new }
|
|
7
6
|
let(:emitente) { FactoryGirl.build(:emitente) }
|
|
8
7
|
|
|
9
|
-
before do
|
|
10
|
-
subject.stubs(:certificate_pkcs12).returns(certificado)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
8
|
describe "validations" do
|
|
14
9
|
context "obrigatoriedade do certificado" do
|
|
15
|
-
before { subject.unstub(:certificate_pkcs12) }
|
|
16
10
|
it "deve ser obrigatorio se certificado_obrigatorio? for true" do
|
|
17
11
|
subject.stubs(:certificado_obrigatorio?).returns(true)
|
|
18
12
|
subject.certificate_pkcs12 = nil
|
|
13
|
+
subject.certificate_pkcs12_value = nil
|
|
14
|
+
subject.certificate_pkcs12_password = nil
|
|
15
|
+
|
|
19
16
|
must validate_presence_of(:certificate)
|
|
20
17
|
must validate_presence_of(:certificate_key)
|
|
21
18
|
end
|
|
@@ -57,26 +54,22 @@ describe BrNfe::Base do
|
|
|
57
54
|
end
|
|
58
55
|
end
|
|
59
56
|
|
|
60
|
-
describe "#
|
|
61
|
-
it
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
it "certificado_obrigatorio?" do
|
|
65
|
-
subject.certificado_obrigatorio?.must_equal false
|
|
57
|
+
describe "#certificado_obrigatorio?" do
|
|
58
|
+
it "por padrão o certificado digital não deve ser obrigatório" do
|
|
59
|
+
subject.certificado_obrigatorio?.must_equal false
|
|
60
|
+
end
|
|
66
61
|
end
|
|
67
62
|
|
|
68
|
-
describe "#
|
|
69
|
-
it "
|
|
70
|
-
subject.
|
|
71
|
-
subject.
|
|
63
|
+
describe "#original_response" do
|
|
64
|
+
it "deve retornar o valor da variavel @original_response" do
|
|
65
|
+
subject.instance_variable_set(:@original_response, 'valor')
|
|
66
|
+
subject.original_response.must_equal 'valor'
|
|
72
67
|
end
|
|
73
|
-
it "
|
|
74
|
-
subject.
|
|
75
|
-
File.expects(:read).with("algum/lugar.pfx").returns("valor do arquivo")
|
|
76
|
-
subject.certificate_pkcs12_value.must_equal "valor do arquivo"
|
|
68
|
+
it "valor default" do
|
|
69
|
+
subject.original_response.must_be_nil
|
|
77
70
|
end
|
|
78
71
|
end
|
|
79
|
-
|
|
72
|
+
|
|
80
73
|
describe "#response" do
|
|
81
74
|
it "deve retornar o valor da variavel @response" do
|
|
82
75
|
subject.instance_variable_set(:@response, 'valor')
|
|
@@ -87,16 +80,12 @@ describe BrNfe::Base do
|
|
|
87
80
|
end
|
|
88
81
|
end
|
|
89
82
|
|
|
90
|
-
describe "#
|
|
91
|
-
it "deve
|
|
92
|
-
subject.
|
|
93
|
-
subject.original_response.must_equal 'valor'
|
|
94
|
-
end
|
|
95
|
-
it "valor default" do
|
|
96
|
-
subject.original_response.must_be_nil
|
|
83
|
+
describe "#env_namespace" do
|
|
84
|
+
it "deve ser soapenv" do
|
|
85
|
+
subject.env_namespace.must_equal :soapenv
|
|
97
86
|
end
|
|
98
87
|
end
|
|
99
|
-
|
|
88
|
+
|
|
100
89
|
describe "#wsdl" do
|
|
101
90
|
it "deve dar um erro por default" do
|
|
102
91
|
assert_raises RuntimeError do
|
|
@@ -105,12 +94,6 @@ describe BrNfe::Base do
|
|
|
105
94
|
end
|
|
106
95
|
end
|
|
107
96
|
|
|
108
|
-
describe "#env_namespace" do
|
|
109
|
-
it "deve ser soapenv" do
|
|
110
|
-
subject.env_namespace.must_equal :soapenv
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
97
|
describe "#method_wsdl" do
|
|
115
98
|
it "deve dar um erro por default" do
|
|
116
99
|
assert_raises RuntimeError do
|
|
@@ -127,17 +110,244 @@ describe BrNfe::Base do
|
|
|
127
110
|
end
|
|
128
111
|
end
|
|
129
112
|
|
|
113
|
+
describe "#content_xml" do
|
|
114
|
+
it "por padrão deve retornar o valor de xml_builder" do
|
|
115
|
+
subject.expects(:xml_builder).returns(:val_xml_builder)
|
|
116
|
+
subject.content_xml.must_equal :val_xml_builder
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
130
120
|
describe "#namespace_identifier" do
|
|
131
|
-
it "
|
|
121
|
+
it "por padrão deve ser nil" do
|
|
122
|
+
subject.namespace_identifier.must_be_nil
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe "#message_namespaces" do
|
|
127
|
+
it "valor padrão deve ser um hash vazio" do
|
|
128
|
+
subject.message_namespaces.must_equal({})
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe "#soap_namespaces" do
|
|
133
|
+
it "valor padrão deve ser um hash com valores padrões da requisição SOAP" do
|
|
134
|
+
subject.soap_namespaces.must_equal({
|
|
135
|
+
'xmlns:soapenv' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
|
136
|
+
'xmlns:ins0' => 'http://www.w3.org/2000/09/xmldsig#',
|
|
137
|
+
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema',
|
|
138
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance'
|
|
139
|
+
})
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe "#wsdl_encoding" do
|
|
144
|
+
it { subject.wsdl_encoding.must_equal 'UTF-8' }
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe "tag_xml" do
|
|
148
|
+
it "deve retornar a definição XML com o encoding de wsdl_encoding" do
|
|
149
|
+
subject.expects(:wsdl_encoding).returns('ENCODE')
|
|
150
|
+
subject.tag_xml.must_equal '<?xml version="1.0" encoding="ENCODE"?>'
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
describe "#soap_xml" do
|
|
155
|
+
it "deve concatenar a #tag_xml junto com a renderização para o template 'soap_env'" do
|
|
156
|
+
subject.expects(:tag_xml).returns('<?xml?>')
|
|
157
|
+
subject.expects(:render_xml).with('soap_env').returns('<SOAP>env</SOAP>')
|
|
158
|
+
subject.soap_xml.must_equal '<?xml?><SOAP>env</SOAP>'
|
|
159
|
+
subject.instance_variable_get(:@soap_xml).must_equal '<?xml?><SOAP>env</SOAP>'
|
|
160
|
+
end
|
|
161
|
+
it "se já temm valor na variavel @soap_xml não deve gerar o xml novamnete" do
|
|
162
|
+
subject.instance_variable_set(:@soap_xml, 'xml')
|
|
163
|
+
subject.expects(:tag_xml).never
|
|
164
|
+
subject.expects(:render_xml).never
|
|
165
|
+
subject.soap_xml.must_equal 'xml'
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
describe "xml_version" do
|
|
170
|
+
it "por padrão deve retornar :v1" do
|
|
171
|
+
subject.xml_version.must_equal :v1
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
describe "#client_wsdl" do
|
|
176
|
+
it "deve instanciar um Savon.client com a configuração adequada" do
|
|
177
|
+
# Stub metodos para configuração do client WSDL
|
|
178
|
+
subject.expects(:wsdl).returns('wsdl')
|
|
179
|
+
|
|
180
|
+
subject.client_wsdl_ssl_verify_mode = 'client_wsdl_ssl_verify_mode'
|
|
181
|
+
subject.client_wsdl_ssl_cert_file = 'client_wsdl_ssl_cert_file'
|
|
182
|
+
subject.client_wsdl_ssl_cert_key_file = 'client_wsdl_ssl_cert_key_file'
|
|
183
|
+
subject.client_wsdl_ssl_cert_key_password = 'client_wsdl_ssl_cert_key_password'
|
|
184
|
+
|
|
185
|
+
# Ajusto a configuração da gem para testar
|
|
186
|
+
BrNfe.client_wsdl_log = 'client_wsdl_log'
|
|
187
|
+
BrNfe.client_wsdl_pretty_print_xml = 'client_wsdl_pretty_print_xml'
|
|
188
|
+
|
|
189
|
+
subject.instance_variable_get(:@client_wsdl).must_be_nil
|
|
190
|
+
|
|
191
|
+
Savon.expects(:client).with({
|
|
192
|
+
wsdl: 'wsdl',
|
|
193
|
+
log: 'client_wsdl_log',
|
|
194
|
+
pretty_print_xml: 'client_wsdl_pretty_print_xml',
|
|
195
|
+
ssl_verify_mode: 'client_wsdl_ssl_verify_mode',
|
|
196
|
+
ssl_cert_file: 'client_wsdl_ssl_cert_file',
|
|
197
|
+
ssl_cert_key_file: 'client_wsdl_ssl_cert_key_file',
|
|
198
|
+
ssl_cert_key_password: 'client_wsdl_ssl_cert_key_password'
|
|
199
|
+
}).returns('client wsdl')
|
|
200
|
+
|
|
201
|
+
subject.client_wsdl.must_equal 'client wsdl'
|
|
202
|
+
subject.instance_variable_get(:@client_wsdl).must_equal 'client wsdl'
|
|
203
|
+
end
|
|
204
|
+
it "se ja tiver valor na variavel @client_wsdl deve manter esse valor" do
|
|
205
|
+
Savon.expects(:client).never
|
|
206
|
+
subject.instance_variable_set(:@client_wsdl, :valor_client_wsdl)
|
|
207
|
+
subject.client_wsdl.must_equal :valor_client_wsdl
|
|
208
|
+
subject.instance_variable_get(:@client_wsdl).must_equal :valor_client_wsdl
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
describe '#client_wsdl_ssl_verify_mode' do
|
|
213
|
+
it "se eu setar um valor deve retornar esse valor" do
|
|
214
|
+
subject.client_wsdl_ssl_verify_mode = :value_client_wsdl_ssl_verify_mode
|
|
215
|
+
subject.client_wsdl_ssl_verify_mode.must_equal :value_client_wsdl_ssl_verify_mode
|
|
216
|
+
end
|
|
217
|
+
it "se não setar nenhum valor deve retornar o valor da configuração" do
|
|
218
|
+
subject.class.new.client_wsdl_ssl_verify_mode.must_equal BrNfe.client_wsdl_ssl_verify_mode
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
describe '#client_wsdl_ssl_cert_file' do
|
|
223
|
+
it "se eu setar um valor deve retornar esse valor" do
|
|
224
|
+
subject.client_wsdl_ssl_cert_file = :value_client_wsdl_ssl_cert_file
|
|
225
|
+
subject.client_wsdl_ssl_cert_file.must_equal :value_client_wsdl_ssl_cert_file
|
|
226
|
+
end
|
|
227
|
+
it "se não setar nenhum valor deve retornar o valor da configuração" do
|
|
228
|
+
subject.class.new.client_wsdl_ssl_cert_file.must_equal BrNfe.client_wsdl_ssl_cert_file
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
describe '#client_wsdl_ssl_cert_key_file' do
|
|
233
|
+
it "se eu setar um valor deve retornar esse valor" do
|
|
234
|
+
subject.client_wsdl_ssl_cert_key_file = :value_client_wsdl_ssl_cert_key_file
|
|
235
|
+
subject.client_wsdl_ssl_cert_key_file.must_equal :value_client_wsdl_ssl_cert_key_file
|
|
236
|
+
end
|
|
237
|
+
it "se não setar nenhum valor deve retornar o valor da configuração" do
|
|
238
|
+
subject.class.new.client_wsdl_ssl_cert_key_file.must_equal BrNfe.client_wsdl_ssl_cert_key_file
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
describe '#client_wsdl_ssl_cert_key_password' do
|
|
243
|
+
it "se eu setar um valor deve retornar esse valor" do
|
|
244
|
+
subject.client_wsdl_ssl_cert_key_password = :value_client_wsdl_ssl_cert_key_password
|
|
245
|
+
subject.client_wsdl_ssl_cert_key_password.must_equal :value_client_wsdl_ssl_cert_key_password
|
|
246
|
+
end
|
|
247
|
+
it "se não setar nenhum valor deve retornar o valor da configuração" do
|
|
248
|
+
subject.class.new.client_wsdl_ssl_cert_key_password.must_equal BrNfe.client_wsdl_ssl_cert_key_password
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
describe "#certificate_pkcs12_value" do
|
|
253
|
+
it "se tiver algum valor setado deve retornar esse valor" do
|
|
254
|
+
subject.certificate_pkcs12_value = "algum valor"
|
|
255
|
+
subject.certificate_pkcs12_value.must_equal "algum valor"
|
|
256
|
+
end
|
|
257
|
+
it "se não tiver um valor deve carregar o arquivo setado no atributo certificado_path" do
|
|
258
|
+
subject.certificate_pkcs12_path = "algum/lugar.pfx"
|
|
259
|
+
File.expects(:read).with("algum/lugar.pfx").returns("valor do arquivo")
|
|
260
|
+
subject.certificate_pkcs12_value.must_equal "valor do arquivo"
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
describe "#certificate_pkcs12" do
|
|
265
|
+
it "deve ler o certificate_pkcs12 PKCS12 do atributo certificate_pkcs12_value e com a senha do certificate_pkcs12_password" do
|
|
266
|
+
subject.assign_attributes(certificate_pkcs12: nil, certificate_pkcs12_value: "CERTIFICADO", certificate_pkcs12_password: 'pWd123')
|
|
267
|
+
OpenSSL::PKCS12.expects(:new).with("CERTIFICADO", 'pWd123').returns('certificate_pkcs12')
|
|
268
|
+
subject.certificate_pkcs12.must_equal 'certificate_pkcs12'
|
|
269
|
+
end
|
|
270
|
+
it "se já tem um certificate_pkcs12 na variavel @certificate_pkcs12 não deve ler novamente do PKCS12" do
|
|
271
|
+
base_nfe = FactoryGirl.build(:br_nfe_base, emitente: emitente, certificate_pkcs12_password: nil, certificate_pkcs12_path: nil)
|
|
272
|
+
base_nfe.instance_variable_set(:@certificate_pkcs12, subject.certificate_pkcs12)
|
|
273
|
+
|
|
274
|
+
subject.certificate_pkcs12.wont_be_nil
|
|
275
|
+
|
|
276
|
+
OpenSSL::PKCS12.expects(:new).never
|
|
277
|
+
base_nfe.certificate_pkcs12.must_equal subject.certificate_pkcs12
|
|
278
|
+
end
|
|
279
|
+
it "posso setar o certificate_pkcs12" do
|
|
280
|
+
subject.certificate_pkcs12 = 'certificate_pkcs12 123'
|
|
281
|
+
subject.certificate_pkcs12.must_equal 'certificate_pkcs12 123'
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
describe '#render_xml' do
|
|
286
|
+
it "quando não encontrar um arquivo para renderizar deve dar erro" do
|
|
132
287
|
assert_raises RuntimeError do
|
|
133
|
-
subject.
|
|
288
|
+
subject.render_xml 'nao_existe_esse_xml'
|
|
134
289
|
end
|
|
135
290
|
end
|
|
291
|
+
it "deve percorer todos os diretorios em sequencia até encontrar o XML" do
|
|
292
|
+
subject.expects(:get_xml_dirs).returns(['dir/1','dir/2','dir/3'])
|
|
293
|
+
subject.expects(:find_xml).with('file_name', 'dir/1', subject, {param: 1}).returns(nil).in_sequence(sequence_1)
|
|
294
|
+
subject.expects(:find_xml).with('file_name', 'dir/2', subject, {param: 1}).returns('result').in_sequence(sequence_1)
|
|
295
|
+
subject.expects(:find_xml).with('file_name', 'dir/3', subject, {param: 1}).never
|
|
296
|
+
|
|
297
|
+
subject.render_xml('file_name', {param: 1 }).must_equal 'result'
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
it "se não passar um context deve passar o context como parametro para o find_xml" do
|
|
301
|
+
subject.expects(:get_xml_dirs).returns(['dir/1'])
|
|
302
|
+
subject.expects(:find_xml).with('file_name', 'dir/1', :context, {}).returns('xml')
|
|
303
|
+
subject.render_xml('file_name', {context: :context}).must_equal 'xml'
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
it "posso passar um diretório customizado por parâmetro" do
|
|
307
|
+
subject.expects(:get_xml_dirs).with('custom/dir').returns(['custom/dir','dir/1'])
|
|
308
|
+
subject.expects(:find_xml).with('file_name', 'custom/dir', subject, {}).returns('xmlok')
|
|
309
|
+
subject.render_xml('file_name', {dir_path: 'custom/dir'}).must_equal 'xmlok'
|
|
310
|
+
end
|
|
311
|
+
it "posso passar variaveis por parâmetro na renderização do XML" do
|
|
312
|
+
subject.expects(:get_xml_dirs).with('custom/dir').returns(['custom/dir','dir/1'])
|
|
313
|
+
subject.expects(:find_xml).with('file_name', 'custom/dir', subject, {var1: 1, var2: 2}).returns(nil).in_sequence(sequence_1)
|
|
314
|
+
subject.expects(:find_xml).with('file_name', 'dir/1', subject, {var1: 1, var2: 2}).returns('xmlok').in_sequence(sequence_1)
|
|
315
|
+
subject.render_xml('file_name', {dir_path: 'custom/dir', var1: 1, var2: 2}).must_equal 'xmlok'
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
describe "#find_xml" do
|
|
320
|
+
it "se encontrar o arquivo no diretório passado por parâmetro deve renderizar o XML utilizando o Slim::Template" do
|
|
321
|
+
a_object = Object.new
|
|
322
|
+
File.expects(:exists?).with("file/dir/custom_file_name.xml.slim").returns(true).in_sequence(sequence_1)
|
|
323
|
+
Slim::Template.expects(:new).with("file/dir/custom_file_name.xml.slim").returns(a_object).in_sequence(sequence_1)
|
|
324
|
+
a_object.expects(:render).with(:context, :options).returns("<xml>val</xml>").in_sequence(sequence_1)
|
|
325
|
+
subject.find_xml('custom_file_name', 'file/dir', :context, :options).must_equal '<xml>val</xml>'
|
|
326
|
+
end
|
|
327
|
+
it "se não encontrar o arquivo no diretório passado por parâmetro deve retornar nil" do
|
|
328
|
+
File.expects(:exists?).with("file/dir/custom_file_name.xml.slim").returns(false)
|
|
329
|
+
Slim::Template.expects(:new).never
|
|
330
|
+
subject.find_xml('custom_file_name', 'file/dir', :context).must_be_nil
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
describe "#get_xml_dirs" do
|
|
335
|
+
it "deve retornar um array com o diretrio vindo por parametro junto com xml_current_dir_path e xml_default_dir_path" do
|
|
336
|
+
subject.expects(:xml_current_dir_path).returns(['dir1/current','dir2/current',''])
|
|
337
|
+
subject.expects(:xml_default_dir_path).returns('dir/default')
|
|
338
|
+
subject.get_xml_dirs('custom').must_equal(['custom','dir1/current','dir2/current','dir/default'])
|
|
339
|
+
end
|
|
136
340
|
end
|
|
137
341
|
|
|
138
|
-
describe
|
|
139
|
-
it "valor padrão" do
|
|
140
|
-
subject.
|
|
342
|
+
describe '#xml_current_dir_path' do
|
|
343
|
+
it "valor padrão deve ser um array vazio" do
|
|
344
|
+
subject.xml_current_dir_path.must_equal([])
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
describe '#xml_default_dir_path' do
|
|
349
|
+
it "valor padrão deve ser o caminho do XMl padrão da gem" do
|
|
350
|
+
subject.xml_default_dir_path.must_equal("#{BrNfe.root}/lib/br_nfe/xml")
|
|
141
351
|
end
|
|
142
352
|
end
|
|
143
353
|
|
|
@@ -177,9 +387,9 @@ describe BrNfe::Base do
|
|
|
177
387
|
subject.send(:canonicalize, xml).must_equal "<TagRaiz><TagFilho>Texo Tag \n\t\n\t Filho</TagFilho></TagRaiz>"
|
|
178
388
|
end
|
|
179
389
|
it "deve cannonicalizar um Document xml Nokogiri" do
|
|
180
|
-
xml = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |
|
|
181
|
-
|
|
182
|
-
|
|
390
|
+
xml = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |x|
|
|
391
|
+
x.TagRaiz{
|
|
392
|
+
x.TagFilho "Texo Tag \n\t\n\t Filho"
|
|
183
393
|
}
|
|
184
394
|
end.doc
|
|
185
395
|
subject.send(:canonicalize, xml).must_equal "<TagRaiz><TagFilho>Texo Tag \n\t\n\t Filho</TagFilho></TagRaiz>"
|
|
@@ -249,8 +459,6 @@ describe BrNfe::Base do
|
|
|
249
459
|
end
|
|
250
460
|
|
|
251
461
|
it "deve gerar o xml" do
|
|
252
|
-
certificado.stubs(:certificate).returns("-----BEGIN CERTIFICATE-----\nMCYwHAIBADAASDIHASDIASHDIAMAMGAQADAQAwAwYBAAMBAA==\n-----END CERTIFICATE-----\n")
|
|
253
|
-
|
|
254
462
|
subject.stubs(:signed_info).with(xml, 'URI123').returns(xml_signed_info)
|
|
255
463
|
subject.expects(:xml_signature_value).with('<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><Value>STUBADO</Value></Signature>').returns("KEYFORINFOSIGNED")
|
|
256
464
|
|
|
@@ -260,73 +468,14 @@ describe BrNfe::Base do
|
|
|
260
468
|
assinatura.remove_namespaces!
|
|
261
469
|
assinatura.xpath('Signature/Signature/Value').first.text.must_equal 'STUBADO'
|
|
262
470
|
assinatura.xpath('Signature/SignatureValue').first.text.must_equal 'KEYFORINFOSIGNED'
|
|
263
|
-
assinatura.xpath('Signature/KeyInfo/X509Data/X509Certificate').first.text.must_equal '
|
|
471
|
+
assinatura.xpath('Signature/KeyInfo/X509Data/X509Certificate').first.text.must_equal 'MIIEqzCCA5OgAwIBAgIDMTg4MA0GCSqGSIb3DQEBBQUAMIGSMQswCQYDVQQGEwJCUjELMAkGA1UECBMCUlMxFTATBgNVBAcTDFBvcnRvIEFsZWdyZTEdMBsGA1UEChMUVGVzdGUgUHJvamV0byBORmUgUlMxHTAbBgNVBAsTFFRlc3RlIFByb2pldG8gTkZlIFJTMSEwHwYDVQQDExhORmUgLSBBQyBJbnRlcm1lZGlhcmlhIDEwHhcNMDkwNTIyMTcwNzAzWhcNMTAxMDAyMTcwNzAzWjCBnjELMAkGA1UECBMCUlMxHTAbBgNVBAsTFFRlc3RlIFByb2pldG8gTkZlIFJTMR0wGwYDVQQKExRUZXN0ZSBQcm9qZXRvIE5GZSBSUzEVMBMGA1UEBxMMUE9SVE8gQUxFR1JFMQswCQYDVQQGEwJCUjEtMCsGA1UEAxMkTkZlIC0gQXNzb2NpYWNhbyBORi1lOjk5OTk5MDkwOTEwMjcwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCx1O/e1Q+xh+wCoxa4pr/5aEFt2dEX9iBJyYu/2a78emtorZKbWeyK435SRTbHxHSjqe1sWtIhXBaFa2dHiukT1WJyoAcXwB1GtxjT2VVESQGtRiujMa+opus6dufJJl7RslAjqN/ZPxcBXaezt0nHvnUB/uB1K8WT9G7ES0V17wIDAQABo4IBfjCCAXowIgYDVR0jAQEABBgwFoAUPT5TqhNWAm+ZpcVsvB7malDBjEQwDwYDVR0TAQH/BAUwAwEBADAPBgNVHQ8BAf8EBQMDAOAAMAwGA1UdIAEBAAQCMAAwgawGA1UdEQEBAASBoTCBnqA4BgVgTAEDBKAvBC0yMjA4MTk3Nzk5OTk5OTk5OTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCgEgYFYEwBAwKgCQQHREZULU5GZaAZBgVgTAEDA6AQBA45OTk5OTA5MDkxMDI3MKAXBgVgTAEDB6AOBAwwMDAwMDAwMDAwMDCBGmRmdC1uZmVAcHJvY2VyZ3MucnMuZ292LmJyMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDBTBgNVHR8BAQAESTBHMEWgQ6BBhj9odHRwOi8vbmZlY2VydGlmaWNhZG8uc2VmYXoucnMuZ292LmJyL0xDUi9BQ0ludGVybWVkaWFyaWEzOC5jcmwwDQYJKoZIhvcNAQEFBQADggEBAJFytXuiS02eJO0iMQr/Hi+Ox7/vYiPewiDL7s5EwO8A9jKx9G2Baz0KEjcdaeZk9a2NzDEgX9zboPxhw0RkWahVCP2xvRFWswDIa2WRUT/LHTEuTeKCJ0iF/um/kYM8PmWxPsDWzvsCCRp146lc0lz9LGm5ruPVYPZ/7DAoimUk3bdCMW/rzkVYg7iitxHrhklxH7YWQHUwbcqPt7Jv0RJxclc1MhQlV2eM2MO1iIlk8Eti86dRrJVoicR1bwc6/YDqDp4PFONTi1ddewRu6elGS74AzCcNYRSVTINYiZLpBZO0uivrnTEnsFguVnNtWb9MAHGt3tkR0gAVs6S0fm8='
|
|
264
472
|
end
|
|
265
473
|
end
|
|
474
|
+
end
|
|
266
475
|
|
|
267
|
-
|
|
268
|
-
before do
|
|
269
|
-
subject.unstub(:certificate_pkcs12)
|
|
270
|
-
end
|
|
271
|
-
it "deve ler o certificate_pkcs12 PKCS12 do atributo certificate_pkcs12_value e com a senha do certificate_pkcs12_password" do
|
|
272
|
-
subject.assign_attributes(certificate_pkcs12: nil, certificate_pkcs12_value: "CERTIFICADO", certificate_pkcs12_password: 'pWd123')
|
|
273
|
-
OpenSSL::PKCS12.expects(:new).with("CERTIFICADO", 'pWd123').returns('certificate_pkcs12')
|
|
274
|
-
subject.certificate_pkcs12.must_equal 'certificate_pkcs12'
|
|
275
|
-
end
|
|
276
|
-
it "se já tem um certificate_pkcs12 na variavel @certificate_pkcs12 não deve ler novamente do PKCS12" do
|
|
277
|
-
subject.instance_variable_set(:@certificate_pkcs12, certificado)
|
|
278
|
-
OpenSSL::PKCS12.expects(:new).never
|
|
279
|
-
subject.certificate_pkcs12.must_equal certificado
|
|
280
|
-
end
|
|
281
|
-
it "posso setar o certificate_pkcs12" do
|
|
282
|
-
subject.certificate_pkcs12 = 'certificate_pkcs12 123'
|
|
283
|
-
subject.certificate_pkcs12.must_equal 'certificate_pkcs12 123'
|
|
284
|
-
end
|
|
285
|
-
end
|
|
476
|
+
|
|
286
477
|
|
|
287
478
|
|
|
288
|
-
|
|
289
|
-
before do
|
|
290
|
-
# Stub metodos para configuração do client WSDL
|
|
291
|
-
subject.stubs(:namespaces).returns('namespaces')
|
|
292
|
-
subject.stubs(:env_namespace).returns('env_namespace')
|
|
293
|
-
subject.stubs(:wsdl).returns('wsdl')
|
|
294
|
-
subject.stubs(:wsdl_encoding).returns('client_encoding')
|
|
295
|
-
subject.stubs(:namespace_identifier).returns('namespace_identifier')
|
|
296
|
-
# Ajusto a configuração da gem para testar
|
|
297
|
-
BrNfe.client_wsdl_log = 'client_wsdl_log'
|
|
298
|
-
BrNfe.client_wsdl_pretty_print_xml = 'client_wsdl_pretty_print_xml'
|
|
299
|
-
BrNfe.client_wsdl_ssl_verify_mode = 'client_wsdl_ssl_verify_mode'
|
|
300
|
-
BrNfe.client_wsdl_ssl_cert_file = 'client_wsdl_ssl_cert_file'
|
|
301
|
-
BrNfe.client_wsdl_ssl_cert_key_file = 'client_wsdl_ssl_cert_key_file'
|
|
302
|
-
BrNfe.client_wsdl_ssl_cert_key_password = 'client_wsdl_ssl_cert_key_password'
|
|
303
|
-
end
|
|
304
|
-
it "deve instanciar um Savon.client com a configuração adequada" do
|
|
305
|
-
subject.instance_variable_get(:@client_wsdl).must_be_nil
|
|
306
|
-
Savon.expects(:client).with({
|
|
307
|
-
namespaces: 'namespaces',
|
|
308
|
-
env_namespace: 'env_namespace',
|
|
309
|
-
wsdl: 'wsdl',
|
|
310
|
-
namespace_identifier: 'namespace_identifier',
|
|
311
|
-
log: 'client_wsdl_log',
|
|
312
|
-
encoding: 'client_encoding',
|
|
313
|
-
pretty_print_xml: 'client_wsdl_pretty_print_xml',
|
|
314
|
-
ssl_verify_mode: 'client_wsdl_ssl_verify_mode',
|
|
315
|
-
ssl_cert_file: 'client_wsdl_ssl_cert_file',
|
|
316
|
-
ssl_cert_key_file: 'client_wsdl_ssl_cert_key_file',
|
|
317
|
-
ssl_cert_key_password: 'client_wsdl_ssl_cert_key_password'
|
|
318
|
-
}).returns('client wsdl')
|
|
319
|
-
|
|
320
|
-
subject.client_wsdl.must_equal 'client wsdl'
|
|
321
|
-
subject.instance_variable_get(:@client_wsdl).must_equal 'client wsdl'
|
|
322
|
-
end
|
|
323
|
-
it "se ja tiver valor na variavel @client_wsdl deve manter esse valor" do
|
|
324
|
-
Savon.expects(:client).never
|
|
325
|
-
subject.instance_variable_set(:@client_wsdl, :valor_client_wsdl)
|
|
326
|
-
subject.client_wsdl.must_equal :valor_client_wsdl
|
|
327
|
-
subject.instance_variable_get(:@client_wsdl).must_equal :valor_client_wsdl
|
|
328
|
-
end
|
|
329
|
-
end
|
|
330
|
-
end
|
|
479
|
+
|
|
331
480
|
|
|
332
481
|
end
|