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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -1
  3. data/README.markdown +263 -1
  4. data/br_nfe.gemspec +14 -5
  5. data/lib/br_nfe/base.rb +6 -1
  6. data/lib/br_nfe/helper/cpf_cnpj.rb +0 -5
  7. data/lib/br_nfe/helper/have_address.rb +1 -5
  8. data/lib/br_nfe/helper/have_rps.rb +7 -0
  9. data/lib/br_nfe/servico/betha/base.rb +52 -41
  10. data/lib/br_nfe/servico/betha/build_response.rb +141 -0
  11. data/lib/br_nfe/servico/betha/v1/build_response.rb +4 -102
  12. data/lib/br_nfe/servico/betha/v1/consulta_lote_rps.rb +3 -1
  13. data/lib/br_nfe/servico/betha/v1/consulta_nfs_por_rps.rb +5 -2
  14. data/lib/br_nfe/servico/betha/v1/consulta_nfse.rb +2 -1
  15. data/lib/br_nfe/servico/betha/v1/gateway.rb +66 -56
  16. data/lib/br_nfe/servico/betha/v1/recepcao_lote_rps.rb +16 -8
  17. data/lib/br_nfe/servico/betha/v2/build_response.rb +159 -0
  18. data/lib/br_nfe/servico/betha/v2/cancelamento_nfs.rb +8 -3
  19. data/lib/br_nfe/servico/betha/v2/consulta_lote_rps.rb +7 -4
  20. data/lib/br_nfe/servico/betha/v2/consulta_nfse_por_rps.rb +5 -5
  21. data/lib/br_nfe/servico/betha/v2/envio_lote_rps_sincrono.rb +7 -3
  22. data/lib/br_nfe/servico/betha/v2/gateway.rb +79 -56
  23. data/lib/br_nfe/servico/betha/v2/gera_nfse.rb +8 -3
  24. data/lib/br_nfe/servico/betha/v2/recepcao_lote_rps.rb +9 -4
  25. data/lib/br_nfe/servico/betha/v2/substituicao_nfse.rb +8 -4
  26. data/lib/br_nfe/servico/response/nota_fiscal.rb +13 -4
  27. data/lib/br_nfe/servico/rps.rb +2 -2
  28. data/lib/br_nfe/version.rb +1 -1
  29. data/lib/br_nfe.rb +2 -1
  30. data/test/br_nfe/base_test.rb +55 -1
  31. data/test/br_nfe/destinatario_test.rb +19 -0
  32. data/test/br_nfe/emitente_test.rb +20 -0
  33. data/test/br_nfe/endereco_test.rb +9 -0
  34. data/test/br_nfe/helper/cpf_cnpj_test.rb +61 -0
  35. data/test/br_nfe/servico/base_test.rb +28 -0
  36. data/test/br_nfe/servico/betha/base_test.rb +61 -32
  37. data/test/br_nfe/servico/betha/v1/build_response_test.rb +6 -7
  38. data/test/br_nfe/servico/betha/v1/cancelamento_nfs_test.rb +6 -0
  39. data/test/br_nfe/servico/betha/v1/consulta_lote_rps_test.rb +4 -0
  40. data/test/br_nfe/servico/betha/v1/consulta_nfse_test.rb +17 -0
  41. data/test/br_nfe/servico/betha/v1/gateway_test.rb +17 -40
  42. data/test/br_nfe/servico/betha/v1/recepcao_lote_rps_test.rb +12 -2
  43. data/test/br_nfe/servico/betha/v2/cancelamento_nfs_test.rb +40 -0
  44. data/test/br_nfe/servico/betha/v2/consulta_lote_rps_test.rb +38 -0
  45. data/test/br_nfe/servico/betha/v2/consulta_nfse_por_rps_test.rb +36 -0
  46. data/test/br_nfe/servico/betha/v2/envio_lote_rps_sincrono_test.rb +46 -0
  47. data/test/br_nfe/servico/betha/v2/gateway_test.rb +372 -0
  48. data/test/br_nfe/servico/betha/v2/gera_nfse_test.rb +58 -0
  49. data/test/br_nfe/servico/betha/v2/recepcao_lote_rps_test.rb +103 -0
  50. data/test/br_nfe/servico/betha/v2/substituicao_nfse_test.rb +80 -0
  51. data/test/br_nfe/servico/intermediario_test.rb +16 -0
  52. data/test/br_nfe/servico/rps_test.rb +141 -0
  53. data/test/factories/servico/betha/v1/gateway.rb +1 -1
  54. data/test/factories/servico/betha/v2/cancelamento_nfs.rb +7 -0
  55. data/test/factories/servico/betha/v2/consulta_lote_rps.rb +6 -0
  56. data/test/factories/servico/betha/v2/consulta_nfse_por_rps.rb +6 -0
  57. data/test/factories/servico/betha/v2/envio_lote_rps_sincrono.rb +5 -0
  58. data/test/factories/servico/betha/v2/gateway.rb +5 -0
  59. data/test/factories/servico/betha/v2/gera_nfse.rb +6 -0
  60. data/test/factories/servico/betha/v2/recepcao_lote_rps.rb +5 -0
  61. data/test/factories/servico/betha/v2/substituicao_nfse.rb +8 -0
  62. metadata +50 -17
  63. data/Gemfile +0 -15
  64. data/Rakefile +0 -13
  65. data/lib/br_nfe/seed.rb +0 -195
  66. data/lib/br_nfe/servico/betha/v2/response.rb +0 -23
  67. data/test/certificado.rb +0 -12
  68. 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 "#tag_identificacao_rps" do
9
+ describe "#xml_identificacao_rps" do
9
10
  it "deve vir com a estrutura adecuada" do
10
- xml = Nokogiri::XML::Builder.new do |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 "#tag_rps_substituido" do
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 = Nokogiri::XML::Builder.new do |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 "#tag_dados_tomador" do
83
+ describe "#xml_dados_tomador" do
38
84
  it "Valores padrões indiferentemente da versao" do
39
- xml = Nokogiri::XML::Builder.new do |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 = Nokogiri::XML::Builder.new do |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 "#tag_dados_construcao_civil" do
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 = Nokogiri::XML::Builder.new do |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 = Nokogiri::XML::Builder.new do |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 = Nokogiri::XML::Builder.new do |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(:messages).returns({lista_mensagem_retorno: nil})
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(:messages).returns({lista_mensagem_retorno: {codigo: 1} })
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
- it "se for success? então deve retornar um valor vazio" do
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(:br_nfe_servico_betha_gateway, emitente: emitente) }
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 "#tag_dados_servico" do
36
+ describe "#xml_dados_servico" do
37
37
  it "deve vir com a estrutura adecuada com todos os valores preenchidos" do
38
- xml = Nokogiri::XML::Builder.new do |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 = Nokogiri::XML::Builder.new do |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 "#tag_prestador" do
83
+ context "#xml_prestador" do
88
84
  it "estrutura com todos os atributos" do
89
- xml = Nokogiri::XML::Builder.new do |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 "#tag_intermediario_servico" do
98
+ context "#xml_intermediario_servico" do
108
99
  it "estrutura com todos os atributos" do
109
- xml = Nokogiri::XML::Builder.new do |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 = Nokogiri::XML::Builder.new do |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 = Nokogiri::XML::Builder.new do |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 "#tag_condicao_pagamento" do
118
+ describe "#xml_condicao_pagamento" do
136
119
  it "estrutura a prazo" do
137
- xml = Nokogiri::XML::Builder.new do |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-10-15'
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-11-15'
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 = Nokogiri::XML::Builder.new do |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 = Nokogiri::XML::Builder.new do |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 Date.parse('15/10/2015').to_s(:br_nfe)
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 Date.parse('15/11/2015').to_s(:br_nfe)
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