br_nfe 1.0.0 → 1.0.1
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/Gemfile.lock +4 -1
- data/README.markdown +263 -1
- data/br_nfe.gemspec +14 -5
- data/lib/br_nfe/base.rb +6 -1
- data/lib/br_nfe/helper/cpf_cnpj.rb +0 -5
- data/lib/br_nfe/helper/have_address.rb +1 -5
- data/lib/br_nfe/helper/have_rps.rb +7 -0
- data/lib/br_nfe/servico/betha/base.rb +52 -41
- data/lib/br_nfe/servico/betha/build_response.rb +141 -0
- data/lib/br_nfe/servico/betha/v1/build_response.rb +4 -102
- data/lib/br_nfe/servico/betha/v1/consulta_lote_rps.rb +3 -1
- data/lib/br_nfe/servico/betha/v1/consulta_nfs_por_rps.rb +5 -2
- data/lib/br_nfe/servico/betha/v1/consulta_nfse.rb +2 -1
- data/lib/br_nfe/servico/betha/v1/gateway.rb +66 -56
- data/lib/br_nfe/servico/betha/v1/recepcao_lote_rps.rb +16 -8
- data/lib/br_nfe/servico/betha/v2/build_response.rb +159 -0
- data/lib/br_nfe/servico/betha/v2/cancelamento_nfs.rb +8 -3
- data/lib/br_nfe/servico/betha/v2/consulta_lote_rps.rb +7 -4
- data/lib/br_nfe/servico/betha/v2/consulta_nfse_por_rps.rb +5 -5
- data/lib/br_nfe/servico/betha/v2/envio_lote_rps_sincrono.rb +7 -3
- data/lib/br_nfe/servico/betha/v2/gateway.rb +79 -56
- data/lib/br_nfe/servico/betha/v2/gera_nfse.rb +8 -3
- data/lib/br_nfe/servico/betha/v2/recepcao_lote_rps.rb +9 -4
- data/lib/br_nfe/servico/betha/v2/substituicao_nfse.rb +8 -4
- data/lib/br_nfe/servico/response/nota_fiscal.rb +13 -4
- data/lib/br_nfe/servico/rps.rb +2 -2
- data/lib/br_nfe/version.rb +1 -1
- data/lib/br_nfe.rb +2 -1
- data/test/br_nfe/base_test.rb +55 -1
- data/test/br_nfe/destinatario_test.rb +19 -0
- data/test/br_nfe/emitente_test.rb +20 -0
- data/test/br_nfe/endereco_test.rb +9 -0
- data/test/br_nfe/helper/cpf_cnpj_test.rb +61 -0
- data/test/br_nfe/servico/base_test.rb +28 -0
- data/test/br_nfe/servico/betha/base_test.rb +61 -32
- data/test/br_nfe/servico/betha/v1/build_response_test.rb +6 -7
- data/test/br_nfe/servico/betha/v1/cancelamento_nfs_test.rb +6 -0
- data/test/br_nfe/servico/betha/v1/consulta_lote_rps_test.rb +4 -0
- data/test/br_nfe/servico/betha/v1/consulta_nfse_test.rb +17 -0
- data/test/br_nfe/servico/betha/v1/gateway_test.rb +17 -40
- data/test/br_nfe/servico/betha/v1/recepcao_lote_rps_test.rb +12 -2
- data/test/br_nfe/servico/betha/v2/cancelamento_nfs_test.rb +40 -0
- data/test/br_nfe/servico/betha/v2/consulta_lote_rps_test.rb +38 -0
- data/test/br_nfe/servico/betha/v2/consulta_nfse_por_rps_test.rb +36 -0
- data/test/br_nfe/servico/betha/v2/envio_lote_rps_sincrono_test.rb +46 -0
- data/test/br_nfe/servico/betha/v2/gateway_test.rb +372 -0
- data/test/br_nfe/servico/betha/v2/gera_nfse_test.rb +58 -0
- data/test/br_nfe/servico/betha/v2/recepcao_lote_rps_test.rb +103 -0
- data/test/br_nfe/servico/betha/v2/substituicao_nfse_test.rb +80 -0
- data/test/br_nfe/servico/intermediario_test.rb +16 -0
- data/test/br_nfe/servico/rps_test.rb +141 -0
- data/test/factories/servico/betha/v1/gateway.rb +1 -1
- data/test/factories/servico/betha/v2/cancelamento_nfs.rb +7 -0
- data/test/factories/servico/betha/v2/consulta_lote_rps.rb +6 -0
- data/test/factories/servico/betha/v2/consulta_nfse_por_rps.rb +6 -0
- data/test/factories/servico/betha/v2/envio_lote_rps_sincrono.rb +5 -0
- data/test/factories/servico/betha/v2/gateway.rb +5 -0
- data/test/factories/servico/betha/v2/gera_nfse.rb +6 -0
- data/test/factories/servico/betha/v2/recepcao_lote_rps.rb +5 -0
- data/test/factories/servico/betha/v2/substituicao_nfse.rb +8 -0
- metadata +50 -17
- data/Gemfile +0 -15
- data/Rakefile +0 -13
- data/lib/br_nfe/seed.rb +0 -195
- data/lib/br_nfe/servico/betha/v2/response.rb +0 -23
- data/test/certificado.rb +0 -12
- data/test/test_helper.rb +0 -39
@@ -4,12 +4,11 @@ describe BrNfe::Servico::Betha::Base do
|
|
4
4
|
subject { FactoryGirl.build(:br_nfe_servico_betha_base) }
|
5
5
|
let(:rps) { FactoryGirl.build(:br_nfe_rps) }
|
6
6
|
let(:destinatario) { FactoryGirl.build(:destinatario) }
|
7
|
+
let(:endereco) { FactoryGirl.build(:endereco) }
|
7
8
|
|
8
|
-
describe "#
|
9
|
+
describe "#xml_identificacao_rps" do
|
9
10
|
it "deve vir com a estrutura adecuada" do
|
10
|
-
xml =
|
11
|
-
subject.send(:tag_identificacao_rps, xml, rps)
|
12
|
-
end.doc
|
11
|
+
xml = subject.send(:xml_identificacao_rps, rps).doc
|
13
12
|
|
14
13
|
xml.xpath('IdentificacaoRps/Numero').first.text.must_equal "#{rps.numero}"
|
15
14
|
xml.xpath('IdentificacaoRps/Serie').first.text.must_equal "#{rps.serie}"
|
@@ -17,28 +16,73 @@ describe BrNfe::Servico::Betha::Base do
|
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
|
-
describe "#
|
19
|
+
describe "#xml_rps_substituido" do
|
21
20
|
before do
|
22
21
|
rps.numero_substituicao = 333
|
23
22
|
rps.serie_substituicao = 5
|
24
23
|
rps.tipo_substituicao = 9
|
25
24
|
end
|
26
25
|
it "deve vir com a estrutura adecuada" do
|
27
|
-
xml =
|
28
|
-
subject.send(:tag_rps_substituido, xml, rps)
|
29
|
-
end.doc
|
26
|
+
xml = subject.send(:xml_rps_substituido, rps).doc
|
30
27
|
|
31
28
|
xml.xpath('RpsSubstituido/Numero').first.text.must_equal "333"
|
32
29
|
xml.xpath('RpsSubstituido/Serie').first.text.must_equal "5"
|
33
30
|
xml.xpath('RpsSubstituido/Tipo').first.text.must_equal "9"
|
34
31
|
end
|
32
|
+
|
33
|
+
it "se rps contem_substituicao deve retornar um html vazio" do
|
34
|
+
rps.expects(:contem_substituicao?).returns(false)
|
35
|
+
xml = subject.send(:xml_rps_substituido, rps).doc.root.to_s.must_equal ''
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#xml_endereco" do
|
40
|
+
before do
|
41
|
+
endereco.assign_attributes({
|
42
|
+
logradouro: 'á'.rjust(130, 'á'),
|
43
|
+
numero: '2'.rjust(100, '2'),
|
44
|
+
complemento: 'õ'.rjust(100, 'õ'),
|
45
|
+
bairro: 'ê'.rjust(100, 'ê'),
|
46
|
+
codigo_municipio: '123456789'.rjust(100, 'A'),
|
47
|
+
uf: 'ABCDE',
|
48
|
+
cep: '123-4567-89-60',
|
49
|
+
codigo_pais: '123456AAAA'
|
50
|
+
})
|
51
|
+
end
|
52
|
+
it "valores padroes" do
|
53
|
+
xml = subject.send(:xml_endereco, endereco).doc
|
54
|
+
xml.xpath('Endereco/Endereco').first.text.must_equal "A".rjust(125, 'A')
|
55
|
+
xml.xpath('Endereco/Numero').first.text.must_equal "2".rjust(10, '2')
|
56
|
+
xml.xpath('Endereco/Complemento').first.text.must_equal "O".rjust(60, 'O')
|
57
|
+
xml.xpath('Endereco/Bairro').first.text.must_equal "E".rjust(60, 'E')
|
58
|
+
xml.xpath('Endereco/CodigoMunicipio').first.text.must_equal "1234567"
|
59
|
+
xml.xpath('Endereco/Uf').first.text.must_equal "AB"
|
60
|
+
xml.xpath('Endereco/Cep').first.text.must_equal '12345678'
|
61
|
+
xml.xpath('Endereco/CodigoPais').first.must_be_nil
|
62
|
+
end
|
63
|
+
|
64
|
+
it "se for versao 1 e mandar o codigo_pais como true deve ignorar" do
|
65
|
+
subject.stubs(:version).returns(:v1)
|
66
|
+
xml = subject.send(:xml_endereco, endereco, true).doc
|
67
|
+
xml.xpath('Endereco/CodigoPais').first.must_be_nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it "se for versao 2 e mandar o codigo_pais como true deve trazer junto o codigo do pais" do
|
71
|
+
subject.stubs(:version).returns(:v2)
|
72
|
+
xml = subject.send(:xml_endereco, endereco, true).doc
|
73
|
+
xml.xpath('Endereco/CodigoPais').first.text.must_equal '1234'
|
74
|
+
end
|
75
|
+
|
76
|
+
it "se for versao 2 e mandar o codigo_pais como false não deve trazer o codigo do pais" do
|
77
|
+
subject.stubs(:version).returns(:v2)
|
78
|
+
xml = subject.send(:xml_endereco, endereco, false).doc
|
79
|
+
xml.xpath('Endereco/CodigoPais').first.must_be_nil
|
80
|
+
end
|
35
81
|
end
|
36
82
|
|
37
|
-
describe "#
|
83
|
+
describe "#xml_dados_tomador" do
|
38
84
|
it "Valores padrões indiferentemente da versao" do
|
39
|
-
xml =
|
40
|
-
subject.send(:tag_dados_tomador, xml, destinatario)
|
41
|
-
end.doc
|
85
|
+
xml = subject.send(:xml_dados_tomador, destinatario).doc
|
42
86
|
|
43
87
|
xml.xpath('Tomador/RazaoSocial').first.text.must_equal destinatario.razao_social
|
44
88
|
xml.xpath('Tomador/IdentificacaoTomador/CpfCnpj/Cpf').first.text.must_equal BrNfe::Helper::CpfCnpj.new(destinatario.cpf_cnpj).sem_formatacao
|
@@ -64,40 +108,25 @@ describe BrNfe::Servico::Betha::Base do
|
|
64
108
|
subject.stubs(:version).returns(:v1)
|
65
109
|
end
|
66
110
|
it "inscricao_estadual" do
|
67
|
-
xml =
|
68
|
-
subject.send(:tag_dados_tomador, xml, destinatario)
|
69
|
-
end.doc
|
111
|
+
xml = subject.send(:xml_dados_tomador, destinatario).doc
|
70
112
|
xml.xpath('Tomador/IdentificacaoTomador/InscricaoEstadual').first.text.must_equal destinatario.inscricao_estadual
|
71
113
|
end
|
72
114
|
end
|
73
|
-
|
74
115
|
end
|
75
116
|
|
76
|
-
describe "#
|
117
|
+
describe "#xml_dados_construcao_civil" do
|
77
118
|
it "quando rps não tem codigo_obra" do
|
78
119
|
rps.assign_attributes(codigo_obra: '', codigo_art: '366')
|
79
|
-
xml =
|
80
|
-
subject.send(:tag_dados_construcao_civil, xml, rps)
|
81
|
-
end.doc
|
82
|
-
xml.xpath('ConstrucaoCivil/CodigoObra').first.must_be_nil
|
83
|
-
xml.xpath('ConstrucaoCivil/Art').first.must_be_nil
|
84
|
-
xml.to_s.must_equal "<?xml version=\"1.0\"?>\n"
|
120
|
+
xml = subject.send(:xml_dados_construcao_civil, rps).doc.root.to_s.must_equal ''
|
85
121
|
end
|
86
122
|
it "quando rps não tem codigo_art" do
|
87
123
|
rps.assign_attributes(codigo_obra: '13', codigo_art: '')
|
88
|
-
xml =
|
89
|
-
subject.send(:tag_dados_construcao_civil, xml, rps)
|
90
|
-
end.doc
|
91
|
-
xml.xpath('ConstrucaoCivil/CodigoObra').first.must_be_nil
|
92
|
-
xml.xpath('ConstrucaoCivil/Art').first.must_be_nil
|
93
|
-
xml.to_s.must_equal "<?xml version=\"1.0\"?>\n"
|
124
|
+
xml = subject.send(:xml_dados_construcao_civil, rps).doc.root.to_s.must_equal ''
|
94
125
|
end
|
95
126
|
|
96
127
|
it "quando rps tem codigo_art e codigo_obra" do
|
97
128
|
rps.assign_attributes(codigo_obra: '13', codigo_art: '555')
|
98
|
-
xml =
|
99
|
-
subject.send(:tag_dados_construcao_civil, xml, rps)
|
100
|
-
end.doc
|
129
|
+
xml = subject.send(:xml_dados_construcao_civil, rps).doc
|
101
130
|
xml.xpath('ConstrucaoCivil/CodigoObra').first.text.must_equal '13'
|
102
131
|
xml.xpath('ConstrucaoCivil/Art').first.text.must_equal '555'
|
103
132
|
end
|
@@ -13,12 +13,12 @@ describe BrNfe::Servico::Betha::V1::BuildResponse do
|
|
13
13
|
|
14
14
|
describe "#success?" do
|
15
15
|
it "deve ser true quanto não tem mensagem de retorno" do
|
16
|
-
subject.stubs(:
|
16
|
+
subject.stubs(:error_messages).returns([])
|
17
17
|
subject.success?.must_equal true
|
18
18
|
end
|
19
19
|
|
20
20
|
it "deve ser false quanto tem alguma mensagem de retorno" do
|
21
|
-
subject.stubs(:
|
21
|
+
subject.stubs(:error_messages).returns([{codigo: '1'}])
|
22
22
|
subject.success?.must_equal false
|
23
23
|
end
|
24
24
|
end
|
@@ -38,11 +38,7 @@ describe BrNfe::Servico::Betha::V1::BuildResponse do
|
|
38
38
|
subject.instance_variable_set(:@error_messages, [123])
|
39
39
|
subject.error_messages.must_equal([123])
|
40
40
|
end
|
41
|
-
|
42
|
-
subject.stubs(:success?).returns(true)
|
43
|
-
subject.error_messages.must_equal([])
|
44
|
-
end
|
45
|
-
|
41
|
+
|
46
42
|
it "deve retornar um vetor com um hash com as mensagens quando houver apenas 1 mensagem em um hash" do
|
47
43
|
subject.error_messages.size.must_equal 1
|
48
44
|
subject.error_messages.class.must_equal Array
|
@@ -104,6 +100,7 @@ describe BrNfe::Servico::Betha::V1::BuildResponse do
|
|
104
100
|
nota_fiscal.data_emissao_rps.must_equal DateTime.parse("Fri, 04 Sep 2015 09:56:17 -0300")
|
105
101
|
nota_fiscal.competencia.must_equal DateTime.parse("Tue, 01 Sep 2015 00:00:00 -0300")
|
106
102
|
nota_fiscal.outras_informacoes.must_equal "http://e-gov.betha.com.br/e-nota"
|
103
|
+
nota_fiscal.url_nf.must_equal "http://e-gov.betha.com.br/e-nota"
|
107
104
|
nota_fiscal.item_lista_servico.must_equal "111"
|
108
105
|
nota_fiscal.codigo_cnae.must_equal "6202300"
|
109
106
|
nota_fiscal.discriminacao.must_equal "discriminacao"
|
@@ -186,6 +183,7 @@ describe BrNfe::Servico::Betha::V1::BuildResponse do
|
|
186
183
|
nota_fiscal_1.data_emissao_rps.must_equal DateTime.parse("Fri, 04 Sep 2015 09:56:17 -0300")
|
187
184
|
nota_fiscal_1.competencia.must_equal DateTime.parse("Tue, 01 Sep 2015 00:00:00 -0300")
|
188
185
|
nota_fiscal_1.outras_informacoes.must_equal "http://e-gov.betha.com.br/e-nota"
|
186
|
+
nota_fiscal_1.url_nf.must_equal "http://e-gov.betha.com.br/e-nota"
|
189
187
|
nota_fiscal_1.item_lista_servico.must_equal "111"
|
190
188
|
nota_fiscal_1.codigo_cnae.must_equal "6202300"
|
191
189
|
nota_fiscal_1.discriminacao.must_equal "discriminacao"
|
@@ -225,6 +223,7 @@ describe BrNfe::Servico::Betha::V1::BuildResponse do
|
|
225
223
|
nota_fiscal_2.data_emissao_rps.must_equal "NOTA2 data_emissao_rps"
|
226
224
|
nota_fiscal_2.competencia.must_equal "NOTA2 competencia"
|
227
225
|
nota_fiscal_2.outras_informacoes.must_equal "NOTA2 outras_informacoes"
|
226
|
+
nota_fiscal_2.url_nf.must_equal "NOTA2 outras_informacoes"
|
228
227
|
nota_fiscal_2.item_lista_servico.must_equal "NOTA2 item_lista_servico"
|
229
228
|
nota_fiscal_2.discriminacao.must_equal "NOTA2 discriminacao"
|
230
229
|
nota_fiscal_2.codigo_municipio.must_equal "NOTA2 codigo_municipio"
|
@@ -8,6 +8,12 @@ describe BrNfe::Servico::Betha::V1::CancelamentoNfs do
|
|
8
8
|
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V1::Gateway }
|
9
9
|
end
|
10
10
|
|
11
|
+
describe "validations" do
|
12
|
+
it { must validate_presence_of(:numero_nfse) }
|
13
|
+
it { must validate_presence_of(:codigo_cancelamento) }
|
14
|
+
it { must validate_presence_of(:certificado) }
|
15
|
+
end
|
16
|
+
|
11
17
|
describe "#wsdl" do
|
12
18
|
context "for env production" do
|
13
19
|
it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-ws/cancelarNfseV02?wsdl' }
|
@@ -8,6 +8,10 @@ describe BrNfe::Servico::Betha::V1::ConsultaLoteRps do
|
|
8
8
|
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V1::Gateway }
|
9
9
|
end
|
10
10
|
|
11
|
+
describe "validations" do
|
12
|
+
it { must validate_presence_of(:protocolo) }
|
13
|
+
end
|
14
|
+
|
11
15
|
describe "#wsdl" do
|
12
16
|
context "for env production" do
|
13
17
|
it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-ws/consultarLoteRps?wsdl' }
|
@@ -8,6 +8,23 @@ describe BrNfe::Servico::Betha::V1::ConsultaNfse do
|
|
8
8
|
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V1::Gateway }
|
9
9
|
end
|
10
10
|
|
11
|
+
describe "validations" do
|
12
|
+
it { must validate_presence_of(:data_inicial) }
|
13
|
+
it { must validate_presence_of(:data_final) }
|
14
|
+
end
|
15
|
+
|
16
|
+
context "data inicial e final sempre deve retornar uma data na formatação adequada" do
|
17
|
+
it "data_inicial" do
|
18
|
+
subject.data_inicial = '12/05/2015'
|
19
|
+
subject.data_inicial.must_equal '2015-05-12'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "data_final" do
|
23
|
+
subject.data_inicial = Date.parse '12/05/2010'
|
24
|
+
subject.data_inicial.must_equal '2010-05-12'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
11
28
|
describe "#wsdl" do
|
12
29
|
context "for env production" do
|
13
30
|
it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-ws/consultarNfse?wsdl' }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
describe BrNfe::Servico::Betha::V1::Gateway do
|
4
|
-
subject { FactoryGirl.build(:
|
4
|
+
subject { FactoryGirl.build(:br_nfe_servico_betha_v1_gateway, emitente: emitente) }
|
5
5
|
let(:rps) { FactoryGirl.build(:br_nfe_rps, :completo) }
|
6
6
|
let(:emitente) { FactoryGirl.build(:emitente) }
|
7
7
|
let(:intermediario) { FactoryGirl.build(:intermediario) }
|
@@ -33,11 +33,9 @@ describe BrNfe::Servico::Betha::V1::Gateway do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
describe "#
|
36
|
+
describe "#xml_dados_servico" do
|
37
37
|
it "deve vir com a estrutura adecuada com todos os valores preenchidos" do
|
38
|
-
xml =
|
39
|
-
subject.send(:tag_dados_servico, xml, rps)
|
40
|
-
end.doc
|
38
|
+
xml = subject.send(:xml_dados_servico, rps).doc
|
41
39
|
|
42
40
|
xml.xpath('Servico/ItemListaServico').first.text.must_equal rps.item_lista_servico
|
43
41
|
xml.xpath('Servico/CodigoCnae').first.text.must_equal rps.codigo_cnae
|
@@ -65,9 +63,7 @@ describe BrNfe::Servico::Betha::V1::Gateway do
|
|
65
63
|
aliquota: '', codigo_cnae: '', codigo_tributacao_municipio: ''
|
66
64
|
})
|
67
65
|
|
68
|
-
xml =
|
69
|
-
subject.send(:tag_dados_servico, xml, rps)
|
70
|
-
end.doc
|
66
|
+
xml = subject.send(:xml_dados_servico, rps).doc
|
71
67
|
|
72
68
|
|
73
69
|
xml.xpath('Servico/CodigoCnae').first.must_be_nil
|
@@ -84,77 +80,60 @@ describe BrNfe::Servico::Betha::V1::Gateway do
|
|
84
80
|
end
|
85
81
|
end
|
86
82
|
|
87
|
-
context "#
|
83
|
+
context "#xml_prestador" do
|
88
84
|
it "estrutura com todos os atributos" do
|
89
|
-
xml =
|
90
|
-
subject.send(:tag_prestador, xml)
|
91
|
-
end.doc
|
85
|
+
xml = subject.send(:xml_prestador).doc
|
92
86
|
|
93
87
|
xml.xpath('Prestador/Cnpj').first.text.must_equal emitente.cnpj
|
94
88
|
xml.xpath('Prestador/InscricaoMunicipal').first.text.must_equal emitente.inscricao_municipal
|
95
89
|
end
|
96
90
|
it "estrutura sem os atributos não obrigatorios" do
|
97
91
|
emitente.inscricao_municipal = ''
|
98
|
-
|
99
|
-
xml = Nokogiri::XML::Builder.new do |xml|
|
100
|
-
subject.send(:tag_prestador, xml)
|
101
|
-
end.doc
|
92
|
+
xml = subject.send(:xml_prestador).doc
|
102
93
|
|
103
94
|
xml.xpath('Prestador/InscricaoMunicipal').first.must_be_nil
|
104
95
|
end
|
105
96
|
end
|
106
97
|
|
107
|
-
context "#
|
98
|
+
context "#xml_intermediario_servico" do
|
108
99
|
it "estrutura com todos os atributos" do
|
109
|
-
xml =
|
110
|
-
subject.send(:tag_intermediario_servico, xml, intermediario)
|
111
|
-
end.doc
|
112
|
-
|
100
|
+
xml = subject.send(:xml_intermediario_servico, intermediario).doc
|
113
101
|
xml.xpath('IntermediarioServico/RazaoSocial').first.text.must_equal intermediario.razao_social
|
114
102
|
xml.xpath('IntermediarioServico/CpfCnpj/Cnpj').first.text.must_equal BrNfe::Helper::CpfCnpj.new(intermediario.cpf_cnpj).sem_formatacao
|
115
103
|
xml.xpath('IntermediarioServico/InscricaoMunicipal').first.text.must_equal intermediario.inscricao_municipal
|
116
104
|
end
|
117
105
|
it "estrutura sem os atributos não obrigatorios" do
|
118
106
|
intermediario.assign_attributes({cpf_cnpj: '132.456.789-01', inscricao_municipal: ''})
|
119
|
-
xml =
|
120
|
-
subject.send(:tag_intermediario_servico, xml, intermediario)
|
121
|
-
end.doc
|
107
|
+
xml = subject.send(:xml_intermediario_servico, intermediario).doc
|
122
108
|
|
123
109
|
xml.xpath('IntermediarioServico/CpfCnpj/Cpf').first.text.must_equal BrNfe::Helper::CpfCnpj.new(intermediario.cpf_cnpj).sem_formatacao
|
124
110
|
xml.xpath('IntermediarioServico/InscricaoMunicipal').first.must_be_nil
|
125
111
|
end
|
126
112
|
it "se não tiver intermediario não monta o xml" do
|
127
|
-
xml =
|
128
|
-
subject.send(:tag_intermediario_servico, xml, nil)
|
129
|
-
end.doc
|
130
|
-
|
113
|
+
xml = subject.send(:xml_intermediario_servico, nil).doc
|
131
114
|
xml.root.to_s.must_equal ''
|
132
115
|
end
|
133
116
|
end
|
134
117
|
|
135
|
-
describe "#
|
118
|
+
describe "#xml_condicao_pagamento" do
|
136
119
|
it "estrutura a prazo" do
|
137
|
-
xml =
|
138
|
-
subject.send(:tag_condicao_pagamento, xml, rps)
|
139
|
-
end.doc
|
120
|
+
xml = subject.send(:xml_condicao_pagamento, rps).doc
|
140
121
|
|
141
122
|
xml.xpath('CondicaoPagamento/Condicao').first.text.must_equal rps.condicao_pagamento.condicao
|
142
123
|
xml.xpath('CondicaoPagamento/QtdParcela').first.text.must_equal '2'
|
143
124
|
|
144
125
|
xml.xpath('CondicaoPagamento/Parcelas/Parcela').first.text.must_equal '1'
|
145
|
-
xml.xpath('CondicaoPagamento/Parcelas/DataVencimento').first.text.must_equal '2015
|
126
|
+
xml.xpath('CondicaoPagamento/Parcelas/DataVencimento').first.text.must_equal '15/10/2015'
|
146
127
|
xml.xpath('CondicaoPagamento/Parcelas/Valor').first.text.must_equal '10.0'
|
147
128
|
|
148
129
|
xml.xpath('CondicaoPagamento/Parcelas/Parcela').last.text.must_equal '2'
|
149
|
-
xml.xpath('CondicaoPagamento/Parcelas/DataVencimento').last.text.must_equal '2015
|
130
|
+
xml.xpath('CondicaoPagamento/Parcelas/DataVencimento').last.text.must_equal '15/11/2015'
|
150
131
|
xml.xpath('CondicaoPagamento/Parcelas/Valor').last.text.must_equal '20.0'
|
151
132
|
end
|
152
133
|
|
153
134
|
it "estrutura a vista" do
|
154
135
|
rps.condicao_pagamento.assign_attributes(condicao: 'A_VISTA', parcelas: [])
|
155
|
-
xml =
|
156
|
-
subject.send(:tag_condicao_pagamento, xml, rps)
|
157
|
-
end.doc
|
136
|
+
xml = subject.send(:xml_condicao_pagamento, rps).doc
|
158
137
|
|
159
138
|
xml.xpath('CondicaoPagamento/Condicao').first.text.must_equal 'A_VISTA'
|
160
139
|
xml.xpath('CondicaoPagamento/QtdParcela').first.must_be_nil
|
@@ -164,9 +143,7 @@ describe BrNfe::Servico::Betha::V1::Gateway do
|
|
164
143
|
|
165
144
|
it "quando não tem condicao_pagamento" do
|
166
145
|
rps.condicao_pagamento = nil
|
167
|
-
xml =
|
168
|
-
subject.send(:tag_condicao_pagamento, xml, rps)
|
169
|
-
end.doc
|
146
|
+
xml = subject.send(:xml_condicao_pagamento, rps).doc
|
170
147
|
xml.root.to_s.must_equal ''
|
171
148
|
end
|
172
149
|
end
|
@@ -10,6 +10,16 @@ describe BrNfe::Servico::Betha::V1::RecepcaoLoteRps do
|
|
10
10
|
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V1::Gateway }
|
11
11
|
end
|
12
12
|
|
13
|
+
describe "validations" do
|
14
|
+
it { must validate_presence_of(:numero_lote_rps) }
|
15
|
+
it { must validate_presence_of(:certificado) }
|
16
|
+
|
17
|
+
it "deve chamar o metodo validar_lote_rps" do
|
18
|
+
subject.expects(:validar_lote_rps)
|
19
|
+
subject.valid?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
13
23
|
describe "#wsdl" do
|
14
24
|
context "for env production" do
|
15
25
|
it { subject.wsdl.must_equal 'http://e-gov.betha.com.br/e-nota-contribuinte-ws/recepcionarLoteRps?wsdl' }
|
@@ -163,11 +173,11 @@ describe BrNfe::Servico::Betha::V1::RecepcaoLoteRps do
|
|
163
173
|
xml.xpath('InfRps/CondicaoPagamento/Parcelas').count.must_equal 2
|
164
174
|
|
165
175
|
xml.xpath('InfRps/CondicaoPagamento/Parcelas/Parcela').first.text.must_equal '1'
|
166
|
-
xml.xpath('InfRps/CondicaoPagamento/Parcelas/DataVencimento').first.text.must_equal
|
176
|
+
xml.xpath('InfRps/CondicaoPagamento/Parcelas/DataVencimento').first.text.must_equal '15/10/2015'
|
167
177
|
xml.xpath('InfRps/CondicaoPagamento/Parcelas/Valor').first.text.must_equal '10.0'
|
168
178
|
|
169
179
|
xml.xpath('InfRps/CondicaoPagamento/Parcelas/Parcela').last.text.must_equal '2'
|
170
|
-
xml.xpath('InfRps/CondicaoPagamento/Parcelas/DataVencimento').last.text.must_equal
|
180
|
+
xml.xpath('InfRps/CondicaoPagamento/Parcelas/DataVencimento').last.text.must_equal '15/11/2015'
|
171
181
|
xml.xpath('InfRps/CondicaoPagamento/Parcelas/Valor').last.text.must_equal '20.0'
|
172
182
|
end
|
173
183
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrNfe::Servico::Betha::V2::CancelamentoNfs do
|
4
|
+
subject { FactoryGirl.build(:br_nfe_servico_betha_v2_cancelamento_nfs, emitente: emitente) }
|
5
|
+
let(:rps) { FactoryGirl.build(:br_nfe_rps, :completo) }
|
6
|
+
let(:emitente) { FactoryGirl.build(:emitente) }
|
7
|
+
let(:intermediario) { FactoryGirl.build(:intermediario) }
|
8
|
+
|
9
|
+
describe "inheritance class" do
|
10
|
+
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V2::Gateway }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "validations" do
|
14
|
+
it { must validate_presence_of(:numero_nfse) }
|
15
|
+
it { must validate_presence_of(:codigo_cancelamento) }
|
16
|
+
it { must validate_presence_of(:certificado) }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#method_wsdl" do
|
20
|
+
it { subject.method_wsdl.must_equal :cancelar_nfse }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#xml_builder" do
|
24
|
+
it "não ocorre erro" do
|
25
|
+
subject.stubs(:assinatura_xml).returns('<Signature>signed</Signature>')
|
26
|
+
subject.xml_builder.class.must_equal Nokogiri::XML::Builder
|
27
|
+
end
|
28
|
+
it "estrutura" do
|
29
|
+
subject.expects(:xml_pedido_cancelamento_assinado).returns(Nokogiri::XML::Builder.new{|x| x.Cancelamento 'ok'} )
|
30
|
+
xml = subject.xml_builder.doc
|
31
|
+
|
32
|
+
xml.namespaces.must_equal({"xmlns"=>"http://www.betha.com.br/e-nota-contribuinte-ws"})
|
33
|
+
xml.remove_namespaces!
|
34
|
+
|
35
|
+
xml.xpath('CancelarNfseEnvio/Cancelamento').first.text.must_equal 'ok'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrNfe::Servico::Betha::V2::ConsultaLoteRps do
|
4
|
+
subject { FactoryGirl.build(:br_nfe_servico_betha_v2_consulta_lote_rps, emitente: emitente) }
|
5
|
+
let(:emitente) { FactoryGirl.build(:emitente) }
|
6
|
+
|
7
|
+
describe "inheritance class" do
|
8
|
+
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V2::Gateway }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "validations" do
|
12
|
+
it { must validate_presence_of(:protocolo) }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#method_wsdl" do
|
16
|
+
it { subject.method_wsdl.must_equal :consultar_lote_rps }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#xml_builder" do
|
20
|
+
it "não ocorre erro" do
|
21
|
+
subject.stubs(:assinatura_xml).returns('<Signature>signed</Signature>')
|
22
|
+
subject.xml_builder.class.must_equal Nokogiri::XML::Builder
|
23
|
+
end
|
24
|
+
it "estrutura" do
|
25
|
+
subject.protocolo = '1'.rjust(100, '1')
|
26
|
+
subject.expects(:xml_prestador).returns(Nokogiri::XML::Builder.new{|x| x.Pestador 'ok'} )
|
27
|
+
xml = subject.xml_builder.doc
|
28
|
+
|
29
|
+
xml.namespaces.must_equal({"xmlns"=>"http://www.betha.com.br/e-nota-contribuinte-ws"})
|
30
|
+
xml.remove_namespaces!
|
31
|
+
|
32
|
+
xml.xpath('ConsultarLoteRpsEnvio/Pestador').first.text.must_equal 'ok'
|
33
|
+
xml.xpath('ConsultarLoteRpsEnvio/Protocolo').first.text.must_equal '1'.rjust(50, '1')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrNfe::Servico::Betha::V2::ConsultaNfsePorRps do
|
4
|
+
subject { FactoryGirl.build(:br_nfe_servico_betha_v2_consulta_nfse_por_rps, emitente: emitente, rps: rps) }
|
5
|
+
let(:emitente) { FactoryGirl.build(:emitente) }
|
6
|
+
let(:rps) { FactoryGirl.build(:br_nfe_rps) }
|
7
|
+
|
8
|
+
describe "inheritance class" do
|
9
|
+
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V2::Gateway }
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#method_wsdl" do
|
13
|
+
it { subject.method_wsdl.must_equal :consultar_nfse_por_rps }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#xml_builder" do
|
17
|
+
it "não ocorre erro" do
|
18
|
+
subject.stubs(:assinatura_xml).returns('<Signature>signed</Signature>')
|
19
|
+
subject.xml_builder.class.must_equal Nokogiri::XML::Builder
|
20
|
+
end
|
21
|
+
it "estrutura" do
|
22
|
+
sequence_1 = sequence('sequence1')
|
23
|
+
subject.expects(:xml_identificacao_rps).with(rps).returns(Nokogiri::XML::Builder.new{|x| x.IdentificacaoRps 'valor ident rps'} ).in_sequence(sequence_1)
|
24
|
+
subject.expects(:xml_prestador).returns(Nokogiri::XML::Builder.new{|x| x.Pestador 'dados prestador'} ).in_sequence(sequence_1)
|
25
|
+
xml = subject.xml_builder.doc
|
26
|
+
|
27
|
+
xml.namespaces.must_equal({"xmlns"=>"http://www.betha.com.br/e-nota-contribuinte-ws"})
|
28
|
+
xml.remove_namespaces!
|
29
|
+
|
30
|
+
xml.xpath('ConsultarNfseRpsEnvio/IdentificacaoRps').first.text.must_equal 'valor ident rps'
|
31
|
+
xml.xpath('ConsultarNfseRpsEnvio/Pestador').first.text.must_equal 'dados prestador'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrNfe::Servico::Betha::V2::EnvioLoteRpsSincrono do
|
4
|
+
subject { FactoryGirl.build(:br_nfe_servico_betha_v2_envio_lote_rps_sincrono, emitente: emitente) }
|
5
|
+
let(:emitente) { FactoryGirl.build(:emitente) }
|
6
|
+
|
7
|
+
describe "inheritance class" do
|
8
|
+
it { subject.class.superclass.must_equal BrNfe::Servico::Betha::V2::RecepcaoLoteRps }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "validations" do
|
12
|
+
it { must validate_presence_of(:numero_lote_rps) }
|
13
|
+
it { must validate_presence_of(:certificado) }
|
14
|
+
|
15
|
+
it "deve chamar o metodo validar_lote_rps" do
|
16
|
+
subject.expects(:validar_lote_rps)
|
17
|
+
subject.valid?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#method_wsdl" do
|
22
|
+
it { subject.method_wsdl.must_equal :recepcionar_lote_rps_sincrono }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#xml_builder" do
|
26
|
+
it "não ocorre erro" do
|
27
|
+
subject.stubs(:assinatura_xml).returns('<Signature>signed</Signature>')
|
28
|
+
subject.xml_builder.class.must_equal Nokogiri::XML::Builder
|
29
|
+
end
|
30
|
+
it "estrutura" do
|
31
|
+
subject.numero_lote_rps = 88966
|
32
|
+
lote_rps_xml = Nokogiri::XML::Builder.new{|x| x.LoteRps 'valor loterps'}
|
33
|
+
subject.expects(:lote_rps_xml).returns(lote_rps_xml)
|
34
|
+
subject.expects(:assinatura_xml).with(lote_rps_xml.doc.root.to_s, '#lote88966').returns('<Signature>signed</Signature>')
|
35
|
+
xml = subject.xml_builder.doc
|
36
|
+
|
37
|
+
xml.namespaces.must_equal({"xmlns"=>"http://www.betha.com.br/e-nota-contribuinte-ws"})
|
38
|
+
xml.remove_namespaces!
|
39
|
+
|
40
|
+
xml.xpath('EnviarLoteRpsSincronoEnvio/LoteRps').first.text.must_equal 'valor loterps'
|
41
|
+
xml.xpath('EnviarLoteRpsSincronoEnvio/Signature').first.text.must_equal 'signed'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
end
|