tray-checkout 0.0.1 → 0.1.0

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.
@@ -5,198 +5,48 @@ describe Tray::Checkout::Parser do
5
5
  let(:parser) { Tray::Checkout::Parser.new }
6
6
 
7
7
  describe "#response" do
8
- context "with success response" do
9
- let(:xml) { body_for :get_success_boleto }
10
- let(:txn) { parser.response(xml) }
11
-
12
- it "returns success" do
13
- txn[:success].should be_true
14
- end
15
-
16
- context "returns transaction" do
17
- { transaction_token: "522045453u5uu32e0u8014f060uuu5uu",
18
- transaction_id: 501,
19
- payment_method: :boleto,
20
- payment_method_id: 6,
21
- payment_method_name: "Boleto Bancario",
22
- status: :waiting_payment,
23
- status_id: 4,
24
- status_name: "Aguardando Pagamento",
25
- order_number: "R1240",
26
- price_original: 213.21,
27
- price_payment: 213.21,
28
- price_seller: 199.19,
29
- price_additional: 0.00,
30
- price_discount: 0.00,
31
- shipping_type: "Sedex",
32
- shipping_price: 1.23,
33
- split: 1,
34
- url_notification: "http://prodis.blog.br/tray_notification",
35
- seller_token: "949u5uu9ef36f7u"
36
- }.each do |param, value|
37
- it param do
38
- txn[param].should == value
39
- end
40
- end
41
-
42
- it "date_transaction" do
43
- date_transaction = txn[:date_transaction]
44
- date_transaction.should be_a(Time)
45
- date_transaction.to_s.should == "2012-12-03 18:08:37 UTC"
46
- end
47
- end
48
-
49
- context "returns payment" do
50
- { payment_method: :boleto,
51
- payment_method_id: 6,
52
- payment_method_name: "Boleto Bancario",
53
- price_payment: 213.21,
54
- split: 1,
55
- number_proccess: 718,
56
- url_payment: "http://checkout.sandbox.tray.com.br/payment/billet/u9uuu8731319u59u3073u9011uu6u6uu"
57
- }.each do |param, value|
58
- it param do
59
- txn[:payment][param].should == value
60
- end
61
- end
62
-
63
- it "date_approval" do
64
- date_approval = txn[:payment][:date_approval]
65
- date_approval.should be_a(Time)
66
- date_approval.to_s.should == "2012-12-04 00:55:15 UTC"
67
- end
68
- end
8
+ before :each do
9
+ @xml = body_for(:get_success_boleto)
10
+ @response_parser = Tray::Checkout::ResponseParser.new(@xml)
11
+ @response = Tray::Checkout::Response.new
12
+ Tray::Checkout::ResponseParser.stub(:new).and_return(@response_parser)
69
13
  end
70
14
 
71
- context "with error response" do
72
- let(:xml) { body_for :get_failure_not_found }
73
- let(:txn) { parser.response(xml) }
74
-
75
- it "does not return success" do
76
- txn[:success].should be_false
77
- end
78
-
79
- context "returns error" do
80
- { code: "003042",
81
- message: "Transação não encontrada"
82
- }.each do |param, value|
83
- it param do
84
- txn[:errors].first[param].should == value
85
- end
86
- end
87
- end
15
+ it "creates response parser" do
16
+ Tray::Checkout::ResponseParser.should_receive(:new).with(@xml)
17
+ parser.response(@xml)
88
18
  end
89
19
 
90
- context "with validation error response" do
91
- let(:xml) { body_for :create_failure_validation_errors }
92
- let(:txn) { parser.response(xml) }
93
-
94
- it "does not return success" do
95
- txn[:success].should be_false
96
- end
97
-
98
- context "returns error" do
99
- { code: "1",
100
- message: "não pode ficar em branco",
101
- message_complete: "Tipo não pode ficar em branco",
102
- field: "person_addresses.type_address"
103
- }.each do |param, value|
104
- it param do
105
- txn[:errors].first[param].should == value
106
- end
107
- end
108
- end
20
+ it "parses response" do
21
+ @response_parser.should_receive(:parse).and_return(@response)
22
+ parser.response(@xml).should == @response
109
23
  end
110
24
  end
111
25
 
112
- describe "#payment_params!" do
113
- let :params do
114
- {
26
+ describe "#transaction_params" do
27
+ before :each do
28
+ @params = {
115
29
  token_account: "949u5uu9ef36f7u",
116
- customer: {
117
- name: "Pedro Bonamides",
118
- cpf: "18565842673",
119
- email: "pedro@bo.com.br",
120
- sex: :male,
121
- marital_status: :single,
122
- contacts: [
123
- { contact_type: :home,
124
- number_contact: "1142360873"
125
- },
126
- { contact_type: :mobile,
127
- number_contact: "11987654321"
128
- },
129
- { contact_type: :work,
130
- number_contact: "1134567890"
131
- }
132
- ],
133
- addresses: [
134
- { address_type: :billing,
135
- street: "Avenida Pedro Alvares Cabral",
136
- number: "123",
137
- neighborhood: "Parque Ibirapuera",
138
- postal_code: "04094050",
139
- city: "São Paulo",
140
- state: "SP"
141
- },
142
- { address_type: :delivery,
143
- street: "Avenida Pedro Alvares Cabral",
144
- number: "123",
145
- neighborhood: "Parque Ibirapuera",
146
- postal_code: "04094050",
147
- city: "São Paulo",
148
- state: "SP"
149
- }
150
- ]
151
- },
152
- transaction: {
153
- order_number: "R1245",
154
- shipping_type: "Sedex",
155
- shipping_price: 13.94,
156
- url_notification: "http://prodis.blog.br/tray_notification"
157
- },
158
- transaction_product: [
159
- { code: "LOGO-8278",
160
- quantity: 2,
161
- price_unit: 100.99,
162
- description: "Logo Prodis"
163
- }
164
- ],
165
- payment: {
166
- payment_method: :mastercard,
167
- split: 3,
168
- card_name: "ZEFINHA NOCEGA",
169
- card_number: "5105105105105100",
170
- card_expdate_month: "09",
171
- card_expdate_year: "2015",
172
- card_cvv: "123"
173
- }
30
+ customer: { name: "Pedro Bonamides", sex: :male },
31
+ payment: { payment_method: :boleto_bancario }
174
32
  }
33
+ @transaction_params = {
34
+ token_account: "949u5uu9ef36f7u",
35
+ customer: { name: "Pedro Bonamides", sex: :male, gender: "M" },
36
+ payment: { payment_method: :boleto, payment_method_id: "6" }
37
+ }
38
+ @transaction_params_parser = Tray::Checkout::TransactionParamsParser.new(@params)
39
+ Tray::Checkout::TransactionParamsParser.stub(:new).and_return(@transaction_params_parser)
175
40
  end
176
41
 
177
- let(:txn) { parser.payment_params!(params) }
178
-
179
- it "sets customer gender expect API value" do
180
- txn[:customer][:gender].should == "M"
181
- end
182
-
183
- it "sets customer relationship expect API value" do
184
- txn[:customer][:relationship].should == "S"
185
- end
186
-
187
- it "sets customer contact type expect API value" do
188
- txn[:customer][:contacts][0][:type_contact].should == "H"
189
- txn[:customer][:contacts][1][:type_contact].should == "M"
190
- txn[:customer][:contacts][2][:type_contact].should == "W"
191
- end
192
-
193
- it "sets customer address type expect API value" do
194
- txn[:customer][:addresses][0][:type_address].should == "B"
195
- txn[:customer][:addresses][1][:type_address].should == "D"
42
+ it "creates transaction params parser" do
43
+ Tray::Checkout::TransactionParamsParser.should_receive(:new).with(@params)
44
+ parser.transaction_params(@params)
196
45
  end
197
46
 
198
- it "sets payment method ID expect API value" do
199
- txn[:payment][:payment_method_id].should == 4
47
+ it "parses params" do
48
+ @transaction_params_parser.should_receive(:parse).and_return(@transaction_params)
49
+ parser.transaction_params(@params).should == @transaction_params
200
50
  end
201
51
  end
202
52
  end
@@ -0,0 +1,187 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe Tray::Checkout::ResponseParser do
5
+ describe "#parse" do
6
+ context "with success response" do
7
+ let(:xml) { body_for :get_success_boleto }
8
+ let(:parser) { Tray::Checkout::ResponseParser.new(xml) }
9
+ let(:response) { parser.parse }
10
+
11
+ it "returns success" do
12
+ response.success?.should be_true
13
+ end
14
+
15
+ it "returns empty errors" do
16
+ response.errors.should be_empty
17
+ end
18
+
19
+ context "returns transaction" do
20
+ { token: "db9b3265af6e7e19af8dd70e00d77383x",
21
+ id: 530,
22
+ status: :approved,
23
+ status_name: "Aprovada",
24
+ order_number: "F2456",
25
+ price_original: 33.21,
26
+ price_payment: 33.21,
27
+ price_seller: 30.69,
28
+ price_additional: 0.00,
29
+ price_discount: 0.00,
30
+ shipping_type: "Sedex",
31
+ shipping_price: 1.23,
32
+ split: 1,
33
+ url_notification: "http://prodis.blog.br/tray_notification",
34
+ transaction_token: nil,
35
+ transaction_id: nil,
36
+ status_id: nil
37
+ }.each do |param, value|
38
+ it param do
39
+ response.transaction[param].should == value
40
+ end
41
+ end
42
+
43
+ it "date_transaction" do
44
+ date_transaction = response.transaction[:date_transaction]
45
+ date_transaction.should be_a(Time)
46
+ date_transaction.to_s.should == "2012-12-13 02:49:42 UTC"
47
+ end
48
+ end
49
+
50
+ context "returns payment" do
51
+ { method: :boleto,
52
+ method_name: "Boleto Bancario",
53
+ price: 33.21,
54
+ split: 1,
55
+ number_proccess: 750,
56
+ response: "Texto de resposta fake.",
57
+ url: "http://checkout.sandbox.tray.com.br/payment/billet/d2baa84c13f23addde401c8e1426396e",
58
+ linha_digitavel: "34191.76007 00075.091140 53021.450001 1 55510000003321",
59
+ payment_method_id: nil,
60
+ payment_method_name: nil,
61
+ price_payment: nil,
62
+ url_payment: nil,
63
+ payment_response: nil
64
+ }.each do |param, value|
65
+ it param do
66
+ response.payment[param].should == value
67
+ end
68
+ end
69
+
70
+ { date_approval: "2012-12-15 15:24:38 UTC",
71
+ date_payment: "2012-12-15 15:23:05 UTC"
72
+ }.each do |param, value|
73
+ it param do
74
+ response.payment[param].should be_a(Time)
75
+ response.payment[param].to_s.should == value
76
+ end
77
+ end
78
+ end
79
+
80
+ context "returns customer" do
81
+ { name: "Pedro Bonamides",
82
+ email: "pedro@bo.com.br",
83
+ cpf: "18565842673"
84
+ }.each do |param, value|
85
+ it param do
86
+ response.customer[param].should == value
87
+ end
88
+ end
89
+
90
+ context "address with" do
91
+ { street: "Avenida Pedro Alvares Cabral",
92
+ number: "123",
93
+ neighborhood: "Parque Ibirapuera",
94
+ postal_code: "04094050",
95
+ completion: nil,
96
+ city: "São Paulo",
97
+ state: "SP"
98
+ }.each do |param, value|
99
+ it param do
100
+ response.customer[:addresses].first[param].should == value
101
+ end
102
+ end
103
+ end
104
+
105
+ context "contacts with" do
106
+ [ { id: 345,
107
+ number: "1137654321",
108
+ type: :home,
109
+ primary: true,
110
+ contact_id: nil,
111
+ value: nil,
112
+ type_contact: nil
113
+ },
114
+ { id: 348,
115
+ number: "11987654321",
116
+ type: :mobile,
117
+ primary: false,
118
+ contact_id: nil,
119
+ value: nil,
120
+ type_contact: nil
121
+ }
122
+ ].each_with_index do |contacts, i|
123
+ contacts.each do |param, value|
124
+ it param do
125
+ response.customer[:contacts][i][param].should == value
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+
133
+ context "with error response" do
134
+ let(:xml) { body_for :get_failure_not_found }
135
+ let(:parser) { Tray::Checkout::ResponseParser.new(xml) }
136
+ let(:response) { parser.parse }
137
+
138
+ it "does not return success" do
139
+ response.success?.should be_false
140
+ end
141
+
142
+ [:transaction, :payment, :customer].each do |info|
143
+ it "returns nil #{info}" do
144
+ response.send(info).should be_nil
145
+ end
146
+ end
147
+
148
+ context "returns error" do
149
+ { code: "003042",
150
+ message: "Transação não encontrada"
151
+ }.each do |param, value|
152
+ it param do
153
+ response.errors.first[param].should == value
154
+ end
155
+ end
156
+ end
157
+ end
158
+
159
+ context "with validation error response" do
160
+ let(:xml) { body_for :create_failure_validation_errors }
161
+ let(:parser) { Tray::Checkout::ResponseParser.new(xml) }
162
+ let(:response) { parser.parse }
163
+
164
+ it "does not return success" do
165
+ response.success?.should be_false
166
+ end
167
+
168
+ [:transaction, :payment, :customer].each do |info|
169
+ it "returns nil #{info}" do
170
+ response.send(info).should be_nil
171
+ end
172
+ end
173
+
174
+ context "returns error" do
175
+ { code: "1",
176
+ message: "não pode ficar em branco",
177
+ message_complete: "Tipo não pode ficar em branco",
178
+ field: "person_addresses.type_address"
179
+ }.each do |param, value|
180
+ it param do
181
+ response.errors.first[param].should == value
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe Tray::Checkout::Response do
5
+ let(:response) { Tray::Checkout::Response.new }
6
+
7
+ describe ".new" do
8
+ it "sets success to false" do
9
+ response.success?.should be_false
10
+ end
11
+
12
+ it "sets errors to empty" do
13
+ response.errors.should be_empty
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,126 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe Tray::Checkout::TransactionParamsParser do
5
+ let :params do
6
+ {
7
+ token_account: "949u5uu9ef36f7u",
8
+ customer: {
9
+ name: "Pedro Bonamides",
10
+ cpf: "18565842673",
11
+ email: "pedro@bo.com.br",
12
+ sex: :male,
13
+ marital_status: :single,
14
+ contacts: [
15
+ { type: :home, number: "1142360873" },
16
+ { type: :mobile, number: "11987654321" },
17
+ { type: :work, number: "1134567890" }
18
+ ],
19
+ addresses: [
20
+ { type: :billing,
21
+ street: "Avenida Pedro Alvares Cabral",
22
+ number: "123",
23
+ neighborhood: "Parque Ibirapuera",
24
+ postal_code: "04094050",
25
+ city: "São Paulo",
26
+ state: "SP"
27
+ },
28
+ { type: :delivery,
29
+ street: "Avenida Pedro Alvares Cabral",
30
+ number: "123",
31
+ neighborhood: "Parque Ibirapuera",
32
+ postal_code: "04094050",
33
+ city: "São Paulo",
34
+ state: "SP"
35
+ }
36
+ ]
37
+ },
38
+ transaction: {
39
+ order_number: "R1245",
40
+ shipping_type: "Sedex",
41
+ shipping_price: 13.94,
42
+ url_notification: "http://prodis.blog.br/tray_notification",
43
+ products: [
44
+ { code: "LOGO-8278",
45
+ quantity: 2,
46
+ price_unit: 100.99,
47
+ description: "Logo Prodis"
48
+ },
49
+ { code: "877",
50
+ quantity: 1,
51
+ price_unit: 10.00,
52
+ description: "Outro produto"
53
+ }
54
+ ]
55
+ },
56
+ payment: {
57
+ method: :mastercard,
58
+ split: 3,
59
+ card: {
60
+ name: "ZEFINHA NOCEGA",
61
+ number: "5105105105105100",
62
+ expdate_month: "09",
63
+ expdate_year: "2015",
64
+ cvv: "123"
65
+ }
66
+ }
67
+ }
68
+ end
69
+
70
+ let(:parser) { Tray::Checkout::TransactionParamsParser.new(params) }
71
+ let(:transaction_params) { parser.parse }
72
+
73
+ describe "#parse" do
74
+ it "sets customer gender expect API value" do
75
+ transaction_params[:customer][:gender].should == "M"
76
+ end
77
+
78
+ it "sets customer relationship expect API value" do
79
+ transaction_params[:customer][:relationship].should == "S"
80
+ end
81
+
82
+ it "sets customer contact type expect API value" do
83
+ transaction_params[:customer][:contacts][0][:type_contact].should == "H"
84
+ transaction_params[:customer][:contacts][1][:type_contact].should == "M"
85
+ transaction_params[:customer][:contacts][2][:type_contact].should == "W"
86
+ end
87
+
88
+ it "sets customer contact number expect API value" do
89
+ transaction_params[:customer][:contacts][0][:number_contact].should == "1142360873"
90
+ transaction_params[:customer][:contacts][1][:number_contact].should == "11987654321"
91
+ transaction_params[:customer][:contacts][2][:number_contact].should == "1134567890"
92
+ end
93
+
94
+ it "sets customer address type expect API value" do
95
+ transaction_params[:customer][:addresses][0][:type_address].should == "B"
96
+ transaction_params[:customer][:addresses][1][:type_address].should == "D"
97
+ end
98
+
99
+ it "sets payment method ID expect API value" do
100
+ transaction_params[:payment][:payment_method_id].should == 4
101
+ end
102
+
103
+ { card_name: "ZEFINHA NOCEGA",
104
+ card_number: "5105105105105100",
105
+ card_expdate_month: "09",
106
+ card_expdate_year: "2015",
107
+ card_cvv: "123"
108
+ }.each do |param, value|
109
+ it "sets payment #{param}" do
110
+ transaction_params[:payment][param].should == value
111
+ end
112
+ end
113
+
114
+ it "sets products as expect API data structure" do
115
+ transaction_params[:transaction_product][0][:code].should == "LOGO-8278"
116
+ transaction_params[:transaction_product][0][:quantity].should == 2
117
+ transaction_params[:transaction_product][0][:price_unit].should == 100.99
118
+ transaction_params[:transaction_product][0][:description].should == "Logo Prodis"
119
+
120
+ transaction_params[:transaction_product][1][:code].should == "877"
121
+ transaction_params[:transaction_product][1][:quantity].should == 1
122
+ transaction_params[:transaction_product][1][:price_unit].should == 10.00
123
+ transaction_params[:transaction_product][1][:description].should == "Outro produto"
124
+ end
125
+ end
126
+ end
@@ -8,37 +8,42 @@ describe Tray::Checkout::Transaction do
8
8
  context "when transaction is found" do
9
9
  before :each do
10
10
  mock_request_for(:get_success_boleto)
11
- @txn = transaction.get("522045453u5uu32e0u8014f060uuu5uu")
11
+ @response = transaction.get("db9b3265af6e7e19af8dd70e00d77383x")
12
12
  end
13
13
 
14
14
  it "returns success" do
15
- @txn[:success].should be_true
15
+ @response.success?.should be_true
16
16
  end
17
17
 
18
18
  it "returns transaction data" do
19
- @txn[:transaction_token].should == "522045453u5uu32e0u8014f060uuu5uu"
20
- @txn[:transaction_id].should == 501
19
+ @response.transaction[:token].should == "db9b3265af6e7e19af8dd70e00d77383x"
20
+ @response.transaction[:id].should == 530
21
21
  end
22
22
 
23
23
  it "returns payment data" do
24
- @txn[:payment][:payment_method_name].should == "Boleto Bancario"
25
- @txn[:payment][:url_payment].should == "http://checkout.sandbox.tray.com.br/payment/billet/u9uuu8731319u59u3073u9011uu6u6uu"
24
+ @response.payment[:method_name].should == "Boleto Bancario"
25
+ @response.payment[:url].should == "http://checkout.sandbox.tray.com.br/payment/billet/d2baa84c13f23addde401c8e1426396e"
26
+ end
27
+
28
+ it "returns customer data" do
29
+ @response.customer[:name].should == "Pedro Bonamides"
30
+ @response.customer[:email].should == "pedro@bo.com.br"
26
31
  end
27
32
  end
28
33
 
29
34
  context "when transaction is not found" do
30
35
  before :each do
31
36
  mock_request_for(:get_failure_not_found)
32
- @txn = transaction.get("987asd654lkj321qwe098poi")
37
+ @response = transaction.get("987asd654lkj321qwe098poi")
33
38
  end
34
39
 
35
40
  it "does not return success" do
36
- @txn[:success].should be_false
41
+ @response.success?.should be_false
37
42
  end
38
43
 
39
44
  it "returns errors" do
40
- @txn[:errors].first[:code].should == "003042"
41
- @txn[:errors].first[:message].should == "Transação não encontrada"
45
+ @response.errors.first[:code].should == "003042"
46
+ @response.errors.first[:message].should == "Transação não encontrada"
42
47
  end
43
48
  end
44
49
  end
@@ -47,34 +52,43 @@ describe Tray::Checkout::Transaction do
47
52
  context "successful" do
48
53
  before :each do
49
54
  mock_request_for(:create_success_mastercard)
50
- @txn = transaction.create(fake: "fake params")
55
+ @response = transaction.create(fake: "fake params")
51
56
  end
52
57
 
53
58
  it "returns success" do
54
- @txn[:success].should be_true
59
+ @response.success?.should be_true
55
60
  end
56
61
 
57
62
  it "returns transaction data" do
58
- @txn[:transaction_token].should == "u522169ce59763uu717160u4u1183u43"
59
- @txn[:status].should == :approved
60
- @txn[:payment_method].should == :mastercard
63
+ @response.transaction[:token].should == "fc739f786425e34010481dcc2939e4bdx"
64
+ @response.transaction[:status].should == :approved
65
+ end
66
+
67
+ it "returns payment data" do
68
+ @response.payment[:method].should == :mastercard
69
+ @response.payment[:tid].should == "1355409331"
70
+ end
71
+
72
+ it "returns customer data" do
73
+ @response.customer[:name].should == "Pedro Bonamides"
74
+ @response.customer[:email].should == "pedro@bo.com.br"
61
75
  end
62
76
  end
63
77
 
64
78
  context "unsuccess" do
65
79
  before :each do
66
80
  mock_request_for(:create_failure_validation_errors)
67
- @txn = transaction.create(fake: "fake params")
81
+ @response = transaction.create(fake: "fake params")
68
82
  end
69
83
 
70
84
  it "does not return success" do
71
- @txn[:success].should be_false
85
+ @response.success?.should be_false
72
86
  end
73
87
 
74
88
  it "returns error" do
75
- @txn[:errors].first[:code].should == "1"
76
- @txn[:errors].first[:message].should == "não pode ficar em branco"
77
- @txn[:errors].first[:message_complete].should == "Tipo não pode ficar em branco"
89
+ @response.errors.first[:code].should == "1"
90
+ @response.errors.first[:message].should == "não pode ficar em branco"
91
+ @response.errors.first[:message_complete].should == "Tipo não pode ficar em branco"
78
92
  end
79
93
  end
80
94
  end