correios-frete-alternative 1.10.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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