mymoip 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +75 -22
- data/lib/mymoip/bank_debit.rb +22 -0
- data/lib/mymoip/credit_card.rb +20 -6
- data/lib/mymoip/exceptions.rb +2 -0
- data/lib/mymoip/payment.rb +10 -0
- data/lib/mymoip/payments/bank_debit_payment.rb +27 -0
- data/lib/mymoip/{credit_card_payment.rb → payments/credit_card_payment.rb} +1 -1
- data/lib/mymoip/payments/payment_slip_payment.rb +12 -0
- data/lib/mymoip/requests/payment_request.rb +15 -6
- data/lib/mymoip/version.rb +1 -1
- data/test/fixtures/fixture.rb +5 -1
- data/test/fixtures/vcr_cassettes/payment_request_with_payment_slip.yml +32 -0
- data/test/lib/test_bank_debit.rb +36 -0
- data/test/lib/test_bank_debit_payment.rb +32 -0
- data/test/lib/test_creditcard.rb +43 -9
- data/test/lib/test_payment.rb +15 -0
- data/test/lib/test_payment_request.rb +24 -0
- data/test/lib/test_payment_slip_payment.rb +8 -0
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7770df829260624c7e35e953fec04f41bb89a57
|
4
|
+
data.tar.gz: ba6208e1363b11bc1e2ed072780ece03459404d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3db1554c59dc131a3a5b8a682103ffd33acf9d36a65c1019b83bb4330bb6085e05b02803d6c458e35258f21e466fd90832c124af0a6f7f81dec82b893fa21e10
|
7
|
+
data.tar.gz: b023b1b7cef15c1be9320016a57e45efe533c2b813b3d3ae5e9bcfd8e8425e4c9a926bcf458c1a8f4098e0a4ce9310a882aabc15b9538de743d5c48174779364
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.8.0
|
4
|
+
|
5
|
+
* Perform optional extra validations in CreditCard. (by @hugomaiavieira)
|
6
|
+
* Fix regex for CreditCard#expiration_date validation. (by @hugomaiavieira)
|
7
|
+
* Accept payments by bank debit. (by @hugomaiavieira)
|
8
|
+
* Accept payments by payment slip aka boleto. (by @hugomaiavieira)
|
9
|
+
* Fix missing forward of PaymentRequest#api_call options to Request's
|
10
|
+
implementation. (by @hugomaiavieira)
|
11
|
+
* Accept to set invalid owner_birthday in CreditCard. (by @hugomaiavieira)
|
12
|
+
|
3
13
|
## 0.7.0
|
4
14
|
|
5
15
|
* Allow payments using redirection to Moip's domain. (by @oznek)
|
data/README.md
CHANGED
@@ -85,12 +85,12 @@ purchase = MyMoip::Purchase.new(
|
|
85
85
|
payer: payer_attrs
|
86
86
|
)
|
87
87
|
purchase.checkout! # => true OR false (succesfull state)
|
88
|
-
purchase.code
|
88
|
+
purchase.code # Moip code or nil, depending of the checkout's return
|
89
89
|
```
|
90
90
|
|
91
91
|
## The hard way
|
92
92
|
|
93
|
-
|
93
|
+
### First request: what and from who
|
94
94
|
|
95
95
|
```ruby
|
96
96
|
payer = MyMoip::Payer.new(
|
@@ -119,33 +119,70 @@ transparent_request = MyMoip::TransparentRequest.new('your_logging_id')
|
|
119
119
|
transparent_request.api_call(instruction)
|
120
120
|
```
|
121
121
|
|
122
|
-
|
122
|
+
### Second request: how
|
123
|
+
|
124
|
+
#### Credit card
|
123
125
|
|
124
126
|
```ruby
|
125
127
|
credit_card = MyMoip::CreditCard.new(
|
126
|
-
logo:
|
127
|
-
card_number:
|
128
|
-
expiration_date:
|
129
|
-
security_code:
|
130
|
-
owner_name:
|
131
|
-
owner_birthday:
|
132
|
-
owner_phone:
|
133
|
-
owner_cpf:
|
128
|
+
logo: 'visa',
|
129
|
+
card_number: '4916654211627608',
|
130
|
+
expiration_date: '06/15',
|
131
|
+
security_code: '000',
|
132
|
+
owner_name: 'Juquinha da Rocha',
|
133
|
+
owner_birthday: '03/11/1984',
|
134
|
+
owner_phone: '5130405060',
|
135
|
+
owner_cpf: '52211670695',
|
136
|
+
perform_extra_validation: true # optional: see the next sub section
|
134
137
|
)
|
135
138
|
|
136
|
-
credit_card_payment = MyMoip::CreditCardPayment.new(credit_card,
|
137
|
-
|
138
|
-
payment_request
|
139
|
-
|
140
|
-
|
139
|
+
credit_card_payment = MyMoip::CreditCardPayment.new(credit_card, installments: 1)
|
140
|
+
payment_request = MyMoip::PaymentRequest.new('your_logging_id')
|
141
|
+
payment_request.api_call(credit_card_payment, token: transparent_request.token)
|
142
|
+
```
|
143
|
+
|
144
|
+
##### Credit card extra validation
|
145
|
+
|
146
|
+
There is a already [reported](http://goo.gl/celJIZ) bug that the API don't requires some attributes returning a successful [response](https://gist.github.com/Irio/4032350). To "fix it" you can enable an extra validation with `perform_extra_validation` option. It will require the presence of all credit card attributes.
|
147
|
+
|
148
|
+
|
149
|
+
#### Payment slip (aka boleto)
|
150
|
+
|
151
|
+
```ruby
|
152
|
+
payment_slip_payment = MyMoip::PaymentSlipPayment.new()
|
153
|
+
payment_request = MyMoip::PaymentRequest.new('your_logging_id')
|
154
|
+
payment_request.api_call(payment_slip_payment, token: transparent_request.token)
|
141
155
|
```
|
142
156
|
|
143
|
-
|
157
|
+
#### Bank debit
|
158
|
+
|
159
|
+
```ruby
|
160
|
+
bank_debit = MyMoip::BankDebit.new(bank: :itau)
|
161
|
+
# you can find the available banks on MyMoip::BankDebit::AVAILABLE_BANKS
|
162
|
+
|
163
|
+
bank_debit_payment = MyMoip::BankDebitPayment.new(bank_debit)
|
164
|
+
payment_request = MyMoip::PaymentRequest.new('your_logging_id')
|
165
|
+
payment_request.api_call(bank_debit_payment, token: transparent_request.token)
|
166
|
+
```
|
167
|
+
|
168
|
+
### Success?
|
144
169
|
|
145
170
|
```ruby
|
146
171
|
payment_request.success?
|
147
172
|
```
|
148
173
|
|
174
|
+
### Payment url
|
175
|
+
|
176
|
+
For **payment slip** and **bank debit**, payment request will have a url. This
|
177
|
+
url redirect to:
|
178
|
+
|
179
|
+
- When **payment slip**: the payment slip to user print and pay
|
180
|
+
- When **bank debit**: the bank's specific payment page
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
payment_request.url
|
184
|
+
```
|
185
|
+
|
149
186
|
## More!
|
150
187
|
|
151
188
|
Yes, you should read (and help improve!) the docs.
|
@@ -213,7 +250,7 @@ instruction = MyMoip::Instruction.new(
|
|
213
250
|
### Notification and return URLs
|
214
251
|
|
215
252
|
URLs configured at MoIP account can be overrided by passing new URLs values to the instruction object.
|
216
|
-
A notification URL is used for MoIP NASP notification system, responsible for transaction changes signals,
|
253
|
+
A notification URL is used for MoIP NASP notification system, responsible for transaction changes signals,
|
217
254
|
and a return URL is used to return to your website when a payment is using external websites.
|
218
255
|
|
219
256
|
```ruby
|
@@ -229,7 +266,7 @@ instruction = MyMoip::Instruction.new(
|
|
229
266
|
|
230
267
|
### Payment methods configuration
|
231
268
|
|
232
|
-
If you don't need all the payment methods available, you can choose some by configuring
|
269
|
+
If you don't need all the payment methods available, you can choose some by configuring
|
233
270
|
PaymentMethods and adding it to the instruction:
|
234
271
|
|
235
272
|
```ruby
|
@@ -238,7 +275,7 @@ payment_methods = MyMoip::PaymentMethods.new(
|
|
238
275
|
credit_card: true,
|
239
276
|
debit: true,
|
240
277
|
debit_card: true,
|
241
|
-
financing: true,
|
278
|
+
financing: true,
|
242
279
|
moip_wallet: true
|
243
280
|
)
|
244
281
|
|
@@ -251,7 +288,7 @@ instruction = MyMoip::Instruction.new(
|
|
251
288
|
)
|
252
289
|
```
|
253
290
|
|
254
|
-
### Payment slip (aka boleto) configuration
|
291
|
+
### Payment slip (aka boleto) configuration
|
255
292
|
|
256
293
|
You can optionally configure your payment slip creating a PaymentSlip and adding to the instruction:
|
257
294
|
|
@@ -265,7 +302,7 @@ payment_slip = MyMoip::PaymentSlip.new(
|
|
265
302
|
instruction_line_3: 'This is a test! :)',
|
266
303
|
logo_url: 'https://example.com/logo.png'
|
267
304
|
)
|
268
|
-
|
305
|
+
|
269
306
|
instruction = MyMoip::Instruction.new(
|
270
307
|
id: 'instruction_id_defined_by_you',
|
271
308
|
payment_reason: 'Order in Buy Everything Store',
|
@@ -283,6 +320,22 @@ A payment slip can have the following attributes:
|
|
283
320
|
* instruction_line_1, instruction_line_2, instruction_line_3: lines of instruction (up to 63 characters each), added to the payment slip.
|
284
321
|
* logo_url: an URL pointing to an image which will be added to the body of the payment slip.
|
285
322
|
|
323
|
+
### Logger
|
324
|
+
|
325
|
+
The methods that make api calls to Moip, log request and response informations. The default logger is `Logger.new(STDOUT)`, but you can set the logger you want as `api_call` option. For instance:
|
326
|
+
|
327
|
+
``` ruby
|
328
|
+
request = MyMoip::PaymentRequest.new('some-id')
|
329
|
+
request.api_call(data, token: 'some-token', logger: Rails.logger)
|
330
|
+
```
|
331
|
+
|
332
|
+
You can configure the logger globally too:
|
333
|
+
|
334
|
+
``` ruby
|
335
|
+
MyMoip.logger = Rails.logger
|
336
|
+
```
|
337
|
+
|
338
|
+
|
286
339
|
## Going alive!
|
287
340
|
|
288
341
|
If you are ready to get your application using MyMoip approved by MoIP or already have valid production keys, you can read a specific [documentation](https://github.com/Irio/mymoip/wiki/Going-alive).
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module MyMoip
|
2
|
+
class BankDebit
|
3
|
+
include ActiveModel::Validations
|
4
|
+
|
5
|
+
attr_accessor :bank
|
6
|
+
|
7
|
+
AVAILABLE_BANKS = [:banco_do_brasil, :bradesco, :banrisul, :itau]
|
8
|
+
|
9
|
+
validates :bank, presence: true, inclusion: AVAILABLE_BANKS
|
10
|
+
|
11
|
+
def initialize(attrs)
|
12
|
+
attrs.each do |attr, value|
|
13
|
+
public_send(:"#{attr}=", value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def bank=(value)
|
18
|
+
value = value.to_sym unless value.nil?
|
19
|
+
@bank = value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/mymoip/credit_card.rb
CHANGED
@@ -3,7 +3,8 @@ module MyMoip
|
|
3
3
|
include ActiveModel::Validations
|
4
4
|
|
5
5
|
attr_accessor :logo, :card_number, :expiration_date, :security_code,
|
6
|
-
|
6
|
+
:owner_name, :owner_birthday, :owner_phone, :owner_cpf,
|
7
|
+
:perform_extra_validation
|
7
8
|
|
8
9
|
AVAILABLE_LOGOS = [
|
9
10
|
:american_express, :diners, :hipercard, :mastercard, :visa
|
@@ -12,8 +13,13 @@ module MyMoip
|
|
12
13
|
validates_presence_of :logo, :security_code
|
13
14
|
validates_length_of :owner_phone, within: 10..11, allow_nil: true
|
14
15
|
validates_length_of :security_code, within: 3..4
|
15
|
-
validates_format_of :expiration_date, with: /\A(?:(?:0[1-9])|(?:1[
|
16
|
+
validates_format_of :expiration_date, with: /\A(?:(?:0[1-9])|(?:1[0-2]))\/\d{2}\Z/ # %m/%y
|
16
17
|
validates_inclusion_of :logo, in: AVAILABLE_LOGOS
|
18
|
+
validate :owner_birthday_format
|
19
|
+
validates_presence_of :card_number, :expiration_date, :owner_name,
|
20
|
+
:owner_phone, :owner_cpf,
|
21
|
+
if: ->(resource) { resource.perform_extra_validation }
|
22
|
+
|
17
23
|
|
18
24
|
def initialize(attrs)
|
19
25
|
attrs.each do |attr, value|
|
@@ -27,10 +33,9 @@ module MyMoip
|
|
27
33
|
end
|
28
34
|
|
29
35
|
def owner_birthday=(value)
|
30
|
-
unless value.nil?
|
31
|
-
|
32
|
-
|
33
|
-
@owner_birthday = value
|
36
|
+
value = Date.parse(value.to_s) unless value.nil?
|
37
|
+
rescue ArgumentError; ensure
|
38
|
+
@owner_birthday = value
|
34
39
|
end
|
35
40
|
|
36
41
|
def owner_phone=(value)
|
@@ -55,5 +60,14 @@ module MyMoip
|
|
55
60
|
end
|
56
61
|
@owner_cpf = value
|
57
62
|
end
|
63
|
+
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def owner_birthday_format
|
68
|
+
Date.parse(owner_birthday.to_s) unless owner_birthday.nil?
|
69
|
+
rescue ArgumentError
|
70
|
+
errors.add(:owner_birthday)
|
71
|
+
end
|
58
72
|
end
|
59
73
|
end
|
data/lib/mymoip/exceptions.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module MyMoip
|
2
|
+
class BankDebitPayment < Payment
|
3
|
+
attr_accessor :bank_debit
|
4
|
+
|
5
|
+
def initialize(bank_debit)
|
6
|
+
@bank_debit = bank_debit
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_json
|
10
|
+
raise InvalidBankDebit, "No bank debit information provided." if @bank_debit.nil?
|
11
|
+
raise InvalidBankDebit if @bank_debit.invalid?
|
12
|
+
|
13
|
+
json = {
|
14
|
+
Forma: "DebitoBancario",
|
15
|
+
}
|
16
|
+
|
17
|
+
json[:Instituicao] = {
|
18
|
+
banco_do_brasil: "BancoDoBrasil",
|
19
|
+
bradesco: "Bradesco",
|
20
|
+
banrisul: "Banrisul",
|
21
|
+
itau: "Itau"
|
22
|
+
}.fetch(@bank_debit.bank)
|
23
|
+
|
24
|
+
json
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,19 +1,24 @@
|
|
1
1
|
module MyMoip
|
2
2
|
class PaymentRequest < Request
|
3
3
|
|
4
|
-
HTTP_METHOD
|
5
|
-
PATH
|
6
|
-
REQUIRES_AUTH
|
7
|
-
FORMAT
|
4
|
+
HTTP_METHOD = :get
|
5
|
+
PATH = "/rest/pagamento?callback=?"
|
6
|
+
REQUIRES_AUTH = false
|
7
|
+
FORMAT = :json
|
8
|
+
PAYMENT_SLIP_PATH = "/Instrucao.do?token="
|
9
|
+
|
10
|
+
attr_reader :token
|
8
11
|
|
9
12
|
def api_call(data, opts)
|
13
|
+
@token = opts[:token]
|
14
|
+
|
10
15
|
opts[:referer_url] ||= MyMoip.default_referer_url
|
11
16
|
opts[:parser] ||= MyMoip::JsonParser
|
12
17
|
|
13
18
|
json = JSON.generate({
|
14
19
|
pagamentoWidget: {
|
15
20
|
referer: opts[:referer_url],
|
16
|
-
token:
|
21
|
+
token: token,
|
17
22
|
dadosPagamento: data.to_json
|
18
23
|
}
|
19
24
|
})
|
@@ -27,13 +32,17 @@ module MyMoip
|
|
27
32
|
}
|
28
33
|
params[:parser] = opts.delete(:parser) unless opts[:parser].nil?
|
29
34
|
|
30
|
-
super(params)
|
35
|
+
super(params, opts)
|
31
36
|
end
|
32
37
|
|
33
38
|
def success?
|
34
39
|
@response && @response["StatusPagamento"] == "Sucesso"
|
35
40
|
end
|
36
41
|
|
42
|
+
def url
|
43
|
+
MyMoip.api_url + PAYMENT_SLIP_PATH + token if success?
|
44
|
+
end
|
45
|
+
|
37
46
|
def code
|
38
47
|
@response["CodigoMoIP"]
|
39
48
|
rescue NoMethodError => e
|
data/lib/mymoip/version.rb
CHANGED
data/test/fixtures/fixture.rb
CHANGED
@@ -63,7 +63,11 @@ class Fixture
|
|
63
63
|
instruction_line_3: 'Line 3',
|
64
64
|
logo_url: 'http://www.myurl.com/logo.png'
|
65
65
|
}.merge(params)
|
66
|
-
|
67
66
|
MyMoip::PaymentSlip.new(params)
|
68
67
|
end
|
68
|
+
|
69
|
+
def self.bank_debit(params = {})
|
70
|
+
params = { bank: :itau }.merge(params)
|
71
|
+
MyMoip::BankDebit.new(params)
|
72
|
+
end
|
69
73
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://YOUR_MOIP_TOKEN:YOUR_MOIP_KEY@desenvolvedor.moip.com.br/sandbox/rest/pagamento?callback=?&pagamentoWidget=%7B%22pagamentoWidget%22:%7B%22referer%22:%22http://localhost/default%22,%22token%22:%22D2O0U1W2K1P1D1R2C2E3H0N3L5X3A2E4E3X0X030T090T0A1D1V2T8X500E3%22,%22dadosPagamento%22:%7B%22Forma%22:%22BoletoBancario%22%7D%7D%7D
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Date:
|
16
|
+
- Tue, 24 Sep 2013 13:46:21 GMT
|
17
|
+
Server:
|
18
|
+
- Apache
|
19
|
+
Content-Length:
|
20
|
+
- '92'
|
21
|
+
Vary:
|
22
|
+
- Accept-Encoding
|
23
|
+
Content-Type:
|
24
|
+
- application/json
|
25
|
+
body:
|
26
|
+
encoding: ASCII-8BIT
|
27
|
+
string: !binary |-
|
28
|
+
Pyh7IkNvZGlnbyI6MCwiU3RhdHVzUGFnYW1lbnRvIjoiU3VjZXNzbyIsIk1l
|
29
|
+
bnNhZ2VtIjoiUmVxdWlzaW8gcHJvY2Vzc2FkYSBjb20gc3VjZXNzbyJ9KQ==
|
30
|
+
http_version:
|
31
|
+
recorded_at: Tue, 24 Sep 2013 13:46:22 GMT
|
32
|
+
recorded_with: VCR 2.5.0
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class TestBankDebit < Test::Unit::TestCase
|
4
|
+
def test_initialization_and_setters
|
5
|
+
subject = MyMoip::BankDebit.new(bank: :itau)
|
6
|
+
assert_equal :itau, subject.bank
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_initialization_and_setters_with_string_keys
|
10
|
+
subject = MyMoip::BankDebit.new('bank' => :itau)
|
11
|
+
assert_equal :itau, subject.bank
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_validate_presence_of_bank_attribute
|
15
|
+
subject = Fixture.bank_debit(bank: nil)
|
16
|
+
assert subject.invalid? && subject.errors[:bank].present?,
|
17
|
+
'should be invalid without a bank name'
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_converts_bank_string_to_symbol
|
21
|
+
subject = Fixture.bank_debit(bank: "itau")
|
22
|
+
assert_equal :itau, subject.bank
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_accepts_any_bank_from_available_banks_constant
|
26
|
+
MyMoip::BankDebit::AVAILABLE_BANKS.each do |bank|
|
27
|
+
subject = Fixture.bank_debit(bank: bank)
|
28
|
+
assert subject.valid?, 'should be valid'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_dont_accept_bank_out_of_available_banks_constant
|
33
|
+
subject = Fixture.bank_debit(bank: :unavailable_bank)
|
34
|
+
assert subject.invalid? && subject.errors[:bank].present?, 'should not be valid'
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class TestBankDebitPayment < Test::Unit::TestCase
|
4
|
+
def test_initialization_and_setters
|
5
|
+
bank_debit = Fixture.bank_debit
|
6
|
+
subject = MyMoip::BankDebitPayment.new(bank_debit)
|
7
|
+
assert_equal bank_debit, subject.bank_debit
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_json_format
|
11
|
+
payment = MyMoip::BankDebitPayment.new(Fixture.bank_debit)
|
12
|
+
assert_equal "DebitoBancario", payment.to_json[:Forma]
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_to_json_should_accept_any_bank_from_available_banks_constant
|
16
|
+
MyMoip::BankDebit::AVAILABLE_BANKS.each do |bank|
|
17
|
+
payment = MyMoip::BankDebitPayment.new(Fixture.bank_debit(bank: bank))
|
18
|
+
assert_nothing_raised(KeyError) { payment.to_json }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_to_json_method_raises_an_exception_when_called_without_a_bank_debit
|
23
|
+
subject = MyMoip::BankDebitPayment.new(nil)
|
24
|
+
assert_raise(MyMoip::InvalidBankDebit) { subject.to_json }
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_to_json_method_raises_an_exception_when_called_with_a_invalid_bank_debit
|
28
|
+
subject = MyMoip::BankDebitPayment.new(Fixture.bank_debit)
|
29
|
+
MyMoip::BankDebit.any_instance.stubs(:invalid?).returns(true)
|
30
|
+
assert_raise(MyMoip::InvalidBankDebit) { subject.to_json }
|
31
|
+
end
|
32
|
+
end
|
data/test/lib/test_creditcard.rb
CHANGED
@@ -10,7 +10,8 @@ class TestCreditCard < Test::Unit::TestCase
|
|
10
10
|
owner_name: "Juquinha da Rocha",
|
11
11
|
owner_birthday: Date.new(1984, 11, 3),
|
12
12
|
owner_phone: "5130405060",
|
13
|
-
owner_cpf: "522.116.706-95"
|
13
|
+
owner_cpf: "522.116.706-95",
|
14
|
+
perform_extra_validation: true
|
14
15
|
)
|
15
16
|
|
16
17
|
assert_equal :visa, subject.logo
|
@@ -21,18 +22,20 @@ class TestCreditCard < Test::Unit::TestCase
|
|
21
22
|
assert_equal Date.new(1984, 11, 3), subject.owner_birthday
|
22
23
|
assert_equal "5130405060", subject.owner_phone
|
23
24
|
assert_equal "52211670695", subject.owner_cpf
|
25
|
+
assert_equal true, subject.perform_extra_validation
|
24
26
|
end
|
25
27
|
|
26
28
|
def test_initialization_and_setters_with_string_keys
|
27
29
|
subject = MyMoip::CreditCard.new(
|
28
|
-
'logo'
|
29
|
-
'card_number'
|
30
|
-
'expiration_date'
|
31
|
-
'security_code'
|
32
|
-
'owner_name'
|
33
|
-
'owner_birthday'
|
34
|
-
'owner_phone'
|
35
|
-
'owner_cpf'
|
30
|
+
'logo' => :visa,
|
31
|
+
'card_number' => '4916654211627608',
|
32
|
+
'expiration_date' => '06/15',
|
33
|
+
'security_code' => '000',
|
34
|
+
'owner_name' => 'Juquinha da Rocha',
|
35
|
+
'owner_birthday' => Date.new(1984, 11, 3),
|
36
|
+
'owner_phone' => '5130405060',
|
37
|
+
'owner_cpf' => '522.116.706-95',
|
38
|
+
'perform_extra_validation' => false
|
36
39
|
)
|
37
40
|
|
38
41
|
assert_equal :visa, subject.logo
|
@@ -43,6 +46,7 @@ class TestCreditCard < Test::Unit::TestCase
|
|
43
46
|
assert_equal Date.new(1984, 11, 3), subject.owner_birthday
|
44
47
|
assert_equal "5130405060", subject.owner_phone
|
45
48
|
assert_equal "52211670695", subject.owner_cpf
|
49
|
+
assert_equal false, subject.perform_extra_validation
|
46
50
|
end
|
47
51
|
|
48
52
|
def test_validate_presence_of_logo_attribute
|
@@ -58,6 +62,19 @@ class TestCreditCard < Test::Unit::TestCase
|
|
58
62
|
assert_equal Date.new(1980, 12, 20), subject.owner_birthday
|
59
63
|
end
|
60
64
|
|
65
|
+
def test_owner_birthday_accepts_input_of_invalid_dates
|
66
|
+
subject = Fixture.credit_card
|
67
|
+
subject.owner_birthday = '50/12/1980'
|
68
|
+
assert_equal '50/12/1980', subject.owner_birthday
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_validate_format_of_birthday_date
|
72
|
+
subject = Fixture.credit_card
|
73
|
+
subject.owner_birthday = '50/12/1980'
|
74
|
+
assert subject.invalid? && subject.errors[:owner_birthday].present?,
|
75
|
+
'should be valid'
|
76
|
+
end
|
77
|
+
|
61
78
|
def test_validate_presence_of_security_code_attribute
|
62
79
|
subject = Fixture.credit_card
|
63
80
|
subject.security_code = nil
|
@@ -81,6 +98,23 @@ class TestCreditCard < Test::Unit::TestCase
|
|
81
98
|
'should not accept strings with other than 10 or 11 chars'
|
82
99
|
end
|
83
100
|
|
101
|
+
def test_perform_extra_validation
|
102
|
+
subject = Fixture.credit_card({
|
103
|
+
card_number: nil,
|
104
|
+
expiration_date: nil,
|
105
|
+
owner_name: nil,
|
106
|
+
owner_phone: nil,
|
107
|
+
owner_cpf: nil,
|
108
|
+
perform_extra_validation: true
|
109
|
+
})
|
110
|
+
assert subject.invalid?
|
111
|
+
assert subject.errors[:card_number], "can't be blank"
|
112
|
+
assert subject.errors[:expiration_date], "can't be blank"
|
113
|
+
assert subject.errors[:owner_name], "can't be blank"
|
114
|
+
assert subject.errors[:owner_phone], "can't be blank"
|
115
|
+
assert subject.errors[:owner_cpf], "can't be blank"
|
116
|
+
end
|
117
|
+
|
84
118
|
def test_remove_left_zeros_from_owner_phone
|
85
119
|
subject = Fixture.credit_card
|
86
120
|
subject.owner_phone = '05130405060'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class TestPayment < Test::Unit::TestCase
|
4
|
+
def test_payment_method_when_payment_split
|
5
|
+
assert_equal :payment_slip, MyMoip::PaymentSlipPayment.payment_method
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_payment_method_when_bank_debit
|
9
|
+
assert_equal :bank_debit, MyMoip::BankDebitPayment.payment_method
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_payment_method_when_credit_card
|
13
|
+
assert_equal :credit_card, MyMoip::CreditCardPayment.payment_method
|
14
|
+
end
|
15
|
+
end
|
@@ -93,4 +93,28 @@ class TestPaymentRequest < Test::Unit::TestCase
|
|
93
93
|
payment_request = MyMoip::PaymentRequest.new("your_own_id")
|
94
94
|
assert_nil payment_request.code
|
95
95
|
end
|
96
|
+
|
97
|
+
def test_method_to_get_response_url
|
98
|
+
instruction = Fixture.instruction(payer: Fixture.payer)
|
99
|
+
transparent_request = MyMoip::TransparentRequest.new("your_own_id")
|
100
|
+
VCR.use_cassette('transparent_request') do
|
101
|
+
transparent_request.api_call(instruction)
|
102
|
+
end
|
103
|
+
payment_slip_payment = MyMoip::PaymentSlipPayment.new
|
104
|
+
payment_request = MyMoip::PaymentRequest.new("your_own_id")
|
105
|
+
VCR.use_cassette('payment_request_with_payment_slip') do
|
106
|
+
payment_request.api_call(payment_slip_payment, token: transparent_request.token)
|
107
|
+
end
|
108
|
+
assert_equal "https://desenvolvedor.moip.com.br/sandbox/Instrucao.do?token=#{transparent_request.token}", payment_request.url
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_url_method_should_return_nil_with_blank_response
|
112
|
+
instruction = Fixture.instruction(payer: Fixture.payer)
|
113
|
+
transparent_request = MyMoip::TransparentRequest.new("your_own_id")
|
114
|
+
VCR.use_cassette('transparent_request') do
|
115
|
+
transparent_request.api_call(instruction)
|
116
|
+
end
|
117
|
+
payment_request = MyMoip::PaymentRequest.new("your_own_id")
|
118
|
+
assert_nil payment_request.url
|
119
|
+
end
|
96
120
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mymoip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Irio Irineu Musskopf Junior
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -152,16 +152,20 @@ files:
|
|
152
152
|
- README.md
|
153
153
|
- Rakefile
|
154
154
|
- lib/mymoip.rb
|
155
|
+
- lib/mymoip/bank_debit.rb
|
155
156
|
- lib/mymoip/commission.rb
|
156
157
|
- lib/mymoip/credit_card.rb
|
157
|
-
- lib/mymoip/credit_card_payment.rb
|
158
158
|
- lib/mymoip/exceptions.rb
|
159
159
|
- lib/mymoip/formatter.rb
|
160
160
|
- lib/mymoip/instruction.rb
|
161
161
|
- lib/mymoip/json_parser.rb
|
162
162
|
- lib/mymoip/payer.rb
|
163
|
+
- lib/mymoip/payment.rb
|
163
164
|
- lib/mymoip/payment_methods.rb
|
164
165
|
- lib/mymoip/payment_slip.rb
|
166
|
+
- lib/mymoip/payments/bank_debit_payment.rb
|
167
|
+
- lib/mymoip/payments/credit_card_payment.rb
|
168
|
+
- lib/mymoip/payments/payment_slip_payment.rb
|
165
169
|
- lib/mymoip/purchase.rb
|
166
170
|
- lib/mymoip/request.rb
|
167
171
|
- lib/mymoip/requests/payment_request.rb
|
@@ -171,8 +175,11 @@ files:
|
|
171
175
|
- mymoip.gemspec
|
172
176
|
- test/fixtures/fixture.rb
|
173
177
|
- test/fixtures/vcr_cassettes/payment_request.yml
|
178
|
+
- test/fixtures/vcr_cassettes/payment_request_with_payment_slip.yml
|
174
179
|
- test/fixtures/vcr_cassettes/transparent_request.yml
|
175
180
|
- test/fixtures/vcr_cassettes/transparent_request_with_commissions.yml
|
181
|
+
- test/lib/test_bank_debit.rb
|
182
|
+
- test/lib/test_bank_debit_payment.rb
|
176
183
|
- test/lib/test_commission.rb
|
177
184
|
- test/lib/test_credit_card_payment.rb
|
178
185
|
- test/lib/test_creditcard.rb
|
@@ -180,9 +187,11 @@ files:
|
|
180
187
|
- test/lib/test_instruction.rb
|
181
188
|
- test/lib/test_mymoip.rb
|
182
189
|
- test/lib/test_payer.rb
|
190
|
+
- test/lib/test_payment.rb
|
183
191
|
- test/lib/test_payment_methods.rb
|
184
192
|
- test/lib/test_payment_request.rb
|
185
193
|
- test/lib/test_payment_slip.rb
|
194
|
+
- test/lib/test_payment_slip_payment.rb
|
186
195
|
- test/lib/test_purchase.rb
|
187
196
|
- test/lib/test_request.rb
|
188
197
|
- test/lib/test_transparent_request.rb
|
@@ -209,15 +218,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
218
|
version: '0'
|
210
219
|
requirements: []
|
211
220
|
rubyforge_project:
|
212
|
-
rubygems_version: 2.0
|
221
|
+
rubygems_version: 2.1.0
|
213
222
|
signing_key:
|
214
223
|
specification_version: 4
|
215
224
|
summary: MoIP transactions in a gem to call your own.
|
216
225
|
test_files:
|
217
226
|
- test/fixtures/fixture.rb
|
218
227
|
- test/fixtures/vcr_cassettes/payment_request.yml
|
228
|
+
- test/fixtures/vcr_cassettes/payment_request_with_payment_slip.yml
|
219
229
|
- test/fixtures/vcr_cassettes/transparent_request.yml
|
220
230
|
- test/fixtures/vcr_cassettes/transparent_request_with_commissions.yml
|
231
|
+
- test/lib/test_bank_debit.rb
|
232
|
+
- test/lib/test_bank_debit_payment.rb
|
221
233
|
- test/lib/test_commission.rb
|
222
234
|
- test/lib/test_credit_card_payment.rb
|
223
235
|
- test/lib/test_creditcard.rb
|
@@ -225,9 +237,11 @@ test_files:
|
|
225
237
|
- test/lib/test_instruction.rb
|
226
238
|
- test/lib/test_mymoip.rb
|
227
239
|
- test/lib/test_payer.rb
|
240
|
+
- test/lib/test_payment.rb
|
228
241
|
- test/lib/test_payment_methods.rb
|
229
242
|
- test/lib/test_payment_request.rb
|
230
243
|
- test/lib/test_payment_slip.rb
|
244
|
+
- test/lib/test_payment_slip_payment.rb
|
231
245
|
- test/lib/test_purchase.rb
|
232
246
|
- test/lib/test_request.rb
|
233
247
|
- test/lib/test_transparent_request.rb
|