correios-frete-alternative 1.10.2

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.
@@ -0,0 +1,185 @@
1
+ # encoding: UTF-8
2
+ describe Correios::Frete::Servico do
3
+ before(:each) { @servico = Correios::Frete::Servico.new }
4
+
5
+ describe "#parse" do
6
+ context "when service exists" do
7
+ before :each do
8
+ @xml = """<cServico>
9
+ <Codigo>04510</Codigo>
10
+ <Valor>15,70</Valor>
11
+ <PrazoEntrega>3</PrazoEntrega>
12
+ <ValorMaoPropria>3,75</ValorMaoPropria>
13
+ <ValorAvisoRecebimento>1,99</ValorAvisoRecebimento>
14
+ <ValorValorDeclarado>1,50</ValorValorDeclarado>
15
+ <EntregaDomiciliar>S</EntregaDomiciliar>
16
+ <EntregaSabado>N</EntregaSabado>
17
+ <Erro>-3</Erro>
18
+ <MsgErro>Somente para teste</MsgErro>
19
+ </cServico>"""
20
+ end
21
+
22
+ { :tipo => :pac,
23
+ :nome => "PAC",
24
+ :descricao => "PAC sem contrato",
25
+ :codigo => "04510",
26
+ :valor => 15.70,
27
+ :prazo_entrega => 3,
28
+ :valor_mao_propria => 3.75,
29
+ :valor_aviso_recebimento => 1.99,
30
+ :valor_valor_declarado => 1.50,
31
+ :entrega_domiciliar => true,
32
+ :entrega_sabado => false,
33
+ :erro => "-3",
34
+ :msg_erro => "Somente para teste"
35
+ }.each do |attr, value|
36
+ it "sets #{attr} to #{value}" do
37
+ @servico.parse @xml
38
+ expect(@servico.send(attr)).to eq(value)
39
+ end
40
+ end
41
+
42
+ context "and calculated value is greater than 999.99" do
43
+ before :each do
44
+ @xml = """<cServico>
45
+ <Codigo>04510</Codigo>
46
+ <Valor>1.024,75</Valor>
47
+ <PrazoEntrega>3</PrazoEntrega>
48
+ <ValorMaoPropria>3,75</ValorMaoPropria>
49
+ <ValorAvisoRecebimento>1,99</ValorAvisoRecebimento>
50
+ <ValorValorDeclarado>1,50</ValorValorDeclarado>
51
+ <EntregaDomiciliar>S</EntregaDomiciliar>
52
+ <EntregaSabado>N</EntregaSabado>
53
+ <Erro>-3</Erro>
54
+ <MsgErro>Somente para teste</MsgErro>
55
+ </cServico>"""
56
+ end
57
+
58
+ it "sets correct value" do
59
+ @servico.parse @xml
60
+ expect(@servico.valor).to eql 1024.75
61
+ end
62
+ end
63
+ end
64
+
65
+ context "when service does not exist" do
66
+ before :each do
67
+ @xml = """<cServico>
68
+ <Codigo>99999</Codigo>
69
+ <Valor>0,00</Valor>
70
+ <PrazoEntrega>0</PrazoEntrega>
71
+ <ValorMaoPropria>0,00</ValorMaoPropria>
72
+ <ValorAvisoRecebimento>0,00</ValorAvisoRecebimento>
73
+ <ValorValorDeclarado>0,00</ValorValorDeclarado>
74
+ <EntregaDomiciliar></EntregaDomiciliar>
75
+ <EntregaSabado></EntregaSabado>
76
+ <Erro>-1</Erro>
77
+ <MsgErro>Codigo de servico invalido</MsgErro>
78
+ </cServico>"""
79
+ end
80
+
81
+ { :tipo => nil,
82
+ :nome => nil,
83
+ :codigo => "99999",
84
+ :valor => 0.0,
85
+ :prazo_entrega => 0,
86
+ :valor_mao_propria => 0.0,
87
+ :valor_aviso_recebimento => 0.0,
88
+ :valor_valor_declarado => 0.0,
89
+ :entrega_domiciliar => false,
90
+ :entrega_sabado => false,
91
+ :erro => "-1",
92
+ :msg_erro => "Codigo de servico invalido"
93
+ }.each do |attr, value|
94
+ it "sets #{attr} to #{value}" do
95
+ @servico.parse @xml
96
+ expect(@servico.send(attr)).to eq(value)
97
+ end
98
+ end
99
+ end
100
+
101
+ context "when there is an unexpected error" do
102
+ before :each do
103
+ @xml = """<cServico>
104
+ <Codigo></Codigo>
105
+ <Valor></Valor>
106
+ <PrazoEntrega></PrazoEntrega>
107
+ <ValorMaoPropria></ValorMaoPropria>
108
+ <ValorAvisoRecebimento></ValorAvisoRecebimento>
109
+ <ValorValorDeclarado></ValorValorDeclarado>
110
+ <EntregaDomiciliar></EntregaDomiciliar>
111
+ <EntregaSabado></EntregaSabado>
112
+ <Erro>99</Erro>
113
+ <MsgErro>Input string was not in a correct format.</MsgErro>
114
+ </cServico>"""
115
+ end
116
+
117
+ { :tipo => nil,
118
+ :nome => nil,
119
+ :codigo => nil,
120
+ :valor => 0.0,
121
+ :prazo_entrega => 0,
122
+ :valor_mao_propria => 0.0,
123
+ :valor_aviso_recebimento => 0.0,
124
+ :valor_valor_declarado => 0.0,
125
+ :entrega_domiciliar => false,
126
+ :entrega_sabado => false,
127
+ :erro => "99",
128
+ :msg_erro => "Input string was not in a correct format."
129
+ }.each do |attr, value|
130
+ it "sets #{attr} to #{value}" do
131
+ @servico.parse @xml
132
+ expect(@servico.send(attr)).to eq(value)
133
+ end
134
+ end
135
+ end
136
+ end
137
+
138
+ describe "#success?" do
139
+ context "when freight was calculated" do
140
+ it "returns true" do
141
+ @servico.parse "<cServico><Erro>010</Erro><Valor>13,70</Valor><cServico>"
142
+ expect(@servico.success?).to eql true
143
+ end
144
+ end
145
+
146
+ context "when freight was not calculated" do
147
+ it "returns false" do
148
+ @servico.parse "<cServico><Erro>0</Erro><Valor>0,00</Valor><cServico>"
149
+ expect(@servico.success?).to eql false
150
+ end
151
+ end
152
+ end
153
+
154
+ describe "#error?" do
155
+ context "when freight was not calculated" do
156
+ it "returns true" do
157
+ @servico.parse "<cServico><Erro>0</Erro><Valor>0,00</Valor><cServico>"
158
+ expect(@servico.error?).to eql true
159
+ end
160
+ end
161
+
162
+ context "when freight was calculated" do
163
+ it "returns false" do
164
+ @servico.parse "<cServico><Erro>010</Erro><Valor>13,70</Valor><cServico>"
165
+ expect(@servico.error?).to eql false
166
+ end
167
+ end
168
+ end
169
+
170
+ describe ".code_from_type" do
171
+ Correios::Frete::Servico::AVAILABLE_SERVICES.each do |code, value|
172
+ context "to #{value[:type]} type" do
173
+ it "returns #{code} code" do
174
+ expect(Correios::Frete::Servico.code_from_type(value[:type])).to eq(code)
175
+ end
176
+ end
177
+ end
178
+
179
+ context "when type does not exist" do
180
+ it "returns nil" do
181
+ expect(Correios::Frete::Servico.code_from_type(:nao_existe)).to be_nil
182
+ end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+ describe Correios::Frete::WebService do
3
+ describe "#request" do
4
+ around do |example|
5
+ Correios::Frete.configure { |config| config.log_enabled = false }
6
+ example.run
7
+ Correios::Frete.configure { |config| config.log_enabled = true }
8
+ end
9
+
10
+ let(:frete) { Correios::Frete::Calculador.new }
11
+ let(:web_service) { Correios::Frete::WebService.new(frete, [:pac, :sedex]) }
12
+
13
+ it "returns XML response" do
14
+ mock_request_for("<xml><fake></fake>")
15
+ expect(web_service.request!).to eq("<xml><fake></fake>")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,79 @@
1
+ # encoding: UTF-8
2
+ describe Correios::Frete do
3
+ describe "#log_enabled?" do
4
+ it "default is true" do
5
+ expect(Correios::Frete.log_enabled?).to be_truthy
6
+ end
7
+
8
+ context "when log is disabled" do
9
+ around do |example|
10
+ Correios::Frete.configure { |config| config.log_enabled = false }
11
+ example.run
12
+ Correios::Frete.configure { |config| config.log_enabled = true }
13
+ end
14
+
15
+ it "returns false" do
16
+ expect(Correios::Frete.log_enabled?).to be_falsey
17
+ end
18
+ end
19
+ end
20
+
21
+ describe "#logger" do
22
+ it "default is Logger" do
23
+ expect(Correios::Frete.logger).to be_a(::Logger)
24
+ end
25
+
26
+ context "when set logger" do
27
+ it "returns set logger" do
28
+ fake_logger = Class.new
29
+ Correios::Frete.configure { |config| config.logger = fake_logger }
30
+ expect(Correios::Frete.logger).to eq(fake_logger)
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "#log" do
36
+ before :each do
37
+ @log_stream = StringIO.new
38
+ Correios::Frete.configure { |config| config.logger = ::Logger.new(@log_stream) }
39
+ end
40
+
41
+ context "when log is enabled" do
42
+ it "logs the message" do
43
+ Correios::Frete.log("Some message to log.")
44
+ expect(@log_stream.string).to include("Some message to log.")
45
+ end
46
+ end
47
+
48
+ context "when log is disabled" do
49
+ around do |example|
50
+ Correios::Frete.configure { |config| config.log_enabled = false }
51
+ example.run
52
+ Correios::Frete.configure { |config| config.log_enabled = true }
53
+ end
54
+
55
+ it "does not log the message" do
56
+ Correios::Frete.log("Some message to log.")
57
+ expect(@log_stream.string).to be_empty
58
+ end
59
+ end
60
+ end
61
+
62
+ describe "#request_timeout" do
63
+ it "default is 10" do
64
+ expect(Correios::Frete.request_timeout).to eql 10
65
+ end
66
+
67
+ context "when set timeout" do
68
+ it "returns timeout" do
69
+ Correios::Frete.configure { |config| config.request_timeout = 3 }
70
+ expect(Correios::Frete.request_timeout).to eql 3
71
+ end
72
+
73
+ it "returns timeout in seconds (integer)" do
74
+ Correios::Frete.configure { |config| config.request_timeout = 5.123 }
75
+ expect(Correios::Frete.request_timeout).to eql 5
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,13 @@
1
+ require 'correios-frete-alternative'
2
+ require 'webmock/rspec'
3
+
4
+ # Requires supporting files with custom matchers and macros, etc,
5
+ # in ./support/ and its subdirectories.
6
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
7
+
8
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
9
+ RSpec.configure do |config|
10
+ config.order = "random"
11
+ end
12
+
13
+ WebMock.disable_net_connect!
@@ -0,0 +1,17 @@
1
+ # encoding: UTF-8
2
+
3
+ def mock_request_for(response)
4
+ url = Regexp.new("http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx")
5
+ WebMock::API.stub_request(:get, url).to_return(:status => 200, :body => body_for(response))
6
+ end
7
+
8
+ def body_for(response)
9
+ case response
10
+ when :success_response_one_service
11
+ File.open(File.dirname(__FILE__) + "/responses/success-response-one-service.xml").read
12
+ when :success_response_many_services
13
+ File.open(File.dirname(__FILE__) + "/responses/success-response-many-services.xml").read
14
+ else
15
+ response
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1" ?>
2
+ <Servicos>
3
+ <cServico>
4
+ <Codigo>04510</Codigo>
5
+ <Valor>15,70</Valor>
6
+ <PrazoEntrega>3</PrazoEntrega>
7
+ <ValorMaoPropria>3,75</ValorMaoPropria>
8
+ <ValorAvisoRecebimento>1,99</ValorAvisoRecebimento>
9
+ <ValorValorDeclarado>1,50</ValorValorDeclarado>
10
+ <EntregaDomiciliar>S</EntregaDomiciliar>
11
+ <EntregaSabado>N</EntregaSabado>
12
+ <Erro>-3</Erro>
13
+ <MsgErro>Somente para teste</MsgErro>
14
+ </cServico>
15
+ <cServico>
16
+ <Codigo>04014</Codigo>
17
+ <Valor>17,80</Valor>
18
+ <PrazoEntrega>1</PrazoEntrega>
19
+ <ValorMaoPropria>3,70</ValorMaoPropria>
20
+ <ValorAvisoRecebimento>0,00</ValorAvisoRecebimento>
21
+ <ValorValorDeclarado>1,50</ValorValorDeclarado>
22
+ <EntregaDomiciliar>S</EntregaDomiciliar>
23
+ <EntregaSabado>S</EntregaSabado>
24
+ <Erro>0</Erro>
25
+ <MsgErro></MsgErro>
26
+ </cServico>
27
+ </Servicos>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1" ?>
2
+ <Servicos>
3
+ <cServico>
4
+ <Codigo>04014</Codigo>
5
+ <Valor>17,80</Valor>
6
+ <PrazoEntrega>1</PrazoEntrega>
7
+ <ValorMaoPropria>3,70</ValorMaoPropria>
8
+ <ValorAvisoRecebimento>0,00</ValorAvisoRecebimento>
9
+ <ValorValorDeclarado>1,50</ValorValorDeclarado>
10
+ <EntregaDomiciliar>S</EntregaDomiciliar>
11
+ <EntregaSabado>S</EntregaSabado>
12
+ <Erro>0</Erro>
13
+ <MsgErro></MsgErro>
14
+ </cServico>
15
+ </Servicos>
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: correios-frete-alternative
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.10.2
5
+ platform: ruby
6
+ authors:
7
+ - Fernando Hamasaki de Amorim
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: log-me
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.10
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.10
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sax-machine
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '12.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '12.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.0'
111
+ description: |-
112
+ Calculo de frete utilizando o Web Service dos Correios (http://www.correios.com.br/webservices).
113
+ Os servicos de frete suportados sao PAC, SEDEX, SEDEX a Cobrar, SEDEX 10, SEDEX Hoje e e-SEDEX.
114
+ email:
115
+ - prodis@gmail.com
116
+ executables:
117
+ - console
118
+ extensions: []
119
+ extra_rdoc_files: []
120
+ files:
121
+ - ".gitignore"
122
+ - ".rspec"
123
+ - ".travis.yml"
124
+ - CHANGELOG.rdoc
125
+ - Gemfile
126
+ - README.rdoc
127
+ - Rakefile
128
+ - bin/console
129
+ - correios-frete-alternative.gemspec
130
+ - lib/correios-frete-alternative.rb
131
+ - lib/correios/frete.rb
132
+ - lib/correios/frete/calculador.rb
133
+ - lib/correios/frete/pacote.rb
134
+ - lib/correios/frete/pacote_item.rb
135
+ - lib/correios/frete/parser.rb
136
+ - lib/correios/frete/servico.rb
137
+ - lib/correios/frete/version.rb
138
+ - lib/correios/frete/web_service.rb
139
+ - misc/correios_frete_manual_v1.7.pdf
140
+ - misc/correios_frete_manual_v1.9.pdf
141
+ - spec/correios/frete/calculador_spec.rb
142
+ - spec/correios/frete/pacote_item_spec.rb
143
+ - spec/correios/frete/pacote_spec.rb
144
+ - spec/correios/frete/parser_spec.rb
145
+ - spec/correios/frete/servico_spec.rb
146
+ - spec/correios/frete/web_service_spec.rb
147
+ - spec/correios/frete_spec.rb
148
+ - spec/spec_helper.rb
149
+ - spec/support/mock_request.rb
150
+ - spec/support/responses/success-response-many-services.xml
151
+ - spec/support/responses/success-response-one-service.xml
152
+ homepage: http://prodis.blog.br/correios-frete-gem-para-calculo-de-frete-dos-correios
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 1.9.3
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.6.8
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Calculo de frete dos Correios.
176
+ test_files:
177
+ - spec/correios/frete/calculador_spec.rb
178
+ - spec/correios/frete/pacote_item_spec.rb
179
+ - spec/correios/frete/pacote_spec.rb
180
+ - spec/correios/frete/parser_spec.rb
181
+ - spec/correios/frete/servico_spec.rb
182
+ - spec/correios/frete/web_service_spec.rb
183
+ - spec/correios/frete_spec.rb
184
+ - spec/spec_helper.rb
185
+ - spec/support/mock_request.rb
186
+ - spec/support/responses/success-response-many-services.xml
187
+ - spec/support/responses/success-response-one-service.xml