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,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