mymoip 0.2.6 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +56 -8
- data/Gemfile +1 -0
- data/Gemfile.lock +8 -0
- data/README.md +10 -5
- data/VERSION +1 -1
- data/lib/mymoip/credit_card.rb +50 -11
- data/lib/mymoip/credit_card_payment.rb +20 -15
- data/lib/mymoip/formatter.rb +23 -0
- data/lib/mymoip/instruction.rb +10 -4
- data/lib/mymoip/payer.rb +51 -15
- data/lib/mymoip.rb +1 -0
- data/mymoip.gemspec +7 -2
- data/test/fixtures/fixture.rb +8 -6
- data/test/test_credit_card_payment.rb +52 -7
- data/test/test_creditcard.rb +117 -4
- data/test/test_formatter.rb +49 -0
- data/test/test_instruction.rb +64 -4
- data/test/test_payer.rb +193 -9
- data/test/test_payment_request.rb +2 -2
- data/test/test_transparent_request.rb +1 -1
- metadata +21 -3
data/CHANGELOG.md
CHANGED
@@ -1,32 +1,80 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
=========
|
3
3
|
|
4
|
-
|
4
|
+
0.3.1
|
5
|
+
-----
|
6
|
+
|
7
|
+
* Re-releasing 0.3.0 after some Rubygems issues.
|
8
|
+
|
9
|
+
0.3.0
|
10
|
+
-----
|
11
|
+
|
12
|
+
* Add dependency of active_model gem for validations.
|
13
|
+
* Try always to store the plain value of attributes. While the previous version would require you to provide phones in the `"(51)93040-5060"` format, now works even with `"051930405060"`.
|
14
|
+
* Payer accepts address_state and address_country downcased.
|
15
|
+
* CreditCard accept a valid string date as owner_birthday.
|
16
|
+
* Extract conversions of attributes' formats to a new Formatter class.
|
17
|
+
* Prevent use of CreditCardPayment#to_json with a invalid CreditCard.
|
18
|
+
* Prevent use of Instruction#to_xml with invalid attributes by itself or a invalid Payer.
|
19
|
+
|
20
|
+
New validations:
|
21
|
+
* **CreditCard**
|
22
|
+
* Require a logo and a security_code.
|
23
|
+
* Validate length of owner_phone (accepts 8 and 9 digit phones with its DDD code).
|
24
|
+
* Validate length of security_code (American Express has 4 digits, others 3).
|
25
|
+
* Validate format of expiration_date using `%m/%y`.
|
26
|
+
* Limit logos in the available at AVAILABLE_LOGOS constant.
|
27
|
+
* **Instruction**
|
28
|
+
* Require an id, payment_reason, values and a payer.
|
29
|
+
* **Payer**
|
30
|
+
* Require and id, name, email, address_street, address_street_number, address_neighbourhood, address_city, address_state, address_country, address_cep and an address_phone.
|
31
|
+
* Validate length of address_state in 2 chars.
|
32
|
+
* Validate length of address_country in 3 chars.
|
33
|
+
* Validate length of address_cep in 8 chars.
|
34
|
+
* Validate length of address_phone (accepts 8 and 9 digit phones with its DDD code).
|
35
|
+
|
36
|
+
0.2.6
|
37
|
+
-----
|
38
|
+
|
5
39
|
* Deprecate owner_rg attribute of MyMoip::CreditCard; you should provide a owner_cpf from now on. Should explain issues with Visa's risk analysis.
|
6
40
|
|
7
|
-
|
41
|
+
0.2.5
|
42
|
+
-----
|
43
|
+
|
8
44
|
* Request's log messages moved to debug level.
|
9
45
|
* Make CreditCard class accept string and symbol logos.
|
10
46
|
* Create MyMoip::CreditCard::AVAILABLE_LOGOS constant.
|
11
47
|
* Standardise Request#api_call parameters.
|
12
48
|
|
13
|
-
|
49
|
+
0.2.4
|
50
|
+
-----
|
51
|
+
|
14
52
|
* Fix American Express logo format expected by Moip.
|
15
53
|
|
16
|
-
|
54
|
+
0.2.3
|
55
|
+
-----
|
56
|
+
|
17
57
|
* Remove .rvmrc
|
18
58
|
* CreditCardPayment's initialization can now receive a hash of options.
|
19
59
|
* lib/requests folder created.
|
20
60
|
* Requests has methods to return its response id.
|
21
61
|
|
22
|
-
|
62
|
+
0.2.2
|
63
|
+
-----
|
64
|
+
|
23
65
|
* Explicitly require order for Requests classes.
|
24
66
|
|
25
|
-
|
67
|
+
0.2.1
|
68
|
+
-----
|
69
|
+
|
26
70
|
* Bugfix related to explicitly require MyMoip class being needed.
|
27
71
|
|
28
|
-
|
72
|
+
0.2.0
|
73
|
+
-----
|
74
|
+
|
29
75
|
* Update production url from `https://desenvolvedor.moip.com.br` to `https://www.moip.com.br`.
|
30
76
|
|
31
|
-
|
77
|
+
0.1.0
|
78
|
+
-----
|
79
|
+
|
32
80
|
* First version of the gem.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
activemodel (3.2.8)
|
5
|
+
activesupport (= 3.2.8)
|
6
|
+
builder (~> 3.0.0)
|
7
|
+
activesupport (3.2.8)
|
8
|
+
i18n (~> 0.6)
|
9
|
+
multi_json (~> 1.0)
|
4
10
|
addressable (2.3.2)
|
5
11
|
ansi (1.4.3)
|
6
12
|
builder (3.0.0)
|
@@ -9,6 +15,7 @@ GEM
|
|
9
15
|
httparty (0.8.3)
|
10
16
|
multi_json (~> 1.0)
|
11
17
|
multi_xml
|
18
|
+
i18n (0.6.1)
|
12
19
|
jeweler (1.8.4)
|
13
20
|
bundler (~> 1.0)
|
14
21
|
git (>= 1.2.5)
|
@@ -34,6 +41,7 @@ PLATFORMS
|
|
34
41
|
ruby
|
35
42
|
|
36
43
|
DEPENDENCIES
|
44
|
+
activemodel
|
37
45
|
builder
|
38
46
|
bundler
|
39
47
|
httparty
|
data/README.md
CHANGED
@@ -47,9 +47,9 @@ payer = MyMoip::Payer.new(
|
|
47
47
|
address_city: "Porto Alegre",
|
48
48
|
address_state: "RS",
|
49
49
|
address_country: "BRA",
|
50
|
-
address_cep: "
|
51
|
-
address_phone: "
|
52
|
-
)
|
50
|
+
address_cep: "90440150",
|
51
|
+
address_phone: "5130405060"
|
52
|
+
)
|
53
53
|
|
54
54
|
instruction = MyMoip::Instruction.new(
|
55
55
|
id: "instruction_id_defined_by_you",
|
@@ -71,8 +71,8 @@ credit_card = MyMoip::CreditCard.new(
|
|
71
71
|
security_code: "000",
|
72
72
|
owner_name: "Juquinha da Rocha",
|
73
73
|
owner_birthday: Date.new(1984, 11, 3),
|
74
|
-
owner_phone: "
|
75
|
-
owner_cpf: "
|
74
|
+
owner_phone: "5130405060",
|
75
|
+
owner_cpf: "52211670695"
|
76
76
|
)
|
77
77
|
|
78
78
|
credit_card_payment = MyMoip::CreditCardPayment.new(credit_card, installments: 1)
|
@@ -85,6 +85,11 @@ payment_request.api_call(credit_card_payment, token: transparent_request.token)
|
|
85
85
|
payment_request.success?
|
86
86
|
```
|
87
87
|
|
88
|
+
Documentation
|
89
|
+
-------------
|
90
|
+
|
91
|
+
For more information you can access the [wiki page](https://github.com/Irio/mymoip/wiki).
|
92
|
+
|
88
93
|
License
|
89
94
|
-------
|
90
95
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|
data/lib/mymoip/credit_card.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module MyMoip
|
2
2
|
class CreditCard
|
3
|
+
include ActiveModel::Validations
|
4
|
+
|
3
5
|
attr_accessor :logo, :card_number, :expiration_date, :security_code,
|
4
6
|
:owner_name, :owner_birthday, :owner_phone, :owner_cpf
|
5
7
|
|
@@ -7,22 +9,59 @@ module MyMoip
|
|
7
9
|
:american_express, :diners, :hipercard, :mastercard, :visa
|
8
10
|
]
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
self.
|
12
|
+
validates_presence_of :logo, :security_code
|
13
|
+
validates_length_of :owner_phone, within: 10..11, allow_nil: true
|
14
|
+
validates_length_of :security_code, within: 3..4
|
15
|
+
validates_format_of :expiration_date, with: /\A(?:(?:0[1-9])|(?:1[02]))\/\d{2}\Z/ # %m/%y
|
16
|
+
validates_inclusion_of :logo, in: AVAILABLE_LOGOS
|
17
|
+
|
18
|
+
def initialize(attrs)
|
19
|
+
self.logo = attrs[:logo] if attrs.has_key?(:logo)
|
20
|
+
self.card_number = attrs[:card_number] if attrs.has_key?(:card_number)
|
21
|
+
self.expiration_date = attrs[:expiration_date] if attrs.has_key?(:expiration_date)
|
22
|
+
self.security_code = attrs[:security_code] if attrs.has_key?(:security_code)
|
23
|
+
self.owner_name = attrs[:owner_name] if attrs.has_key?(:owner_name)
|
24
|
+
self.owner_birthday = attrs[:owner_birthday] if attrs.has_key?(:owner_birthday)
|
25
|
+
self.owner_phone = attrs[:owner_phone] if attrs.has_key?(:owner_phone)
|
26
|
+
self.owner_cpf = attrs[:owner_cpf] if attrs.has_key?(:owner_cpf)
|
27
|
+
|
28
|
+
# Deprecated attributes
|
29
|
+
self.owner_rg = attrs[:owner_rg] if attrs.has_key?(:owner_rg)
|
30
|
+
end
|
31
|
+
|
32
|
+
def logo=(value)
|
33
|
+
value = value.to_sym unless value.nil?
|
34
|
+
@logo = value
|
35
|
+
end
|
36
|
+
|
37
|
+
def owner_birthday=(value)
|
38
|
+
unless value.nil?
|
39
|
+
value = Date.parse(value.to_s)
|
40
|
+
end
|
41
|
+
@owner_birthday = value
|
42
|
+
end
|
43
|
+
|
44
|
+
def owner_phone=(value)
|
45
|
+
unless value.nil?
|
46
|
+
# Removes non-digits
|
47
|
+
value.gsub!(/\D*/, '')
|
48
|
+
# Removes zeros in the beginning
|
49
|
+
value.gsub!(/\A0*/, '')
|
50
|
+
end
|
51
|
+
@owner_phone = value
|
21
52
|
end
|
22
53
|
|
23
54
|
def owner_rg=(value)
|
24
55
|
warn "[DEPRECATION] `owner_rg` is deprecated. Please use `owner_cpf` instead."
|
25
56
|
self.owner_cpf = value
|
26
57
|
end
|
58
|
+
|
59
|
+
def owner_cpf=(value)
|
60
|
+
unless value.nil?
|
61
|
+
# Removes dashes and dots
|
62
|
+
value.gsub!(/\-|\./, '')
|
63
|
+
end
|
64
|
+
@owner_cpf = value
|
65
|
+
end
|
27
66
|
end
|
28
67
|
end
|
@@ -3,17 +3,18 @@ module MyMoip
|
|
3
3
|
attr_accessor :credit_card, :installments
|
4
4
|
|
5
5
|
def initialize(credit_card, opts = {})
|
6
|
-
|
6
|
+
self.credit_card = credit_card
|
7
7
|
# Backward compatibility. See 0.2.3 CHANGELOG
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
self.installments = if opts.kind_of?(Integer)
|
9
|
+
opts
|
10
|
+
else
|
11
|
+
opts[:installments] || 1
|
12
|
+
end
|
13
13
|
end
|
14
14
|
|
15
|
-
def to_json
|
15
|
+
def to_json(formatter = MyMoip::Formatter)
|
16
16
|
raise "No CreditCard provided" if credit_card.nil?
|
17
|
+
raise ArgumentError, 'Invalid credit card' if credit_card.invalid?
|
17
18
|
|
18
19
|
json = {
|
19
20
|
Forma: "CartaoCredito",
|
@@ -21,23 +22,27 @@ module MyMoip
|
|
21
22
|
CartaoCredito: {
|
22
23
|
Numero: credit_card.card_number,
|
23
24
|
Expiracao: credit_card.expiration_date,
|
24
|
-
CodigoSeguranca: credit_card.security_code
|
25
|
-
Portador: {
|
26
|
-
Nome: credit_card.owner_name,
|
27
|
-
DataNascimento: credit_card.owner_birthday.strftime("%d/%m/%Y"),
|
28
|
-
Telefone: credit_card.owner_phone,
|
29
|
-
Identidade: credit_card.owner_cpf
|
30
|
-
}
|
25
|
+
CodigoSeguranca: credit_card.security_code
|
31
26
|
}
|
32
27
|
}
|
33
28
|
|
29
|
+
json[:CartaoCredito][:Portador] = {
|
30
|
+
Nome: credit_card.owner_name,
|
31
|
+
DataNascimento: (credit_card.owner_birthday and
|
32
|
+
formatter.date(credit_card.owner_birthday)),
|
33
|
+
Telefone: (credit_card.owner_phone and
|
34
|
+
formatter.phone(credit_card.owner_phone)),
|
35
|
+
Identidade: (credit_card.owner_cpf and
|
36
|
+
formatter.cpf(credit_card.owner_cpf))
|
37
|
+
}
|
38
|
+
|
34
39
|
json[:Instituicao] = {
|
35
40
|
american_express: "AmericanExpress",
|
36
41
|
diners: "Diners",
|
37
42
|
hipercard: "Hipercard",
|
38
43
|
mastercard: "Mastercard",
|
39
44
|
visa: "Visa"
|
40
|
-
}.fetch(credit_card.logo
|
45
|
+
}.fetch(credit_card.logo)
|
41
46
|
|
42
47
|
if cash?
|
43
48
|
json[:Recebimento] = "AVista"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module MyMoip
|
2
|
+
class Formatter
|
3
|
+
def self.cep(plain_cep)
|
4
|
+
raise ArgumentError, 'Cannot format CEP nil' if plain_cep.nil?
|
5
|
+
plain_cep.gsub(/(\d{5})/, '\1-')
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.phone(plain_phone)
|
9
|
+
raise ArgumentError, 'Cannot format phone nil' if plain_phone.nil?
|
10
|
+
plain_phone.gsub(/(\d{2})(\d)?(\d{4})(\d{4})/, '(\1)\2\3-\4')
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.date(plain_date)
|
14
|
+
raise ArgumentError, 'Cannot format date nil' if plain_date.nil?
|
15
|
+
plain_date.strftime("%d/%m/%Y")
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.cpf(plain_cpf)
|
19
|
+
raise ArgumentError, 'Cannot format cpf nil' if plain_cpf.nil?
|
20
|
+
plain_cpf.gsub(/(\d{3})(\d{3})(\d{3})(\d{2})/, '\1.\2.\3-\4')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/mymoip/instruction.rb
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
module MyMoip
|
2
2
|
class Instruction
|
3
|
+
include ActiveModel::Validations
|
4
|
+
|
3
5
|
attr_accessor :id, :payment_reason, :values, :payer
|
4
6
|
|
7
|
+
validates_presence_of :id, :payment_reason, :values, :payer
|
8
|
+
|
5
9
|
def initialize(attrs)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
+
self.id = attrs[:id] if attrs.has_key?(:id)
|
11
|
+
self.payment_reason = attrs[:payment_reason] if attrs.has_key?(:payment_reason)
|
12
|
+
self.values = attrs[:values] if attrs.has_key?(:values)
|
13
|
+
self.payer = attrs[:payer] if attrs.has_key?(:payer)
|
10
14
|
end
|
11
15
|
|
12
16
|
def to_xml(root = nil)
|
17
|
+
raise ArgumentError, 'Invalid payer' if payer.invalid?
|
18
|
+
raise ArgumentError, 'Invalid params for instruction' if self.invalid?
|
13
19
|
|
14
20
|
xml = ""
|
15
21
|
root = Builder::XmlMarkup.new(target: xml)
|
data/lib/mymoip/payer.rb
CHANGED
@@ -1,26 +1,62 @@
|
|
1
1
|
module MyMoip
|
2
2
|
class Payer
|
3
|
+
include ActiveModel::Validations
|
4
|
+
|
3
5
|
attr_accessor :id, :name, :email,
|
4
6
|
:address_street, :address_street_number, :address_street_extra,
|
5
7
|
:address_neighbourhood, :address_city, :address_state,
|
6
8
|
:address_country, :address_cep, :address_phone
|
7
9
|
|
10
|
+
validates_presence_of :id, :name, :email, :address_street,
|
11
|
+
:address_street_number, :address_neighbourhood,
|
12
|
+
:address_city, :address_state, :address_country,
|
13
|
+
:address_cep, :address_phone
|
14
|
+
validates_length_of :address_state, is: 2
|
15
|
+
validates_length_of :address_country, is: 3
|
16
|
+
validates_length_of :address_cep, is: 8
|
17
|
+
validates_length_of :address_phone, within: 10..11
|
18
|
+
|
8
19
|
def initialize(attrs)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
self.id = attrs[:id] if attrs.has_key?(:id)
|
21
|
+
self.name = attrs[:name] if attrs.has_key?(:name)
|
22
|
+
self.email = attrs[:email] if attrs.has_key?(:email)
|
23
|
+
self.address_street = attrs[:address_street] if attrs.has_key?(:address_street)
|
24
|
+
self.address_street_number = attrs[:address_street_number] if attrs.has_key?(:address_street_number)
|
25
|
+
self.address_street_extra = attrs[:address_street_extra] if attrs.has_key?(:address_street_extra)
|
26
|
+
self.address_neighbourhood = attrs[:address_neighbourhood] if attrs.has_key?(:address_neighbourhood)
|
27
|
+
self.address_city = attrs[:address_city] if attrs.has_key?(:address_city)
|
28
|
+
self.address_state = attrs[:address_state] if attrs.has_key?(:address_state)
|
29
|
+
self.address_country = attrs[:address_country] if attrs.has_key?(:address_country)
|
30
|
+
self.address_cep = attrs[:address_cep] if attrs.has_key?(:address_cep)
|
31
|
+
self.address_phone = attrs[:address_phone] if attrs.has_key?(:address_phone)
|
32
|
+
end
|
33
|
+
|
34
|
+
def address_cep=(value)
|
35
|
+
value.gsub!(/\D*/, '') unless value.nil?
|
36
|
+
@address_cep = value
|
37
|
+
end
|
38
|
+
|
39
|
+
def address_state=(value)
|
40
|
+
value = value.upcase unless value.nil?
|
41
|
+
@address_state = value
|
42
|
+
end
|
43
|
+
|
44
|
+
def address_country=(value)
|
45
|
+
value = value.upcase unless value.nil?
|
46
|
+
@address_country = value
|
47
|
+
end
|
48
|
+
|
49
|
+
def address_phone=(value)
|
50
|
+
unless value.nil?
|
51
|
+
# Removes non-digits
|
52
|
+
value.gsub!(/\D*/, '')
|
53
|
+
# Removes zeros in the beginning
|
54
|
+
value.gsub!(/\A0*/, '')
|
55
|
+
end
|
56
|
+
@address_phone = value
|
21
57
|
end
|
22
58
|
|
23
|
-
def to_xml(root = nil)
|
59
|
+
def to_xml(root = nil, formatter = MyMoip::Formatter)
|
24
60
|
if root.nil?
|
25
61
|
xml = ""
|
26
62
|
root ||= Builder::XmlMarkup.new(target: xml)
|
@@ -37,8 +73,8 @@ module MyMoip
|
|
37
73
|
n1.Cidade(@address_city)
|
38
74
|
n1.Estado(@address_state)
|
39
75
|
n1.Pais(@address_country)
|
40
|
-
n1.CEP(@address_cep)
|
41
|
-
n1.TelefoneFixo(@address_phone)
|
76
|
+
n1.CEP(formatter.cep(@address_cep))
|
77
|
+
n1.TelefoneFixo(formatter.phone(@address_phone))
|
42
78
|
end
|
43
79
|
|
44
80
|
xml
|
data/lib/mymoip.rb
CHANGED
data/mymoip.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mymoip"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Irio Irineu Musskopf Junior"]
|
12
|
-
s.date = "2012-11-
|
12
|
+
s.date = "2012-11-17"
|
13
13
|
s.description = "Provides a implementation of MoIP's transparent checkout."
|
14
14
|
s.email = "irio.musskopf@caixadeideias.com.br"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/mymoip.rb",
|
29
29
|
"lib/mymoip/credit_card.rb",
|
30
30
|
"lib/mymoip/credit_card_payment.rb",
|
31
|
+
"lib/mymoip/formatter.rb",
|
31
32
|
"lib/mymoip/instruction.rb",
|
32
33
|
"lib/mymoip/json_parser.rb",
|
33
34
|
"lib/mymoip/payer.rb",
|
@@ -42,6 +43,7 @@ Gem::Specification.new do |s|
|
|
42
43
|
"test/live_test.rb",
|
43
44
|
"test/test_credit_card_payment.rb",
|
44
45
|
"test/test_creditcard.rb",
|
46
|
+
"test/test_formatter.rb",
|
45
47
|
"test/test_instruction.rb",
|
46
48
|
"test/test_mymoip.rb",
|
47
49
|
"test/test_payer.rb",
|
@@ -61,6 +63,7 @@ Gem::Specification.new do |s|
|
|
61
63
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
64
|
s.add_runtime_dependency(%q<builder>, [">= 0"])
|
63
65
|
s.add_runtime_dependency(%q<httparty>, [">= 0"])
|
66
|
+
s.add_runtime_dependency(%q<activemodel>, [">= 0"])
|
64
67
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
65
68
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
66
69
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
@@ -71,6 +74,7 @@ Gem::Specification.new do |s|
|
|
71
74
|
else
|
72
75
|
s.add_dependency(%q<builder>, [">= 0"])
|
73
76
|
s.add_dependency(%q<httparty>, [">= 0"])
|
77
|
+
s.add_dependency(%q<activemodel>, [">= 0"])
|
74
78
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
75
79
|
s.add_dependency(%q<bundler>, [">= 0"])
|
76
80
|
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
@@ -82,6 +86,7 @@ Gem::Specification.new do |s|
|
|
82
86
|
else
|
83
87
|
s.add_dependency(%q<builder>, [">= 0"])
|
84
88
|
s.add_dependency(%q<httparty>, [">= 0"])
|
89
|
+
s.add_dependency(%q<activemodel>, [">= 0"])
|
85
90
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
86
91
|
s.add_dependency(%q<bundler>, [">= 0"])
|
87
92
|
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
data/test/fixtures/fixture.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Fixture
|
2
|
-
def self.payer
|
3
|
-
|
2
|
+
def self.payer(params = {})
|
3
|
+
params = {
|
4
4
|
id: "your_own_payer_id",
|
5
5
|
name: "Juquinha da Rocha",
|
6
6
|
email: "juquinha@rocha.com",
|
@@ -13,16 +13,18 @@ class Fixture
|
|
13
13
|
address_country: "BRA",
|
14
14
|
address_cep: "90440-150",
|
15
15
|
address_phone: "(51)3040-5060"
|
16
|
-
)
|
16
|
+
}.merge(params)
|
17
|
+
MyMoip::Payer.new(params)
|
17
18
|
end
|
18
19
|
|
19
|
-
def self.instruction(
|
20
|
-
|
20
|
+
def self.instruction(params={})
|
21
|
+
params = {
|
21
22
|
id: "your_own_instruction_id",
|
22
23
|
payment_reason: "some payment_reason",
|
23
24
|
values: [100.0, 200.0],
|
24
25
|
payer: payer
|
25
|
-
)
|
26
|
+
}.merge(params)
|
27
|
+
MyMoip::Instruction.new(params)
|
26
28
|
end
|
27
29
|
|
28
30
|
def self.credit_card(params = {})
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestCreditCardPayment < Test::Unit::TestCase
|
4
|
-
|
5
4
|
def test_initialization_and_getters
|
6
5
|
credit_card = Fixture.credit_card
|
7
6
|
subject = MyMoip::CreditCardPayment.new(credit_card, 1)
|
@@ -46,8 +45,8 @@ class TestCreditCardPayment < Test::Unit::TestCase
|
|
46
45
|
assert_match /\A((0[1-9])|(1[02]))\/\d{2}\z/, payment.to_json[:CartaoCredito][:Expiracao]
|
47
46
|
assert_match /\A\d{3}\z/, payment.to_json[:CartaoCredito][:CodigoSeguranca]
|
48
47
|
original_date = Date.new(1980, 11, 3)
|
49
|
-
MyMoip::
|
50
|
-
assert_equal
|
48
|
+
MyMoip::Formatter.stubs(:date).returns('03/11/1980')
|
49
|
+
assert_equal '03/11/1980', payment.to_json[:CartaoCredito][:Portador][:DataNascimento]
|
51
50
|
assert_match /\A\(\d{2}\)\d{4,5}-\d{4}/, payment.to_json[:CartaoCredito][:Portador][:Telefone]
|
52
51
|
assert_match /\A\d{3}\.\d{3}\.\d{3}\-\d{2}\z/, payment.to_json[:CartaoCredito][:Portador][:Identidade]
|
53
52
|
end
|
@@ -59,11 +58,57 @@ class TestCreditCardPayment < Test::Unit::TestCase
|
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
65
|
-
|
61
|
+
def test_to_json_method_uses_the_formatted_version_of_the_credit_cards_owner_birthday
|
62
|
+
date = Date.new(2040, 10, 30)
|
63
|
+
subject = MyMoip::CreditCardPayment.new(Fixture.credit_card(owner_birthday: date))
|
64
|
+
formatter = stub_everything('formatter')
|
65
|
+
formatter.expects(:date).with(date)
|
66
|
+
subject.to_json(formatter)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_to_json_method_skip_formatting_when_credit_cards_owner_birthday_is_nil
|
70
|
+
subject = MyMoip::CreditCardPayment.new(Fixture.credit_card(owner_birthday: nil))
|
71
|
+
formatter = stub_everything('formatter')
|
72
|
+
formatter.stubs(:date).with(nil).returns('should not be here')
|
73
|
+
json = subject.to_json(formatter)
|
74
|
+
assert_nil json[:CartaoCredito][:Portador][:DataNascimento]
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_to_json_method_uses_the_formatted_version_of_the_credit_cards_owner_phone
|
78
|
+
subject = MyMoip::CreditCardPayment.new(Fixture.credit_card(owner_phone: '5130405060'))
|
79
|
+
formatter = stub_everything('formatter')
|
80
|
+
formatter.expects(:phone).with('5130405060')
|
81
|
+
subject.to_json(formatter)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_to_json_method_skip_formatting_when_credit_cards_owner_phone_is_nil
|
85
|
+
subject = MyMoip::CreditCardPayment.new(Fixture.credit_card(owner_phone: nil))
|
86
|
+
formatter = stub_everything('formatter')
|
87
|
+
formatter.stubs(:phone).with(nil).returns('should not be here')
|
88
|
+
json = subject.to_json(formatter)
|
89
|
+
assert_nil json[:CartaoCredito][:Portador][:Telefone]
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_to_json_method_raises_an_exception_when_called_without_a_credit_card
|
93
|
+
subject = MyMoip::CreditCardPayment.new(nil)
|
94
|
+
assert_raise RuntimeError do
|
95
|
+
subject.to_json
|
66
96
|
end
|
67
97
|
end
|
68
98
|
|
99
|
+
def test_to_json_method_skip_formatting_when_credit_cards_owner_cpf_is_nil
|
100
|
+
subject = MyMoip::CreditCardPayment.new(Fixture.credit_card(owner_cpf: nil))
|
101
|
+
formatter = stub_everything('formatter')
|
102
|
+
formatter.stubs(:cpf).with(nil).returns('should not be here')
|
103
|
+
json = subject.to_json(formatter)
|
104
|
+
assert_nil json[:CartaoCredito][:Portador][:Identidade]
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_to_json_method_raises_an_exception_when_called_with_a_invalid_credit_card
|
108
|
+
subject = MyMoip::CreditCardPayment.new(Fixture.credit_card)
|
109
|
+
MyMoip::CreditCard.any_instance.stubs(:invalid?).returns(true)
|
110
|
+
assert_raise ArgumentError do
|
111
|
+
subject.to_json
|
112
|
+
end
|
113
|
+
end
|
69
114
|
end
|
data/test/test_creditcard.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestCreditCard < Test::Unit::TestCase
|
4
|
-
|
5
4
|
def test_initialization_and_setters
|
6
5
|
subject = MyMoip::CreditCard.new(
|
7
6
|
logo: :visa,
|
@@ -10,7 +9,7 @@ class TestCreditCard < Test::Unit::TestCase
|
|
10
9
|
security_code: "000",
|
11
10
|
owner_name: "Juquinha da Rocha",
|
12
11
|
owner_birthday: Date.new(1984, 11, 3),
|
13
|
-
owner_phone: "
|
12
|
+
owner_phone: "5130405060",
|
14
13
|
owner_cpf: "522.116.706-95"
|
15
14
|
)
|
16
15
|
|
@@ -20,8 +19,83 @@ class TestCreditCard < Test::Unit::TestCase
|
|
20
19
|
assert_equal "000", subject.security_code
|
21
20
|
assert_equal "Juquinha da Rocha", subject.owner_name
|
22
21
|
assert_equal Date.new(1984, 11, 3), subject.owner_birthday
|
23
|
-
assert_equal "
|
24
|
-
assert_equal "
|
22
|
+
assert_equal "5130405060", subject.owner_phone
|
23
|
+
assert_equal "52211670695", subject.owner_cpf
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_validate_presence_of_logo_attribute
|
27
|
+
subject = Fixture.credit_card
|
28
|
+
subject.logo = nil
|
29
|
+
assert subject.invalid? && subject.errors[:logo].present?,
|
30
|
+
'should be invalid without a logo'
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_owner_birthday_accepts_string_version_of_dates
|
34
|
+
subject = Fixture.credit_card
|
35
|
+
subject.owner_birthday = '20/12/1980'
|
36
|
+
assert_equal Date.new(1980, 12, 20), subject.owner_birthday
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_validate_presence_of_security_code_attribute
|
40
|
+
subject = Fixture.credit_card
|
41
|
+
subject.security_code = nil
|
42
|
+
assert subject.invalid? && subject.errors[:security_code].present?,
|
43
|
+
'should be invalid without an security_code'
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_accept_nil_owner_phone
|
47
|
+
subject = Fixture.credit_card(owner_phone: nil)
|
48
|
+
assert subject.valid?, 'should be valid'
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_validate_length_of_owner_phone_attribute_in_10_or_11_chars
|
52
|
+
subject = Fixture.credit_card
|
53
|
+
subject.owner_phone = '5130405060'
|
54
|
+
assert subject.valid?, 'should accept 10 chars'
|
55
|
+
subject.owner_phone = '51930405060'
|
56
|
+
assert subject.valid?, 'should accept 11 chars'
|
57
|
+
subject.owner_phone = '215130405060'
|
58
|
+
assert subject.invalid? && subject.errors[:owner_phone].present?,
|
59
|
+
'should not accept strings with other than 10 or 11 chars'
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_remove_left_zeros_from_owner_phone
|
63
|
+
subject = Fixture.credit_card
|
64
|
+
subject.owner_phone = '05130405060'
|
65
|
+
assert_equal '5130405060', subject.owner_phone
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_remove_dashes_from_owner_phone
|
69
|
+
subject = Fixture.credit_card
|
70
|
+
subject.owner_phone = '513040-5060'
|
71
|
+
assert_equal '5130405060', subject.owner_phone
|
72
|
+
subject.owner_phone = '5193040-5060'
|
73
|
+
assert_equal '51930405060', subject.owner_phone
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_remove_parenthesis_from_owner_phone
|
77
|
+
subject = Fixture.credit_card
|
78
|
+
subject.owner_phone = '(51)30405060'
|
79
|
+
assert_equal '5130405060', subject.owner_phone
|
80
|
+
subject.owner_phone = '(51)930405060'
|
81
|
+
assert_equal '51930405060', subject.owner_phone
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_remove_dashes_from_owner_cpf
|
85
|
+
subject = Fixture.credit_card
|
86
|
+
subject.owner_cpf = '522116706-95'
|
87
|
+
assert_equal '52211670695', subject.owner_cpf
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_remove_dots_from_owner_cpf
|
91
|
+
subject = Fixture.credit_card
|
92
|
+
subject.owner_cpf = '522.116.70695'
|
93
|
+
assert_equal '52211670695', subject.owner_cpf
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_accept_nil_owner_cpf
|
97
|
+
subject = Fixture.credit_card(owner_cpf: nil)
|
98
|
+
assert subject.valid?, 'should be valid'
|
25
99
|
end
|
26
100
|
|
27
101
|
def test_warns_about_owner_rg_attribute_deprecation_on_initialization
|
@@ -34,4 +108,43 @@ class TestCreditCard < Test::Unit::TestCase
|
|
34
108
|
subject.expects(:warn).with(regexp_matches(/is deprecated/))
|
35
109
|
subject.owner_rg = '1010202030'
|
36
110
|
end
|
111
|
+
|
112
|
+
def test_accepts_security_codes_of_3_digits
|
113
|
+
subject = Fixture.credit_card(security_code: "180")
|
114
|
+
assert subject.valid?, 'should be valid'
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_accepts_security_codes_of_4_digits
|
118
|
+
subject = Fixture.credit_card(security_code: "1809")
|
119
|
+
assert subject.valid?, 'should be valid'
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_dont_accept_security_codes_of_neither_3_or_4_digits
|
123
|
+
subject = Fixture.credit_card(security_code: "1")
|
124
|
+
assert subject.invalid? && subject.errors[:security_code].present?, 'should not be valid'
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_validate_format_of_expiration_date
|
128
|
+
subject = Fixture.credit_card(expiration_date: "12/2018")
|
129
|
+
assert subject.invalid? && subject.errors[:expiration_date].present?, 'should not accept other formats'
|
130
|
+
subject = Fixture.credit_card(expiration_date: "12/18")
|
131
|
+
assert subject.valid? && subject.errors[:expiration_date].empty?, 'should accept "%m/%y" format'
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_converts_creditcard_string_logos_to_symbol
|
135
|
+
subject = Fixture.credit_card(logo: "visa")
|
136
|
+
assert_equal :visa, subject.logo
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_accepts_any_creditcard_from_available_logos_constant
|
140
|
+
MyMoip::CreditCard::AVAILABLE_LOGOS.each do |logo|
|
141
|
+
subject = Fixture.credit_card(logo: logo)
|
142
|
+
assert subject.valid?, 'should be valid'
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_dont_accept_logos_out_of_available_logos_constant
|
147
|
+
subject = Fixture.credit_card(logo: :unavailable_card)
|
148
|
+
assert subject.invalid? && subject.errors[:logo].present?, 'should not be valid'
|
149
|
+
end
|
37
150
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestFormatter < Test::Unit::TestCase
|
4
|
+
def test_cep_method_returns_the_given_cep_with_section_separator
|
5
|
+
assert_equal '92400-123', MyMoip::Formatter.cep('92400123')
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_cep_method_raises_exception_with_nil_cep_given
|
9
|
+
assert_raise ArgumentError do
|
10
|
+
MyMoip::Formatter.cep(nil)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_phone_method_returns_the_given_8_digit_phone_with_section_separators
|
15
|
+
assert_equal '(51)3040-5060', MyMoip::Formatter.phone('5130405060')
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_phone_method_returns_the_given_9_digit_phone_with_section_separators
|
19
|
+
assert_equal '(51)93040-5060', MyMoip::Formatter.phone('51930405060')
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_phone_method_raises_exception_with_nil_phone_given
|
23
|
+
assert_raise ArgumentError do
|
24
|
+
MyMoip::Formatter.phone(nil)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_date_method_returns_the_given_date_in_the_format_expected
|
29
|
+
date = Date.new(2040, 10, 30)
|
30
|
+
assert_equal '30/10/2040', MyMoip::Formatter.date(date)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_date_method_raises_exception_with_nil_date_given
|
34
|
+
assert_raise ArgumentError do
|
35
|
+
MyMoip::Formatter.date(nil)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_cpf_method_returns_the_given_number_with_section_separators
|
40
|
+
cpf = '522.116.706-95'
|
41
|
+
assert_equal '522.116.706-95', MyMoip::Formatter.cpf('52211670695')
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_cpf_method_raises_exception_with_nil_cpf_given
|
45
|
+
assert_raise ArgumentError do
|
46
|
+
MyMoip::Formatter.cpf(nil)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/test/test_instruction.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestInstruction < Test::Unit::TestCase
|
4
|
-
|
5
4
|
def test_getters_for_attributes
|
6
|
-
|
7
5
|
payer = Fixture.payer
|
8
6
|
instruction = MyMoip::Instruction.new(
|
9
7
|
id: "some id",
|
@@ -20,18 +18,80 @@ class TestInstruction < Test::Unit::TestCase
|
|
20
18
|
|
21
19
|
def test_should_generate_a_string_when_converting_to_xml
|
22
20
|
payer = Fixture.payer
|
23
|
-
instruction = Fixture.instruction(payer)
|
21
|
+
instruction = Fixture.instruction(payer: payer)
|
24
22
|
|
25
23
|
assert_equal String, instruction.to_xml.class
|
26
24
|
end
|
27
25
|
|
28
26
|
def test_xml_format
|
29
27
|
payer = Fixture.payer
|
30
|
-
instruction = Fixture.instruction(payer)
|
28
|
+
instruction = Fixture.instruction(payer: payer)
|
31
29
|
expected_format = <<XML
|
32
30
|
<EnviarInstrucao><InstrucaoUnica TipoValidacao=\"Transparente\"><Razao>some payment_reason</Razao><Valores><Valor moeda=\"BRL\">100.00</Valor><Valor moeda=\"BRL\">200.00</Valor></Valores><IdProprio>your_own_instruction_id</IdProprio><Pagador><Nome>Juquinha da Rocha</Nome><Email>juquinha@rocha.com</Email><IdPagador>your_own_payer_id</IdPagador><EnderecoCobranca><Logradouro>Felipe Neri</Logradouro><Numero>406</Numero><Complemento>Sala 501</Complemento><Bairro>Auxiliadora</Bairro><Cidade>Porto Alegre</Cidade><Estado>RS</Estado><Pais>BRA</Pais><CEP>90440-150</CEP><TelefoneFixo>(51)3040-5060</TelefoneFixo></EnderecoCobranca></Pagador></InstrucaoUnica></EnviarInstrucao>
|
33
31
|
XML
|
34
32
|
assert_equal expected_format.rstrip, instruction.to_xml
|
35
33
|
end
|
36
34
|
|
35
|
+
def test_to_xml_method_raises_exception_when_called_with_invalid_payer
|
36
|
+
subject = Fixture.instruction
|
37
|
+
MyMoip::Payer.any_instance.stubs(:invalid?).returns(true)
|
38
|
+
assert_raise ArgumentError do
|
39
|
+
subject.to_xml
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_to_xml_method_dont_raises_exception_when_called_with_valid_payer
|
44
|
+
subject = Fixture.instruction
|
45
|
+
MyMoip::Payer.any_instance.stubs(:invalid?).returns(false)
|
46
|
+
assert_nothing_raised ArgumentError do
|
47
|
+
subject.to_xml
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_to_xml_method_raises_exception_when_called_with_invalid_params
|
52
|
+
subject = Fixture.instruction
|
53
|
+
MyMoip::Instruction.any_instance.stubs(:invalid?).returns(true)
|
54
|
+
assert_raise ArgumentError do
|
55
|
+
subject.to_xml
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_to_xml_method_dont_raises_exception_when_called_with_valid_params
|
60
|
+
subject = Fixture.instruction
|
61
|
+
MyMoip::Instruction.any_instance.stubs(:invalid?).returns(false)
|
62
|
+
assert_nothing_raised ArgumentError do
|
63
|
+
subject.to_xml
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_validate_presence_of_id_attribute
|
68
|
+
subject = Fixture.instruction
|
69
|
+
subject.id = nil
|
70
|
+
assert subject.invalid? && subject.errors[:id].present?,
|
71
|
+
'should be invalid without an id'
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_validate_presence_of_payment_reason_attribute
|
75
|
+
subject = Fixture.instruction
|
76
|
+
subject.payment_reason = nil
|
77
|
+
assert subject.invalid? && subject.errors[:payment_reason].present?,
|
78
|
+
'should be invalid without a payment_reason'
|
79
|
+
subject.payment_reason = ''
|
80
|
+
assert subject.invalid? && subject.errors[:payment_reason].present?,
|
81
|
+
'should be invalid without a payment_reason'
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_validate_presence_of_values_attribute
|
85
|
+
subject = Fixture.instruction
|
86
|
+
subject.values = nil
|
87
|
+
assert subject.invalid? && subject.errors[:values].present?,
|
88
|
+
'should be invalid without values'
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_validate_presence_of_payer_attribute
|
92
|
+
subject = Fixture.instruction
|
93
|
+
subject.payer = nil
|
94
|
+
assert subject.invalid? && subject.errors[:payer].present?,
|
95
|
+
'should be invalid without a payer'
|
96
|
+
end
|
37
97
|
end
|
data/test/test_payer.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestPayer < Test::Unit::TestCase
|
4
|
-
|
5
4
|
def test_getters_for_attributes
|
6
5
|
payer = MyMoip::Payer.new(
|
7
6
|
id: "some id",
|
@@ -12,10 +11,10 @@ class TestPayer < Test::Unit::TestCase
|
|
12
11
|
address_street_extra: "some address_street_extra",
|
13
12
|
address_neighbourhood: "some address_neighbourhood",
|
14
13
|
address_city: "some address_city",
|
15
|
-
address_state: "
|
16
|
-
address_country: "
|
17
|
-
address_cep: "
|
18
|
-
address_phone: "
|
14
|
+
address_state: "RS",
|
15
|
+
address_country: "BRA",
|
16
|
+
address_cep: "92123456",
|
17
|
+
address_phone: "5130405060"
|
19
18
|
)
|
20
19
|
|
21
20
|
assert_equal "some id", payer.id
|
@@ -26,10 +25,195 @@ class TestPayer < Test::Unit::TestCase
|
|
26
25
|
assert_equal "some address_street_extra", payer.address_street_extra
|
27
26
|
assert_equal "some address_neighbourhood", payer.address_neighbourhood
|
28
27
|
assert_equal "some address_city", payer.address_city
|
29
|
-
assert_equal "
|
30
|
-
assert_equal "
|
31
|
-
assert_equal "
|
32
|
-
assert_equal "
|
28
|
+
assert_equal "RS", payer.address_state
|
29
|
+
assert_equal "BRA", payer.address_country
|
30
|
+
assert_equal "92123456", payer.address_cep
|
31
|
+
assert_equal "5130405060", payer.address_phone
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_validate_presence_of_id_attribute
|
35
|
+
subject = Fixture.payer
|
36
|
+
subject.id = nil
|
37
|
+
assert subject.invalid?, 'should be invalid without an id'
|
38
|
+
subject.id = ''
|
39
|
+
assert subject.invalid?, 'should be invalid without an id'
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_validate_presence_of_name_attribute
|
43
|
+
subject = Fixture.payer
|
44
|
+
subject.name = nil
|
45
|
+
assert subject.invalid?, 'should be invalid without an name'
|
46
|
+
subject.name = ''
|
47
|
+
assert subject.invalid?, 'should be invalid without an name'
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_validate_presence_of_email_attribute
|
51
|
+
subject = Fixture.payer
|
52
|
+
subject.email = nil
|
53
|
+
assert subject.invalid?, 'should be invalid without an email'
|
54
|
+
subject.email = ''
|
55
|
+
assert subject.invalid?, 'should be invalid without an email'
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_validate_presence_of_address_street_attribute
|
59
|
+
subject = Fixture.payer
|
60
|
+
subject.address_street = nil
|
61
|
+
assert subject.invalid?, 'should be invalid without an address_street'
|
62
|
+
subject.address_street = ''
|
63
|
+
assert subject.invalid?, 'should be invalid without an address_street'
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_validate_presence_of_address_street_number_attribute
|
67
|
+
subject = Fixture.payer
|
68
|
+
subject.address_street_number = nil
|
69
|
+
assert subject.invalid?, 'should be invalid without an address_street_number'
|
70
|
+
subject.address_street_number = ''
|
71
|
+
assert subject.invalid?, 'should be invalid without an address_street_number'
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_validate_presence_of_address_neighbourhood_attribute
|
75
|
+
subject = Fixture.payer
|
76
|
+
subject.address_neighbourhood = nil
|
77
|
+
assert subject.invalid?, 'should be invalid without an address_neighbourhood'
|
78
|
+
subject.address_neighbourhood = ''
|
79
|
+
assert subject.invalid?, 'should be invalid without an address_neighbourhood'
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_validate_presence_of_address_city_attribute
|
83
|
+
subject = Fixture.payer
|
84
|
+
subject.address_city = nil
|
85
|
+
assert subject.invalid?, 'should be invalid without an address_city'
|
86
|
+
subject.address_city = ''
|
87
|
+
assert subject.invalid?, 'should be invalid without an address_city'
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_validate_presence_of_address_state_attribute
|
91
|
+
subject = Fixture.payer
|
92
|
+
subject.address_state = nil
|
93
|
+
assert subject.invalid?, 'should be invalid without an address_state'
|
94
|
+
subject.address_state = ''
|
95
|
+
assert subject.invalid?, 'should be invalid without an address_state'
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_validate_length_of_address_state_attribute_in_2_chars
|
99
|
+
subject = Fixture.payer
|
100
|
+
subject.address_state = 'RS'
|
101
|
+
assert subject.valid?, 'should accept 2 chars'
|
102
|
+
subject.address_state = 'RSS'
|
103
|
+
assert subject.invalid? && subject.errors[:address_state].present?,
|
104
|
+
'should not accept strings with other than 2 chars'
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_upcase_assigned_address_state
|
108
|
+
subject = Fixture.payer
|
109
|
+
subject.address_state = 'rs'
|
110
|
+
assert_equal 'RS', subject.address_state
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_validate_presence_of_address_country_attribute
|
114
|
+
subject = Fixture.payer
|
115
|
+
subject.address_country = nil
|
116
|
+
assert subject.invalid?, 'should be invalid without an address_country'
|
117
|
+
subject.address_country = ''
|
118
|
+
assert subject.invalid?, 'should be invalid without an address_country'
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_validate_length_of_address_country_attribute_in_3_chars
|
122
|
+
subject = Fixture.payer
|
123
|
+
subject.address_country = 'BRA'
|
124
|
+
assert subject.valid?, 'should accept 3 chars'
|
125
|
+
subject.address_country = 'BR'
|
126
|
+
assert subject.invalid? && subject.errors[:address_country].present?,
|
127
|
+
'should not accept strings with other than 3 chars'
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_upcase_assigned_address_country
|
131
|
+
subject = Fixture.payer
|
132
|
+
subject.address_country = 'bra'
|
133
|
+
assert_equal 'BRA', subject.address_country
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_validate_presence_of_address_cep_attribute
|
137
|
+
subject = Fixture.payer
|
138
|
+
subject.address_cep = nil
|
139
|
+
assert subject.invalid?, 'should be invalid without an address_cep'
|
140
|
+
subject.address_cep = ''
|
141
|
+
assert subject.invalid?, 'should be invalid without an address_cep'
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_validate_length_of_address_cep_attribute_in_2_chars
|
145
|
+
subject = Fixture.payer
|
146
|
+
subject.address_cep = '92123456'
|
147
|
+
assert subject.valid?, 'should accept 8 chars'
|
148
|
+
subject.address_cep = '921234560000'
|
149
|
+
assert subject.invalid? && subject.errors[:address_cep].present?,
|
150
|
+
'should not accept strings with other than 8 chars'
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_dont_count_dashes_in_the_address_cep_length_validation
|
154
|
+
subject = Fixture.payer
|
155
|
+
subject.address_cep = '92123-456'
|
156
|
+
assert subject.valid?
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_remove_dashes_from_address_cep
|
160
|
+
subject = Fixture.payer
|
161
|
+
subject.address_cep = '92123-456'
|
162
|
+
assert_equal '92123456', subject.address_cep
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_validate_presence_of_address_phone_attribute
|
166
|
+
subject = Fixture.payer
|
167
|
+
subject.address_phone = nil
|
168
|
+
assert subject.invalid?, 'should be invalid without an address_phone'
|
169
|
+
subject.address_phone = ''
|
170
|
+
assert subject.invalid?, 'should be invalid without an address_phone'
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_validate_length_of_address_phone_attribute_in_10_or_11_chars
|
174
|
+
subject = Fixture.payer
|
175
|
+
subject.address_phone = '5130405060'
|
176
|
+
assert subject.valid?, 'should accept 10 chars'
|
177
|
+
subject.address_phone = '51930405060'
|
178
|
+
assert subject.valid?, 'should accept 11 chars'
|
179
|
+
subject.address_phone = '215130405060'
|
180
|
+
assert subject.invalid? && subject.errors[:address_phone].present?,
|
181
|
+
'should not accept strings with other than 10 or 11 chars'
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_remove_left_zeros_from_address_phone
|
185
|
+
subject = Fixture.payer
|
186
|
+
subject.address_phone = '05130405060'
|
187
|
+
assert_equal '5130405060', subject.address_phone
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_remove_dashes_from_address_phone
|
191
|
+
subject = Fixture.payer
|
192
|
+
subject.address_phone = '513040-5060'
|
193
|
+
assert_equal '5130405060', subject.address_phone
|
194
|
+
subject.address_phone = '5193040-5060'
|
195
|
+
assert_equal '51930405060', subject.address_phone
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_remove_parenthesis_from_address_phone
|
199
|
+
subject = Fixture.payer
|
200
|
+
subject.address_phone = '(51)30405060'
|
201
|
+
assert_equal '5130405060', subject.address_phone
|
202
|
+
subject.address_phone = '(51)930405060'
|
203
|
+
assert_equal '51930405060', subject.address_phone
|
33
204
|
end
|
34
205
|
|
206
|
+
def test_to_xml_method_uses_the_formatted_version_of_the_address_cep
|
207
|
+
subject = Fixture.payer(address_cep: '92000123')
|
208
|
+
formatter = stub_everything('formatter')
|
209
|
+
formatter.expects(:cep).with('92000123')
|
210
|
+
subject.to_xml(nil, formatter)
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_to_xml_method_uses_the_formatted_version_of_the_address_phone
|
214
|
+
subject = Fixture.payer(address_phone: '5130405060')
|
215
|
+
formatter = stub_everything('formatter')
|
216
|
+
formatter.expects(:phone).with('5130405060')
|
217
|
+
subject.to_xml(nil, formatter)
|
218
|
+
end
|
35
219
|
end
|
@@ -71,7 +71,7 @@ class TestPaymentRequest < Test::Unit::TestCase
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def test_method_to_get_moip_code
|
74
|
-
instruction = Fixture.instruction(Fixture.payer)
|
74
|
+
instruction = Fixture.instruction(payer: Fixture.payer)
|
75
75
|
transparent_request = MyMoip::TransparentRequest.new("your_own_id")
|
76
76
|
VCR.use_cassette('transparent_request') do
|
77
77
|
transparent_request.api_call(instruction)
|
@@ -85,7 +85,7 @@ class TestPaymentRequest < Test::Unit::TestCase
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def test_code_method_should_return_nil_with_blank_response
|
88
|
-
instruction = Fixture.instruction(Fixture.payer)
|
88
|
+
instruction = Fixture.instruction(payer: Fixture.payer)
|
89
89
|
transparent_request = MyMoip::TransparentRequest.new("your_own_id")
|
90
90
|
VCR.use_cassette('transparent_request') do
|
91
91
|
transparent_request.api_call(instruction)
|
@@ -57,7 +57,7 @@ class TestTransparentRequest < Test::Unit::TestCase
|
|
57
57
|
def test_should_provide_the_transaction_id_get_by_the_request
|
58
58
|
request = MyMoip::TransparentRequest.new("some_id")
|
59
59
|
VCR.use_cassette('transparent_request') do
|
60
|
-
request.api_call(Fixture.instruction(Fixture.payer))
|
60
|
+
request.api_call(Fixture.instruction(payer: Fixture.payer))
|
61
61
|
end
|
62
62
|
assert_equal "201210171118501100000001102691", request.id
|
63
63
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mymoip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: builder
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: activemodel
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: rdoc
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -174,6 +190,7 @@ files:
|
|
174
190
|
- lib/mymoip.rb
|
175
191
|
- lib/mymoip/credit_card.rb
|
176
192
|
- lib/mymoip/credit_card_payment.rb
|
193
|
+
- lib/mymoip/formatter.rb
|
177
194
|
- lib/mymoip/instruction.rb
|
178
195
|
- lib/mymoip/json_parser.rb
|
179
196
|
- lib/mymoip/payer.rb
|
@@ -188,6 +205,7 @@ files:
|
|
188
205
|
- test/live_test.rb
|
189
206
|
- test/test_credit_card_payment.rb
|
190
207
|
- test/test_creditcard.rb
|
208
|
+
- test/test_formatter.rb
|
191
209
|
- test/test_instruction.rb
|
192
210
|
- test/test_mymoip.rb
|
193
211
|
- test/test_payer.rb
|
@@ -209,7 +227,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
227
|
version: '0'
|
210
228
|
segments:
|
211
229
|
- 0
|
212
|
-
hash:
|
230
|
+
hash: 3042837852117747253
|
213
231
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
232
|
none: false
|
215
233
|
requirements:
|