pagseguro-oficial 2.5.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -1
  3. data/CONTRIBUTING.md +39 -0
  4. data/Dockerfile +20 -0
  5. data/README.md +22 -0
  6. data/docker-compose.yml +5 -0
  7. data/examples/checkout/create_payment_request.rb +1 -1
  8. data/examples/direct/create_transaction_using_boleto.rb +1 -1
  9. data/examples/direct/create_transaction_using_credit_card.rb +1 -1
  10. data/examples/direct/create_transaction_using_online_debit.rb +1 -1
  11. data/examples/preapproval/cancel_preapproval.rb +26 -0
  12. data/examples/preapproval/change_preapproval_payment.rb +50 -0
  13. data/examples/preapproval/change_preapproval_status.rb +29 -0
  14. data/examples/preapproval/charge_preapproval.rb +36 -0
  15. data/examples/preapproval/create_preapproval.rb +68 -0
  16. data/examples/preapproval/create_preapproval_auto.rb +53 -0
  17. data/examples/preapproval/create_preapproval_discount.rb +30 -0
  18. data/examples/preapproval/create_preapproval_manual.rb +58 -0
  19. data/examples/preapproval/create_preapproval_transparent.rb +41 -0
  20. data/examples/preapproval/preapproval_retry.rb +29 -0
  21. data/examples/preapproval/search/search_by_date_interval.rb +45 -0
  22. data/examples/preapproval/search/search_by_days_interval.rb +46 -0
  23. data/examples/preapproval/search/search_by_notification_code.rb +50 -0
  24. data/examples/preapproval/search/search_by_subscription_code.rb +50 -0
  25. data/examples/preapproval/search/search_subscription_payment_orders.rb +53 -0
  26. data/examples/split_payment/create_payment_request.rb +1 -1
  27. data/examples/split_payment/create_transaction_using_boleto.rb +118 -0
  28. data/examples/split_payment/create_transaction_using_credit_card.rb +152 -0
  29. data/lib/pagseguro.rb +33 -1
  30. data/lib/pagseguro/credit_card_transaction_request.rb +1 -1
  31. data/lib/pagseguro/document.rb +8 -0
  32. data/lib/pagseguro/holder.rb +8 -0
  33. data/lib/pagseguro/manual_subscription_charger.rb +59 -0
  34. data/lib/pagseguro/manual_subscription_charger/request_serializer.rb +50 -0
  35. data/lib/pagseguro/manual_subscription_charger/response.rb +36 -0
  36. data/lib/pagseguro/manual_subscription_charger/response_serializer.rb +17 -0
  37. data/lib/pagseguro/payment_request/request_serializer.rb +25 -1
  38. data/lib/pagseguro/receiver.rb +3 -0
  39. data/lib/pagseguro/request.rb +32 -2
  40. data/lib/pagseguro/sender.rb +21 -3
  41. data/lib/pagseguro/subscription.rb +132 -0
  42. data/lib/pagseguro/subscription/request_serializer.rb +129 -0
  43. data/lib/pagseguro/subscription/response.rb +49 -0
  44. data/lib/pagseguro/subscription/response_serializer.rb +62 -0
  45. data/lib/pagseguro/subscription/subscription_search.rb +135 -0
  46. data/lib/pagseguro/subscription_canceller.rb +30 -0
  47. data/lib/pagseguro/subscription_canceller/response.rb +34 -0
  48. data/lib/pagseguro/subscription_change_payment.rb +46 -0
  49. data/lib/pagseguro/subscription_change_payment/request_serializer.rb +80 -0
  50. data/lib/pagseguro/subscription_change_payment/response.rb +26 -0
  51. data/lib/pagseguro/subscription_change_status.rb +50 -0
  52. data/lib/pagseguro/subscription_change_status/request_serializer.rb +28 -0
  53. data/lib/pagseguro/subscription_change_status/response.rb +26 -0
  54. data/lib/pagseguro/subscription_discount.rb +41 -0
  55. data/lib/pagseguro/subscription_discount/request_serializer.rb +34 -0
  56. data/lib/pagseguro/subscription_discount/response.rb +34 -0
  57. data/lib/pagseguro/subscription_payment_method.rb +21 -0
  58. data/lib/pagseguro/subscription_payment_order.rb +57 -0
  59. data/lib/pagseguro/subscription_payment_order/response.rb +37 -0
  60. data/lib/pagseguro/subscription_payment_order/response_serializer.rb +51 -0
  61. data/lib/pagseguro/subscription_plan.rb +69 -0
  62. data/lib/pagseguro/subscription_plan/request_serializer.rb +81 -0
  63. data/lib/pagseguro/subscription_plan/response.rb +36 -0
  64. data/lib/pagseguro/subscription_plan/response_serializer.rb +17 -0
  65. data/lib/pagseguro/subscription_retry.rb +35 -0
  66. data/lib/pagseguro/subscription_retry/response.rb +34 -0
  67. data/lib/pagseguro/subscription_search_payment_orders.rb +131 -0
  68. data/lib/pagseguro/subscription_transaction.rb +29 -0
  69. data/lib/pagseguro/subscription_transactions.rb +5 -0
  70. data/lib/pagseguro/transaction.rb +0 -10
  71. data/lib/pagseguro/transaction/serializer.rb +19 -2
  72. data/lib/pagseguro/transaction_request.rb +26 -1
  73. data/lib/pagseguro/transaction_request/request_serializer.rb +164 -1
  74. data/lib/pagseguro/version.rb +1 -1
  75. data/spec/fixtures/manual_subscription_charger/fail.xml +6 -0
  76. data/spec/fixtures/manual_subscription_charger/success.xml +4 -0
  77. data/spec/fixtures/subscription/fail.xml +6 -0
  78. data/spec/fixtures/subscription/find_success.xml +28 -0
  79. data/spec/fixtures/subscription/search_success.xml +18 -0
  80. data/spec/fixtures/subscription/success.xml +4 -0
  81. data/spec/fixtures/subscription_canceller/fail.xml +6 -0
  82. data/spec/fixtures/subscription_change_payment/fail.xml +7 -0
  83. data/spec/fixtures/subscription_change_status/fail.xml +7 -0
  84. data/spec/fixtures/subscription_discount/fail.xml +6 -0
  85. data/spec/fixtures/subscription_payment_order/success.xml +18 -0
  86. data/spec/fixtures/subscription_plan/fail.xml +6 -0
  87. data/spec/fixtures/subscription_plan/success.xml +4 -0
  88. data/spec/fixtures/subscription_retry/fail.xml +7 -0
  89. data/spec/fixtures/subscription_search_payment_orders/success.xml +43 -0
  90. data/spec/fixtures/transactions/without_status_and_type.xml +71 -0
  91. data/spec/pagseguro/credit_card_transaction_request_spec.rb +1 -1
  92. data/spec/pagseguro/document_spec.rb +15 -0
  93. data/spec/pagseguro/holder_spec.rb +1 -0
  94. data/spec/pagseguro/manual_subscription_charger/request_serializer_spec.rb +79 -0
  95. data/spec/pagseguro/manual_subscription_charger/response_serializer_spec.rb +10 -0
  96. data/spec/pagseguro/manual_subscription_charger/response_spec.rb +65 -0
  97. data/spec/pagseguro/manual_subscription_charger_spec.rb +68 -0
  98. data/spec/pagseguro/payment_request/request_serializer_spec.rb +54 -22
  99. data/spec/pagseguro/receiver_spec.rb +1 -0
  100. data/spec/pagseguro/sender_spec.rb +16 -2
  101. data/spec/pagseguro/subscription/request_serializer_spec.rb +233 -0
  102. data/spec/pagseguro/subscription/response_serializer_spec.rb +46 -0
  103. data/spec/pagseguro/subscription/response_spec.rb +79 -0
  104. data/spec/pagseguro/subscription/subscription_search_spec.rb +154 -0
  105. data/spec/pagseguro/subscription_canceller/response_spec.rb +58 -0
  106. data/spec/pagseguro/subscription_canceller_spec.rb +57 -0
  107. data/spec/pagseguro/subscription_change_payment/request_serializer_spec.rb +150 -0
  108. data/spec/pagseguro/subscription_change_payment/response_spec.rb +41 -0
  109. data/spec/pagseguro/subscription_change_payment_spec.rb +60 -0
  110. data/spec/pagseguro/subscription_change_status/request_serializer_spec.rb +19 -0
  111. data/spec/pagseguro/subscription_change_status/response_spec.rb +41 -0
  112. data/spec/pagseguro/subscription_change_status_spec.rb +53 -0
  113. data/spec/pagseguro/subscription_discount/request_serializer_spec.rb +27 -0
  114. data/spec/pagseguro/subscription_discount/response_spec.rb +58 -0
  115. data/spec/pagseguro/subscription_discount_spec.rb +60 -0
  116. data/spec/pagseguro/subscription_payment_method_spec.rb +10 -0
  117. data/spec/pagseguro/subscription_payment_order/response_serializer_spec.rb +24 -0
  118. data/spec/pagseguro/subscription_payment_order/response_spec.rb +55 -0
  119. data/spec/pagseguro/subscription_payment_order_spec.rb +27 -0
  120. data/spec/pagseguro/subscription_plan/request_serializer_spec.rb +253 -0
  121. data/spec/pagseguro/subscription_plan/response_serializer_spec.rb +10 -0
  122. data/spec/pagseguro/subscription_plan/response_spec.rb +65 -0
  123. data/spec/pagseguro/subscription_plan_spec.rb +118 -0
  124. data/spec/pagseguro/subscription_retry/response_spec.rb +58 -0
  125. data/spec/pagseguro/subscription_retry_spec.rb +62 -0
  126. data/spec/pagseguro/subscription_search_payment_order_spec.rb +129 -0
  127. data/spec/pagseguro/subscription_spec.rb +137 -0
  128. data/spec/pagseguro/subscription_transaction_spec.rb +24 -0
  129. data/spec/pagseguro/subscription_transactions_spec.rb +37 -0
  130. data/spec/pagseguro/transaction/response_spec.rb +0 -42
  131. data/spec/pagseguro/transaction/serializer_spec.rb +5 -6
  132. data/spec/pagseguro/transaction_request/request_serializer_spec.rb +623 -159
  133. data/spec/pagseguro/transaction_request_spec.rb +26 -0
  134. data/spec/pagseguro/transaction_spec.rb +0 -48
  135. data/spec/spec_helper.rb +1 -0
  136. metadata +154 -8
  137. data/examples/checkout/search/search_transaction_status_history.rb +0 -22
  138. data/lib/pagseguro/transaction/status_collection.rb +0 -20
  139. data/spec/fixtures/transactions/status_history.xml +0 -12
  140. data/spec/pagseguro/transaction/status_collection_spec.rb +0 -43
@@ -16,48 +16,6 @@ describe PagSeguro::Transaction::Response do
16
16
  end
17
17
  end
18
18
 
19
- describe "#serialize_statuses" do
20
- let(:object) { PagSeguro::Transaction::StatusCollection.new }
21
- let(:http_response) do
22
- double(:Response, xml?: true, success?: true, unauthorized?: false,
23
- bad_request?: false, body: raw_xml, data: parsed_xml)
24
- end
25
- let(:parsed_xml) { Nokogiri::XML(raw_xml) }
26
-
27
- context "when request succeeds" do
28
- let(:raw_xml) { File.read("./spec/fixtures/transactions/status_history.xml") }
29
-
30
- it "returns a collection" do
31
- expect(subject.serialize_statuses).to be_a(PagSeguro::Transaction::StatusCollection)
32
- end
33
-
34
- it "not change errors" do
35
- expect { subject.serialize_statuses }.not_to change { object.errors.empty? }
36
- end
37
- end
38
-
39
- context "when request fails" do
40
- before do
41
- allow(http_response).to receive_messages(
42
- success?: false,
43
- error?: true,
44
- error: Aitch::NotFoundError,
45
- body: raw_xml
46
- )
47
- end
48
-
49
- let(:raw_xml) { File.read("./spec/fixtures/invalid_code.xml") }
50
-
51
- it "returns PagSeguro::Transaction::StatusCollection instance" do
52
- expect(subject.serialize_statuses).to be_a(PagSeguro::Transaction::StatusCollection)
53
- end
54
-
55
- it "change collection errors" do
56
- expect { subject.serialize_statuses }.to change { object.errors.empty? }
57
- end
58
- end
59
- end
60
-
61
19
  describe "#serialize" do
62
20
  let(:object) { PagSeguro::Transaction.new }
63
21
  let(:http_response) do
@@ -74,14 +74,13 @@ describe PagSeguro::Transaction::Serializer do
74
74
  it { expect(data).to include(escrow_end_date: Time.parse("2013-06-01T01:41:20.000-03:00")) }
75
75
  end
76
76
 
77
- context "when looking for transaction status history" do
78
- let(:source) { File.read("./spec/fixtures/transactions/status_history.xml") }
77
+ context "transaction without status and type" do
78
+ let(:source) { File.read("./spec/fixtures/transactions/without_status_and_type.xml") }
79
79
  let(:xml) { Nokogiri::XML(source) }
80
80
  let(:serializer) { described_class.new(xml) }
81
- subject(:data) { serializer.serialize_status_history }
81
+ let(:data) { serializer.serialize }
82
82
 
83
- it { expect(data.first.code).to eq("1") }
84
- it { expect(data.first.date).to eq(Time.parse("2015-02-24T10:23:34.000-03:00")) }
85
- it { expect(data.first.notification_code).to eq("B7C381-7AADE5ADE576-8CC4159F8FBB-25C7D6") }
83
+ it { expect(data[:status]).to be_nil }
84
+ it { expect(data[:type]).to be_nil }
86
85
  end
87
86
  end
@@ -1,165 +1,552 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe PagSeguro::TransactionRequest::RequestSerializer do
4
- let(:transaction_request) { PagSeguro::TransactionRequest.new }
5
- let(:params) { serializer.to_params }
6
- subject(:serializer) { described_class.new(transaction_request) }
7
-
8
- before do
9
- allow(transaction_request).to receive_messages({
10
- payment_method: "creditCard",
11
- credit_card_token: "4as56d4a56d456as456dsa"
12
- })
13
- end
4
+ let(:transaction_request) { PagSeguro::BoletoTransactionRequest.new }
14
5
 
15
- context "global configuration serialization" do
16
- before do
17
- PagSeguro.configuration.receiver_email = "RECEIVER"
6
+ subject { described_class.new(transaction_request) }
7
+
8
+ context '#to_xml_params' do
9
+ let(:xml) { subject.to_xml_params }
10
+
11
+ it 'should serializer receivers' do
12
+ transaction_request.receivers = [
13
+ {
14
+ public_key: 'PUB1234ABC',
15
+ split: {
16
+ amount: 10,
17
+ fee_percent: 11,
18
+ rate_percent: 12
19
+ }
20
+ }
21
+ ]
22
+
23
+ expect(xml).to match %r[
24
+ <payment>
25
+ .*<receivers>
26
+ .*<receiver>
27
+ .*<publicKey>PUB1234ABC</publicKey>
28
+ .*<split>
29
+ .*<amount>10.00</amount>
30
+ .*<ratePercent>12.00</ratePercent>
31
+ .*<feePercent>11.00</feePercent>
32
+ ]xm
18
33
  end
19
34
 
20
- it { expect(params).to include(receiverEmail: PagSeguro.configuration.receiver_email) }
21
- end
35
+ it 'should serializer mode' do
36
+ transaction_request.payment_mode = 'default'
22
37
 
23
- context "generic attributes serialization" do
24
- before do
25
- allow(transaction_request).to receive_messages({
26
- currency: "BRL",
27
- reference: "REF123",
28
- extra_amount: 1234.50,
29
- notification_url: "NOTIFICATION_URL",
30
- payment_mode: "default"
31
- })
38
+ expect(xml).to match %r[<payment>.*<mode>default</mode>]m
32
39
  end
33
40
 
34
- it { expect(params).to include(currency: "BRL") }
35
- it { expect(params).to include(reference: "REF123") }
36
- it { expect(params).to include(extraAmount: "1234.50") }
37
- it { expect(params).to include(notificationURL: "NOTIFICATION_URL") }
38
- it { expect(params).to include(paymentMethod: "creditCard") }
39
- it { expect(params).to include(paymentMode: "default") }
40
- it { expect(params).to include(creditCardToken: "4as56d4a56d456as456dsa") }
41
- end
41
+ it 'should serializer method' do
42
+ allow(transaction_request).to receive(:payment_method).and_return('creditCard')
42
43
 
43
- context "items serialization" do
44
- def build_item(index)
45
- PagSeguro::Item.new({
46
- id: "ID#{index}",
47
- description: "DESC#{index}",
48
- quantity: "QTY#{index}",
49
- amount: index * 100 + 0.12,
50
- weight: "WEIGHT#{index}",
51
- shipping_cost: index * 100 + 0.34
52
- })
44
+ expect(xml).to match %r[<payment>.*<method>creditCard</method>]m
53
45
  end
54
46
 
55
- shared_examples_for "item serialization" do |index|
56
- it { expect(params).to include("itemId#{index}" => "ID#{index}") }
57
- it { expect(params).to include("itemDescription#{index}" => "DESC#{index}") }
58
- it { expect(params).to include("itemAmount#{index}" => "#{index}00.12") }
59
- it { expect(params).to include("itemShippingCost#{index}" => "#{index}00.34") }
60
- it { expect(params).to include("itemQuantity#{index}" => "QTY#{index}") }
61
- it { expect(params).to include("itemWeight#{index}" => "WEIGHT#{index}") }
47
+ context "should serializer sender's" do
48
+ context 'when there is only the name' do
49
+ before do
50
+ transaction_request.sender = { name: 'Alice' }
51
+ end
52
+
53
+ it 'should render only the name' do
54
+ expect(xml).to match %r[
55
+ <payment>
56
+ .*<sender>
57
+ .*<name>Alice
58
+ ]xm
59
+ end
60
+ end
61
+
62
+ context 'when there is only cpf' do
63
+ before do
64
+ transaction_request.sender = { document: PagSeguro::Document.new(type: 'CPF', value: '12345') }
65
+ end
66
+
67
+ it 'document' do
68
+ expect(xml).to match %r[
69
+ <payment>
70
+ .*<sender>
71
+ .*<documents>
72
+ .*<document>
73
+ .*<type>CPF</type>
74
+ .*<value>12345</value>
75
+ ]xm
76
+ end
77
+ end
78
+
79
+ context 'when there is only cnpj' do
80
+ before do
81
+ transaction_request.sender = {
82
+ document: PagSeguro::Document.new(type: 'CNPJ', value: '62057673000135')
83
+ }
84
+ end
85
+
86
+ it 'should render only the name' do
87
+ expect(xml).to match %r[
88
+ <payment>
89
+ .*<sender>
90
+ .*<documents>
91
+ .*<document>
92
+ .*<type>CNPJ</type>
93
+ .*<value>62057673000135</value>
94
+ ]xm
95
+ end
96
+ end
97
+
98
+ context 'when there are all fields' do
99
+ before do
100
+ transaction_request.sender = {
101
+ name: 'Alice',
102
+ email: 'alice@example.com',
103
+ hash: 'hash1234',
104
+ phone: {
105
+ area_code: 12,
106
+ number: "23456789"
107
+ },
108
+ documents: [
109
+ { type: 'CNPJ', value: '62057673000135' },
110
+ { type: 'CPF', value: '00242866131' }
111
+ ]
112
+ }
113
+ end
114
+
115
+ it 'name' do
116
+ expect(xml).to match %r[
117
+ <payment>
118
+ .*<sender>
119
+ .*<name>Alice</name>
120
+ ]xm
121
+ end
122
+
123
+ it 'email' do
124
+ expect(xml).to match %r[
125
+ <payment>
126
+ .*<sender>
127
+ .*<email>alice@example.com</email>
128
+ ]xm
129
+ end
130
+
131
+ it 'phone' do
132
+ expect(xml).to match %r[
133
+ <payment>
134
+ .*<sender>
135
+ .*<phone>
136
+ .*<areaCode>12</areaCode>
137
+ .*<number>23456789</number>
138
+ ]xm
139
+ end
140
+
141
+ it 'cpf' do
142
+ expect(xml).to match %r[
143
+ <payment>
144
+ .*<sender>
145
+ .*<documents>
146
+ .*<document>
147
+ .*<type>CPF</type>
148
+ .*<value>00242866131</value>
149
+ ]xm
150
+ end
151
+
152
+ it 'other documents' do
153
+ expect(xml).to match %r[
154
+ <payment>
155
+ .*<sender>
156
+ .*<documents>
157
+ .*<document>
158
+ .*<type>CNPJ</type>
159
+ .*<value>62057673000135</value>
160
+ .*</document>
161
+ .*<document>
162
+ .*<type>CPF</type>
163
+ .*<value>00242866131</value>
164
+ ]xm
165
+ end
166
+
167
+ it 'hash' do
168
+ expect(xml).to match %r[
169
+ <payment>
170
+ .*<sender>
171
+ .*<hash>hash1234</hash>
172
+ ]xm
173
+ end
174
+ end
62
175
  end
63
176
 
64
- before do
65
- transaction_request.items << build_item(1)
66
- transaction_request.items << build_item(2)
177
+ it 'should serialize currency' do
178
+ transaction_request.currency = 'BRL'
179
+
180
+ expect(xml).to match %r[
181
+ <payment>
182
+ .*<currency>BRL</currency>
183
+ ]xm
67
184
  end
68
185
 
69
- it_behaves_like "item serialization", 1
70
- it_behaves_like "item serialization", 2
71
- end
186
+ it 'should serialize notificationURL' do
187
+ transaction_request.notification_url = 'http://www1.example.com/'
72
188
 
73
- context "bank serialization" do
74
- before do
75
- allow(transaction_request).to receive(:bank) do
76
- PagSeguro::Bank.new({name: "itau"})
189
+ expect(xml).to match %r[
190
+ <payment>
191
+ .*<notificationURL>http://www1.example.com/</notificationURL>
192
+ ]xm
193
+ end
194
+
195
+ context "should serialize item's" do
196
+ before do
197
+ transaction_request.items << {
198
+ id: 123,
199
+ description: 'TV',
200
+ quantity: 300,
201
+ amount: 150
202
+ }
203
+ end
204
+
205
+ it 'id' do
206
+ expect(xml).to match %r[
207
+ <payment>
208
+ .*<items>
209
+ .*<item>
210
+ .*<id>123</id>
211
+ ]xm
212
+ end
213
+
214
+ it 'description' do
215
+ expect(xml).to match %r[
216
+ <payment>
217
+ .*<items>
218
+ .*<item>
219
+ .*<description>TV</description>
220
+ ]xm
221
+ end
222
+
223
+ it 'quantity' do
224
+ expect(xml).to match %r[
225
+ <payment>
226
+ .*<items>
227
+ .*<item>
228
+ .*<quantity>300</quantity>
229
+ ]xm
230
+ end
231
+
232
+ it 'amount' do
233
+ expect(xml).to match %r[
234
+ <payment>
235
+ .*<items>
236
+ .*<item>
237
+ .*<amount>150.00</amount>
238
+ ]xm
77
239
  end
78
240
  end
79
241
 
80
- it { expect(params).to include(bankName: "itau") }
81
- end
242
+ it 'should serialize empty extraAmount' do
243
+ transaction_request.extra_amount = nil
82
244
 
83
- context "holder serialization" do
84
- before do
85
- holder = PagSeguro::Holder.new({
86
- name: "Jose Comprador",
87
- birth_date: "27/10/1987",
88
- document: {
89
- type: "CPF",
90
- value: "22111944785"
91
- },
92
- phone: {
93
- area_code: "11",
94
- number: "56273440"
95
- }
96
- })
245
+ expect(xml).to match %r[
246
+ <payment>
247
+ .*<extraAmount>0.00</extraAmount>
248
+ ]xm
249
+ end
97
250
 
98
- allow(transaction_request).to receive(:holder).and_return(holder)
251
+ it 'should serialize extraAmount' do
252
+ transaction_request.extra_amount = 100
253
+
254
+ expect(xml).to match %r[
255
+ <payment>
256
+ .*<extraAmount>100.00</extraAmount>
257
+ ]xm
99
258
  end
100
259
 
101
- it { expect(params).to include(creditCardHolderName: "Jose Comprador") }
102
- it { expect(params).to include(creditCardHolderBirthDate: "27/10/1987") }
103
- it { expect(params).to include(creditCardHolderCPF: "22111944785") }
104
- it { expect(params).to include(creditCardHolderAreaCode: "11") }
105
- it { expect(params).to include(creditCardHolderPhone: "56273440") }
106
- end
260
+ it 'should serialize reference' do
261
+ transaction_request.reference = 'ref123'
107
262
 
108
- context "billing address serialization" do
109
- before do
110
- address = PagSeguro::Address.new({
111
- street: "STREET",
112
- state: "STATE",
113
- city: "CITY",
114
- postal_code: "POSTAL_CODE",
115
- district: "DISTRICT",
116
- number: "NUMBER",
117
- complement: "COMPLEMENT"
118
- })
263
+ expect(xml).to match %r[
264
+ <payment>
265
+ .*<reference>ref123</reference>
266
+ ]xm
267
+ end
268
+
269
+ context "should serialize address's" do
270
+ before do
271
+ transaction_request.shipping = PagSeguro::Shipping.new(
272
+ address: {
273
+ street: 'One Avenue',
274
+ number: 1234,
275
+ complement: '1st floor',
276
+ district: 'Somewhere',
277
+ city: 'Somewhere City',
278
+ state: 'ST',
279
+ country: 'BRA',
280
+ postal_code: '01234567'
281
+ }
282
+ )
283
+ end
284
+
285
+ it 'street' do
286
+ expect(xml).to match %r[
287
+ <payment>
288
+ .*<shipping>
289
+ .*<address>
290
+ .*<street>One.Avenue</street>
291
+ ]xm
292
+ end
293
+
294
+ it 'number' do
295
+ expect(xml).to match %r[
296
+ <payment>
297
+ .*<shipping>
298
+ .*<address>
299
+ .*<number>1234</number>
300
+ ]xm
301
+ end
302
+
303
+ it 'complement' do
304
+ expect(xml).to match %r[
305
+ <payment>
306
+ .*<shipping>
307
+ .*<address>
308
+ .*<complement>1st.floor</complement>
309
+ ]xm
310
+ end
311
+
312
+ it 'district' do
313
+ expect(xml).to match %r[
314
+ <payment>
315
+ .*<shipping>
316
+ .*<address>
317
+ .*<district>Somewhere</district>
318
+ ]xm
319
+ end
320
+
321
+ it 'city' do
322
+ expect(xml).to match %r[
323
+ <payment>
324
+ .*<shipping>
325
+ .*<address>
326
+ .*<city>Somewhere.City</city>
327
+ ]xm
328
+ end
329
+
330
+ it 'state' do
331
+ expect(xml).to match %r[
332
+ <payment>
333
+ .*<shipping>
334
+ .*<address>
335
+ .*<state>ST</state>
336
+ ]xm
337
+ end
338
+
339
+ it 'country' do
340
+ expect(xml).to match %r[
341
+ <payment>
342
+ .*<shipping>
343
+ .*<address>
344
+ .*<country>BRA</country>
345
+ ]xm
346
+ end
119
347
 
120
- allow(transaction_request).to receive(:billing_address).and_return(address)
348
+ it 'postalCode' do
349
+ expect(xml).to match %r[
350
+ <payment>
351
+ .*<shipping>
352
+ .*<address>
353
+ .*<postalCode>01234567</postalCode>
354
+ ]xm
355
+ end
121
356
  end
122
357
 
123
- it { expect(params).to include(billingAddressStreet: "STREET") }
124
- it { expect(params).to include(billingAddressCountry: "BRA") }
125
- it { expect(params).to include(billingAddressState: "STATE") }
126
- it { expect(params).to include(billingAddressCity: "CITY") }
127
- it { expect(params).to include(billingAddressPostalCode: "POSTAL_CODE") }
128
- it { expect(params).to include(billingAddressDistrict: "DISTRICT") }
129
- it { expect(params).to include(billingAddressNumber: "NUMBER") }
130
- it { expect(params).to include(billingAddressComplement: "COMPLEMENT") }
358
+ context "should serializer credit card info about" do
359
+ let(:transaction_request) do
360
+ PagSeguro::CreditCardTransactionRequest.new(
361
+ credit_card_token: 'tok123',
362
+ installment: {
363
+ quantity: 10,
364
+ value: 50
365
+ },
366
+ holder: {
367
+ name: 'John',
368
+ document: { type: 'CPF', value: '870' },
369
+ birth_date: '20/10/1980',
370
+ phone: { area_code: 11, number: 999991111 }
371
+ },
372
+ billing_address: {
373
+ street: 'Lima',
374
+ complement: '1 andar',
375
+ number: 1384,
376
+ district: 'Jardim Paulistano',
377
+ city: 'Sao Paulo',
378
+ state: 'SP',
379
+ country: 'BRA',
380
+ postal_code: '014',
381
+ }
382
+ )
383
+ end
384
+
385
+ before do
386
+ transaction_request.sender = { name: 'Alice' }
387
+ end
388
+
389
+ it 'token' do
390
+ expect(xml).to match %r[
391
+ <payment>
392
+ .*<creditCard>
393
+ .*<token>tok123</token>
394
+ ]xm
395
+ end
396
+
397
+ it 'installment' do
398
+ expect(xml).to match %r[
399
+ <payment>
400
+ .*<creditCard>
401
+ .*<installment>
402
+ .*<quantity>10</quantity>
403
+ .*<value>50.00
404
+ ]xm
405
+ end
406
+
407
+ it 'holder' do
408
+ expect(xml).to match %r[
409
+ <payment>
410
+ .*<creditCard>
411
+ .*<holder>
412
+ .*<name>John</name>
413
+ .*<documents>
414
+ .*<document>
415
+ .*<type>CPF</type>
416
+ .*<value>870</value>
417
+ .*</document>
418
+ .*</documents>
419
+ .*<birthDate>20/10/1980</birthDate>
420
+ .*<phone>
421
+ .*<areaCode>11</areaCode>
422
+ .*<number>999991111</number>
423
+ ]xm
424
+ end
425
+
426
+ it 'billingAddress' do
427
+ expect(xml).to match %r[
428
+ <payment>
429
+ .*<creditCard>
430
+ .*<billingAddress>
431
+ .*<street>Lima</street>
432
+ .*<number>1384</number>
433
+ .*<complement>1.andar</complement>
434
+ .*<district>Jardim.Paulistano</district>
435
+ .*<city>Sao.Paulo</city>
436
+ .*<state>SP</state>
437
+ .*<country>BRA</country>
438
+ .*<postalCode>014</postalCode>
439
+ ]xm
440
+ end
441
+ end
131
442
  end
132
443
 
133
- context "sender serialization" do
444
+ context '#to_params' do
445
+ let(:params) { subject.to_params }
446
+
134
447
  before do
135
- sender = PagSeguro::Sender.new({
136
- hash: "HASH",
137
- email: "EMAIL",
138
- name: "NAME",
139
- cpf: "CPF",
140
- phone: {
141
- area_code: "AREA_CODE",
142
- number: "NUMBER"
143
- }
448
+ allow(transaction_request).to receive_messages({
449
+ payment_method: "creditCard",
450
+ credit_card_token: "4as56d4a56d456as456dsa"
144
451
  })
452
+ end
145
453
 
146
- allow(transaction_request).to receive(:sender).and_return(sender)
454
+ context "global configuration serialization" do
455
+ before do
456
+ PagSeguro.configuration.receiver_email = "receiver@example.com"
457
+ end
458
+
459
+ it { expect(params).to include(receiverEmail: "receiver@example.com") }
147
460
  end
148
461
 
149
- it { expect(params).to include(senderHash: "HASH") }
150
- it { expect(params).to include(senderEmail: "EMAIL") }
151
- it { expect(params).to include(senderName: "NAME") }
152
- it { expect(params).to include(senderCPF: "CPF") }
153
- it { expect(params).to include(senderAreaCode: "AREA_CODE") }
154
- it { expect(params).to include(senderPhone: "NUMBER") }
155
- end
462
+ context "generic attributes serialization" do
463
+ before do
464
+ allow(transaction_request).to receive_messages({
465
+ currency: "BRL",
466
+ reference: "REF123",
467
+ extra_amount: 1234.50,
468
+ notification_url: "NOTIFICATION_URL",
469
+ payment_mode: "default"
470
+ })
471
+ end
156
472
 
157
- context "shipping serialization" do
158
- before do
159
- transaction_request.shipping = PagSeguro::Shipping.new({
160
- type_id: 1,
161
- cost: 1234.56,
162
- address: {
473
+ it { expect(params).to include(currency: "BRL") }
474
+ it { expect(params).to include(reference: "REF123") }
475
+ it { expect(params).to include(extraAmount: "1234.50") }
476
+ it { expect(params).to include(notificationURL: "NOTIFICATION_URL") }
477
+ it { expect(params).to include(paymentMethod: "creditCard") }
478
+ it { expect(params).to include(paymentMode: "default") }
479
+ it { expect(params).to include(creditCardToken: "4as56d4a56d456as456dsa") }
480
+ end
481
+
482
+ context "items serialization" do
483
+ def build_item(index)
484
+ PagSeguro::Item.new({
485
+ id: "ID#{index}",
486
+ description: "DESC#{index}",
487
+ quantity: "QTY#{index}",
488
+ amount: index * 100 + 0.12,
489
+ weight: "WEIGHT#{index}",
490
+ shipping_cost: index * 100 + 0.34
491
+ })
492
+ end
493
+
494
+ shared_examples_for "item serialization" do |index|
495
+ it { expect(params).to include("itemId#{index}" => "ID#{index}") }
496
+ it { expect(params).to include("itemDescription#{index}" => "DESC#{index}") }
497
+ it { expect(params).to include("itemAmount#{index}" => "#{index}00.12") }
498
+ it { expect(params).to include("itemShippingCost#{index}" => "#{index}00.34") }
499
+ it { expect(params).to include("itemQuantity#{index}" => "QTY#{index}") }
500
+ it { expect(params).to include("itemWeight#{index}" => "WEIGHT#{index}") }
501
+ end
502
+
503
+ before do
504
+ transaction_request.items << build_item(1)
505
+ transaction_request.items << build_item(2)
506
+ end
507
+
508
+ it_behaves_like "item serialization", 1
509
+ it_behaves_like "item serialization", 2
510
+ end
511
+
512
+ context "bank serialization" do
513
+ before do
514
+ allow(transaction_request).to receive(:bank) do
515
+ PagSeguro::Bank.new({name: "itau"})
516
+ end
517
+ end
518
+
519
+ it { expect(params).to include(bankName: "itau") }
520
+ end
521
+
522
+ context "holder serialization" do
523
+ before do
524
+ holder = PagSeguro::Holder.new({
525
+ name: "Jose Comprador",
526
+ birth_date: "27/10/1987",
527
+ document: {
528
+ type: "CPF",
529
+ value: "22111944785"
530
+ },
531
+ phone: {
532
+ area_code: "11",
533
+ number: "56273440"
534
+ }
535
+ })
536
+
537
+ allow(transaction_request).to receive(:holder).and_return(holder)
538
+ end
539
+
540
+ it { expect(params).to include(creditCardHolderName: "Jose Comprador") }
541
+ it { expect(params).to include(creditCardHolderBirthDate: "27/10/1987") }
542
+ it { expect(params).to include(creditCardHolderCPF: "22111944785") }
543
+ it { expect(params).to include(creditCardHolderAreaCode: "11") }
544
+ it { expect(params).to include(creditCardHolderPhone: "56273440") }
545
+ end
546
+
547
+ context "billing address serialization" do
548
+ before do
549
+ address = PagSeguro::Address.new({
163
550
  street: "STREET",
164
551
  state: "STATE",
165
552
  city: "CITY",
@@ -167,47 +554,124 @@ describe PagSeguro::TransactionRequest::RequestSerializer do
167
554
  district: "DISTRICT",
168
555
  number: "NUMBER",
169
556
  complement: "COMPLEMENT"
170
- }
171
- })
557
+ })
558
+
559
+ allow(transaction_request).to receive(:billing_address).and_return(address)
560
+ end
561
+
562
+ it { expect(params).to include(billingAddressStreet: "STREET") }
563
+ it { expect(params).to include(billingAddressCountry: "BRA") }
564
+ it { expect(params).to include(billingAddressState: "STATE") }
565
+ it { expect(params).to include(billingAddressCity: "CITY") }
566
+ it { expect(params).to include(billingAddressPostalCode: "POSTAL_CODE") }
567
+ it { expect(params).to include(billingAddressDistrict: "DISTRICT") }
568
+ it { expect(params).to include(billingAddressNumber: "NUMBER") }
569
+ it { expect(params).to include(billingAddressComplement: "COMPLEMENT") }
172
570
  end
173
571
 
174
- it { expect(params).to include(shippingType: 1) }
175
- it { expect(params).to include(shippingCost: "1234.56") }
176
- it { expect(params).to include(shippingAddressStreet: "STREET") }
177
- it { expect(params).to include(shippingAddressCountry: "BRA") }
178
- it { expect(params).to include(shippingAddressState: "STATE") }
179
- it { expect(params).to include(shippingAddressCity: "CITY") }
180
- it { expect(params).to include(shippingAddressPostalCode: "POSTAL_CODE") }
181
- it { expect(params).to include(shippingAddressDistrict: "DISTRICT") }
182
- it { expect(params).to include(shippingAddressNumber: "NUMBER") }
183
- it { expect(params).to include(shippingAddressComplement: "COMPLEMENT") }
184
- end
572
+ context "sender serialization with CPF" do
573
+ before do
574
+ sender = PagSeguro::Sender.new({
575
+ hash: "HASH",
576
+ email: "EMAIL",
577
+ name: "NAME",
578
+ document: { type: "CPF", value: "CPF" },
579
+ phone: {
580
+ area_code: "AREA_CODE",
581
+ number: "NUMBER"
582
+ }
583
+ })
185
584
 
186
- context "installment serialization" do
187
- before do
188
- installment = PagSeguro::TransactionInstallment.new({
189
- value: "459.50",
190
- quantity: "1"
191
- })
585
+ allow(transaction_request).to receive(:sender).and_return(sender)
586
+ end
192
587
 
193
- allow(transaction_request).to receive(:installment).and_return(installment)
588
+ it { expect(params).to include(senderHash: "HASH") }
589
+ it { expect(params).to include(senderEmail: "EMAIL") }
590
+ it { expect(params).to include(senderName: "NAME") }
591
+ it { expect(params).to include(senderCPF: "CPF") }
592
+ it { expect(params).to include(senderAreaCode: "AREA_CODE") }
593
+ it { expect(params).to include(senderPhone: "NUMBER") }
194
594
  end
195
595
 
196
- it { expect(params).to include(installmentValue: "459.50") }
197
- it { expect(params).to include(installmentQuantity: "1") }
198
- end
596
+ context "sender serialization with CNPJ" do
597
+ before do
598
+ sender = PagSeguro::Sender.new({
599
+ hash: "HASH",
600
+ email: "EMAIL",
601
+ name: "NAME",
602
+ document: { type: "CNPJ", value: "CNPJ" },
603
+ phone: {
604
+ area_code: "AREA_CODE",
605
+ number: "NUMBER"
606
+ }
607
+ })
199
608
 
200
- context "extra params serialization" do
201
- before do
202
- allow(transaction_request).to receive_messages({
203
- extra_params: [
204
- { extraParam: 'param_value' },
205
- { newExtraParam: 'extra_param_value' }
206
- ]
207
- })
609
+ allow(transaction_request).to receive(:sender).and_return(sender)
610
+ end
611
+
612
+ it { expect(params).to include(senderHash: "HASH") }
613
+ it { expect(params).to include(senderEmail: "EMAIL") }
614
+ it { expect(params).to include(senderName: "NAME") }
615
+ it { expect(params).to include(senderCNPJ: "CNPJ") }
616
+ it { expect(params).to include(senderAreaCode: "AREA_CODE") }
617
+ it { expect(params).to include(senderPhone: "NUMBER") }
618
+ end
619
+
620
+ context "shipping serialization" do
621
+ before do
622
+ transaction_request.shipping = PagSeguro::Shipping.new({
623
+ type_id: 1,
624
+ cost: 1234.56,
625
+ address: {
626
+ street: "STREET",
627
+ state: "STATE",
628
+ city: "CITY",
629
+ postal_code: "POSTAL_CODE",
630
+ district: "DISTRICT",
631
+ number: "NUMBER",
632
+ complement: "COMPLEMENT"
633
+ }
634
+ })
635
+ end
636
+
637
+ it { expect(params).to include(shippingType: 1) }
638
+ it { expect(params).to include(shippingCost: "1234.56") }
639
+ it { expect(params).to include(shippingAddressStreet: "STREET") }
640
+ it { expect(params).to include(shippingAddressCountry: "BRA") }
641
+ it { expect(params).to include(shippingAddressState: "STATE") }
642
+ it { expect(params).to include(shippingAddressCity: "CITY") }
643
+ it { expect(params).to include(shippingAddressPostalCode: "POSTAL_CODE") }
644
+ it { expect(params).to include(shippingAddressDistrict: "DISTRICT") }
645
+ it { expect(params).to include(shippingAddressNumber: "NUMBER") }
646
+ it { expect(params).to include(shippingAddressComplement: "COMPLEMENT") }
208
647
  end
209
648
 
210
- it { expect(params).to include(extraParam: 'param_value') }
211
- it { expect(params).to include(newExtraParam: 'extra_param_value') }
649
+ context "installment serialization" do
650
+ before do
651
+ installment = PagSeguro::TransactionInstallment.new({
652
+ value: "459.50",
653
+ quantity: "1"
654
+ })
655
+
656
+ allow(transaction_request).to receive(:installment).and_return(installment)
657
+ end
658
+
659
+ it { expect(params).to include(installmentValue: "459.50") }
660
+ it { expect(params).to include(installmentQuantity: "1") }
661
+ end
662
+
663
+ context "extra params serialization" do
664
+ before do
665
+ allow(transaction_request).to receive_messages({
666
+ extra_params: [
667
+ { extraParam: 'param_value' },
668
+ { newExtraParam: 'extra_param_value' }
669
+ ]
670
+ })
671
+ end
672
+
673
+ it { expect(params).to include(extraParam: 'param_value') }
674
+ it { expect(params).to include(newExtraParam: 'extra_param_value') }
675
+ end
212
676
  end
213
677
  end