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,174 @@
1
+ # encoding: UTF-8
2
+ describe Correios::Frete::Calculador do
3
+ describe ".new" do
4
+ context "creates with default value of" do
5
+ before(:each) { @frete = Correios::Frete::Calculador.new }
6
+
7
+ { :peso => 0.0,
8
+ :comprimento => 0.0,
9
+ :largura => 0.0,
10
+ :altura => 0.0,
11
+ :diametro => 0.0,
12
+ :formato => :caixa_pacote,
13
+ :mao_propria => false,
14
+ :aviso_recebimento => false,
15
+ :valor_declarado => 0.0
16
+ }.each do |attr, value|
17
+ it attr do
18
+ expect(@frete.send(attr)).to eq(value)
19
+ end
20
+ end
21
+ end
22
+
23
+ { :cep_origem => "01000-000",
24
+ :cep_destino => "021222-222",
25
+ :peso => 0.321,
26
+ :comprimento => 30,
27
+ :largura => 15,
28
+ :altura => 2,
29
+ :diametro => 5,
30
+ :formato => :rolo_prisma,
31
+ :mao_propria => true,
32
+ :aviso_recebimento => true,
33
+ :valor_declarado => 1.99,
34
+ :codigo_empresa => "1234567890",
35
+ :senha => "senha",
36
+ :encomenda => Correios::Frete::Pacote.new
37
+ }.each do |attr, value|
38
+ context "when #{attr} is supplied" do
39
+ it "sets #{attr}" do
40
+ frete = Correios::Frete::Calculador.new(attr => value)
41
+ expect(frete.send(attr)).to eq(value)
42
+ end
43
+ end
44
+
45
+ context "when #{attr} is supplied in a block" do
46
+ it "sets #{attr}" do
47
+ frete = Correios::Frete::Calculador.new { |f| f.send("#{attr}=", value) }
48
+ expect(frete.send(attr)).to eq(value)
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "#encomenda" do
55
+ context "when encomenda is supplied" do
56
+ before :each do
57
+ @encomenda = Correios::Frete::Pacote.new
58
+ @encomenda.adicionar_item(:peso => 0.3, :comprimento => 30, :largura => 15, :altura => 2)
59
+ @encomenda.adicionar_item(:peso => 0.7, :comprimento => 70, :largura => 25, :altura => 3)
60
+ @frete = Correios::Frete::Calculador.new :peso => 10.5,
61
+ :comprimento => 105,
62
+ :largura => 50,
63
+ :altura => 10,
64
+ :formato => :rolo_prisma,
65
+ :encomenda => @encomenda
66
+ end
67
+
68
+ [:peso, :comprimento, :largura, :altura, :formato].each do |attr|
69
+ it "#{attr} returns encomenda #{attr}" do
70
+ expect(@frete.send(attr)).to eq(@encomenda.send(attr))
71
+ end
72
+ end
73
+ end
74
+
75
+ context "when encomenda is not supplied" do
76
+ before :each do
77
+ @frete = Correios::Frete::Calculador.new :peso => 10.5,
78
+ :comprimento => 105,
79
+ :largura => 50,
80
+ :altura => 10,
81
+ :formato => :rolo_prisma
82
+ end
83
+
84
+ { :peso => 10.5,
85
+ :comprimento => 105,
86
+ :largura => 50,
87
+ :altura => 10,
88
+ :formato => :rolo_prisma
89
+ }.each do |attr, value|
90
+ it "#{attr} returns supplied #{attr}" do
91
+ expect(@frete.send(attr)).to eq(value)
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ describe "#calcular" do
98
+ around do |example|
99
+ Correios::Frete.configure { |config| config.log_enabled = false }
100
+ example.run
101
+ Correios::Frete.configure { |config| config.log_enabled = true }
102
+ end
103
+
104
+ before(:each) { @frete = Correios::Frete::Calculador.new }
105
+
106
+ context "to many services" do
107
+ before(:each) { mock_request_for(:success_response_many_services) }
108
+
109
+ it "creates a WebService with correct params" do
110
+ web_service = Correios::Frete::WebService.new @frete, [:pac, :sedex]
111
+ expect(Correios::Frete::WebService).to receive(:new).with(@frete, [:pac, :sedex]).and_return(web_service)
112
+ @frete.calcular(:pac, :sedex)
113
+ end
114
+
115
+ it "returns all services" do
116
+ services = @frete.calcular(:pac, :sedex)
117
+ expect(services.keys.size).to eq(2)
118
+ expect(services[:pac].tipo).to eq(:pac)
119
+ expect(services[:sedex].tipo).to eq(:sedex)
120
+ end
121
+ end
122
+
123
+ context "to one service" do
124
+ before(:each) { mock_request_for(:success_response_one_service) }
125
+
126
+ it "creates a WebService with correct params" do
127
+ web_service = Correios::Frete::WebService.new @frete, [:sedex]
128
+ expect(Correios::Frete::WebService).to receive(:new).with(@frete, [:sedex]).and_return(web_service)
129
+ @frete.calcular(:sedex)
130
+ end
131
+
132
+ it "returns only one service" do
133
+ expect(@frete.calcular(:sedex).tipo).to eq(:sedex)
134
+ end
135
+ end
136
+ end
137
+
138
+ ["calcular", "calculate"].each do |method_name|
139
+ Correios::Frete::Servico::AVAILABLE_SERVICES.each do |key, service|
140
+ describe "##{method_name}_#{service[:type]}" do
141
+ before :each do
142
+ @frete = Correios::Frete::Calculador.new
143
+ @servico = Correios::Frete::Servico.new
144
+
145
+ web_service = double(Correios::Frete::WebService, :request! => "XML")
146
+ allow(Correios::Frete::WebService).to receive(:new).and_return(web_service)
147
+
148
+ parser = double(Correios::Frete::Parser, :servicos => { service[:type] => @servico })
149
+ allow(Correios::Frete::Parser).to receive(:new).and_return(parser)
150
+ end
151
+
152
+ it "calculates #{service[:name]}" do
153
+ expect(@frete.send("#{method_name}_#{service[:type]}")).to eq(@servico)
154
+ end
155
+
156
+ it "returns true in respond_to?" do
157
+ expect(@frete.respond_to?("#{method_name}_#{service[:type]}")).to be_truthy
158
+ end
159
+ end
160
+ end
161
+
162
+ describe "##{method_name}_servico_que_nao_existe" do
163
+ before(:each) { @frete = Correios::Frete::Calculador.new }
164
+
165
+ it "raises NoMethodError" do
166
+ expect { @frete.send("#{method_name}_servico_que_nao_existe") }.to raise_error(NoMethodError)
167
+ end
168
+
169
+ it "returns false in respond_to?" do
170
+ expect(@frete.respond_to?("#{method_name}_servico_que_nao_existe")).to be_falsey
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: UTF-8
2
+ describe Correios::Frete::PacoteItem do
3
+ describe ".new" do
4
+ context "creates with default value of" do
5
+ before(:each) { @item = Correios::Frete::PacoteItem.new }
6
+
7
+ { :peso => 0.0,
8
+ :comprimento => 0.0,
9
+ :largura => 0.0,
10
+ :altura => 0.0
11
+ }.each do |attr, value|
12
+ it attr do
13
+ expect(@item.send(attr)).to eq(value)
14
+ end
15
+ end
16
+ end
17
+
18
+ { :peso => 0.3,
19
+ :comprimento => 30,
20
+ :largura => 15,
21
+ :altura => 2,
22
+ }.each do |attr, value|
23
+ context "when #{attr} is supplied" do
24
+ it "sets #{attr}" do
25
+ item = Correios::Frete::PacoteItem.new(attr => value)
26
+ expect(item.send(attr)).to eq(value)
27
+ end
28
+ end
29
+
30
+ context "when #{attr} is supplied in a block" do
31
+ it "sets #{attr}" do
32
+ item = Correios::Frete::PacoteItem.new { |f| f.send("#{attr}=", value) }
33
+ expect(item.send(attr)).to eq(value)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "#volume" do
40
+ it "calculates item volume" do
41
+ item = Correios::Frete::PacoteItem.new(:comprimento => 16, :largura => 11, :altura => 2)
42
+ expect(item.volume).to eq(16 * 11 * 2)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,188 @@
1
+ # encoding: UTF-8
2
+ describe Correios::Frete::Pacote do
3
+ before(:each) { @pacote = Correios::Frete::Pacote.new }
4
+
5
+ describe ".new" do
6
+ context "creates with default value of" do
7
+ { :peso => 0.0,
8
+ :comprimento => 0.0,
9
+ :altura => 0.0,
10
+ :largura => 0.0
11
+ }.each do |attr, value|
12
+ it attr do
13
+ expect(@pacote.send(attr)).to eq(value)
14
+ end
15
+ end
16
+
17
+ it "itens" do
18
+ expect(@pacote.itens).to be_empty
19
+ end
20
+ end
21
+
22
+ context "when items are supplied" do
23
+ context "as PacoteItem" do
24
+ it "adds in items" do
25
+ itens = [Correios::Frete::PacoteItem.new, Correios::Frete::PacoteItem.new]
26
+ pacote = Correios::Frete::Pacote.new(itens)
27
+
28
+ pacote.itens.each_with_index do |item, i|
29
+ expect(item).to eq(itens[i])
30
+ end
31
+ end
32
+ end
33
+
34
+ context "as Hash" do
35
+ it "adds new items" do
36
+ itens = [
37
+ { :peso => 0.3, :comprimento => 30, :largura => 15, :altura => 2 },
38
+ { :peso => 0.7, :comprimento => 70, :largura => 25, :altura => 3 }
39
+ ]
40
+ pacote = Correios::Frete::Pacote.new(itens)
41
+
42
+ pacote.itens.each_with_index do |item, i|
43
+ expect(item.peso).to eq(itens[i][:peso])
44
+ expect(item.comprimento).to eq(itens[i][:comprimento])
45
+ expect(item.largura).to eq(itens[i][:largura])
46
+ expect(item.altura).to eq(itens[i][:altura])
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ describe "#formato" do
54
+ it "is caixa/pacote" do
55
+ expect(@pacote.formato).to eq(:caixa_pacote)
56
+ end
57
+ end
58
+
59
+ describe "#adicionar_item" do
60
+ context "when adds a package item" do
61
+ it "adds in items" do
62
+ item = Correios::Frete::PacoteItem.new
63
+ @pacote.adicionar_item(item)
64
+ expect(@pacote.itens.first).to eq(item)
65
+ end
66
+ end
67
+
68
+ context "when adds package item params" do
69
+ it "adds new item" do
70
+ params = { :peso => 0.3, :comprimento => 30, :largura => 15, :altura => 2 }
71
+ @pacote.adicionar_item(params)
72
+
73
+ expect(@pacote.itens.first.peso).to eq(params[:peso])
74
+ expect(@pacote.itens.first.comprimento).to eq(params[:comprimento])
75
+ expect(@pacote.itens.first.largura).to eq(params[:largura])
76
+ expect(@pacote.itens.first.altura).to eq(params[:altura])
77
+ end
78
+ end
79
+
80
+ context "when adds nil item" do
81
+ it "does not add" do
82
+ @pacote.adicionar_item(nil)
83
+ expect(@pacote.itens).to be_empty
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "calculations" do
89
+ context "when adds one package item" do
90
+ before :each do
91
+ @item = Correios::Frete::PacoteItem.new(:peso => 0.3, :comprimento => 30, :largura => 15, :altura => 2)
92
+ @pacote.adicionar_item(@item)
93
+ end
94
+
95
+ it "calculates package weight" do
96
+ expect(@pacote.peso).to eq(@item.peso)
97
+ end
98
+
99
+ it "calculates package volume" do
100
+ expect(@pacote.volume).to eq(@item.volume)
101
+ end
102
+
103
+ it "calculates package length" do
104
+ expect(@pacote.comprimento).to eq(@item.comprimento)
105
+ end
106
+
107
+ it "calculates package width" do
108
+ expect(@pacote.largura).to eq(@item.largura)
109
+ end
110
+
111
+ it "calculates package height" do
112
+ expect(@pacote.altura).to eq(@item.altura)
113
+ end
114
+
115
+ context "with dimensions less than each minimum" do
116
+ before :each do
117
+ item = Correios::Frete::PacoteItem.new(:peso => 0.3, :comprimento => 15, :largura => 10, :altura => 1)
118
+ @pacote = Correios::Frete::Pacote.new
119
+ @pacote.adicionar_item(item)
120
+ end
121
+
122
+ it "sets minimum length value" do
123
+ expect(@pacote.comprimento).to eq(16)
124
+ end
125
+
126
+ it "sets minimum width value" do
127
+ expect(@pacote.largura).to eq(11)
128
+ end
129
+
130
+ it "sets minimum height value" do
131
+ expect(@pacote.altura).to eq(2)
132
+ end
133
+ end
134
+ end
135
+
136
+ context "when adds more than one package item" do
137
+ before :each do
138
+ @item1 = Correios::Frete::PacoteItem.new(:peso => 0.3, :comprimento => 30, :largura => 15, :altura => 2)
139
+ @item2 = Correios::Frete::PacoteItem.new(:peso => 0.7, :comprimento => 70, :largura => 25, :altura => 3)
140
+ @expected_dimension = (@item1.volume + @item2.volume).to_f**(1.0/3)
141
+
142
+ @pacote.adicionar_item(@item1)
143
+ @pacote.adicionar_item(@item2)
144
+ end
145
+
146
+ it "calculates package weight" do
147
+ expect(@pacote.peso).to eq(@item1.peso + @item2.peso)
148
+ end
149
+
150
+ it "calculates package volume" do
151
+ expect(@pacote.volume).to eq(@item1.volume + @item2.volume)
152
+ end
153
+
154
+ it "calculates package length" do
155
+ expect(@pacote.comprimento).to eq(@expected_dimension)
156
+ end
157
+
158
+ it "calculates package width" do
159
+ expect(@pacote.largura).to eq(@expected_dimension)
160
+ end
161
+
162
+ it "calculates package height" do
163
+ expect(@pacote.altura).to eq(@expected_dimension)
164
+ end
165
+
166
+ context "with dimensions less than each minimum" do
167
+ before :each do
168
+ item = Correios::Frete::PacoteItem.new(:peso => 0.3, :comprimento => 3, :largura => 1, :altura => 1)
169
+ @pacote = Correios::Frete::Pacote.new
170
+ @pacote.adicionar_item(item)
171
+ @pacote.adicionar_item(item)
172
+ end
173
+
174
+ it "sets minimum length value" do
175
+ expect(@pacote.comprimento).to eq(16)
176
+ end
177
+
178
+ it "sets minimum width value" do
179
+ expect(@pacote.largura).to eq(11)
180
+ end
181
+
182
+ it "sets minimum height value" do
183
+ expect(@pacote.altura).to eq(2)
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+ describe Correios::Frete::Parser do
3
+ describe "#servicos" do
4
+ let(:xml) { body_for :success_response_many_services }
5
+ let(:parser) { Correios::Frete::Parser.new }
6
+
7
+ it "encodes from ISO-8859-1 to UTF-8" do
8
+ expect(xml).to receive(:encode).with("UTF-8", "ISO-8859-1").and_return(xml)
9
+ parser.servicos(xml)
10
+ end
11
+
12
+ { :pac => { :tipo => :pac,
13
+ :codigo => "04510",
14
+ :valor => 15.70,
15
+ :prazo_entrega => 3,
16
+ :valor_mao_propria => 3.75,
17
+ :valor_aviso_recebimento => 1.99,
18
+ :valor_valor_declarado => 1.50,
19
+ :entrega_domiciliar => true,
20
+ :entrega_sabado => false,
21
+ :erro => "-3",
22
+ :msg_erro => "Somente para teste" },
23
+ :sedex => { :tipo => :sedex,
24
+ :codigo => "04014",
25
+ :valor => 17.8,
26
+ :prazo_entrega => 1,
27
+ :valor_mao_propria => 3.70,
28
+ :valor_aviso_recebimento => 0.0,
29
+ :valor_valor_declarado => 1.5,
30
+ :entrega_domiciliar => true,
31
+ :entrega_sabado => true,
32
+ :erro => "0",
33
+ :msg_erro => nil }
34
+ }.each do |service, attributes|
35
+ it "returns #{service} data" do
36
+ servicos = parser.servicos(xml)
37
+
38
+ attributes.each do |attr, value|
39
+ expect(servicos[service].send(attr)).to eq(value)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end