mymoip 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/CHANGELOG.md +18 -0
- data/README.md +20 -20
- data/lib/mymoip/commission.rb +6 -2
- data/lib/mymoip/credit_card.rb +3 -11
- data/lib/mymoip/payer.rb +3 -12
- data/lib/mymoip/purchase.rb +40 -0
- data/lib/mymoip/version.rb +3 -0
- data/mymoip.gemspec +26 -87
- data/test/lib/test_commission.rb +121 -0
- data/test/lib/test_credit_card_payment.rb +114 -0
- data/test/lib/test_creditcard.rb +172 -0
- data/test/lib/test_formatter.rb +49 -0
- data/test/lib/test_instruction.rb +217 -0
- data/test/lib/test_mymoip.rb +79 -0
- data/test/lib/test_payer.rb +249 -0
- data/test/lib/test_payment_request.rb +96 -0
- data/test/lib/test_purchase.rb +109 -0
- data/test/lib/test_request.rb +88 -0
- data/test/lib/test_transparent_request.rb +71 -0
- data/test/test_helper.rb +17 -0
- metadata +72 -80
@@ -0,0 +1,249 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class TestPayer < Test::Unit::TestCase
|
4
|
+
def test_getters_for_attributes
|
5
|
+
payer = MyMoip::Payer.new(
|
6
|
+
id: "some id",
|
7
|
+
name: "some name",
|
8
|
+
email: "some email",
|
9
|
+
address_street: "some address_street",
|
10
|
+
address_street_number: "some address_street_number",
|
11
|
+
address_street_extra: "some address_street_extra",
|
12
|
+
address_neighbourhood: "some address_neighbourhood",
|
13
|
+
address_city: "some address_city",
|
14
|
+
address_state: "RS",
|
15
|
+
address_country: "BRA",
|
16
|
+
address_cep: "92123456",
|
17
|
+
address_phone: "5130405060"
|
18
|
+
)
|
19
|
+
|
20
|
+
assert_equal "some id", payer.id
|
21
|
+
assert_equal "some name", payer.name
|
22
|
+
assert_equal "some email", payer.email
|
23
|
+
assert_equal "some address_street", payer.address_street
|
24
|
+
assert_equal "some address_street_number", payer.address_street_number
|
25
|
+
assert_equal "some address_street_extra", payer.address_street_extra
|
26
|
+
assert_equal "some address_neighbourhood", payer.address_neighbourhood
|
27
|
+
assert_equal "some address_city", payer.address_city
|
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_initialization_and_setters_with_string_keys
|
35
|
+
payer = MyMoip::Payer.new(
|
36
|
+
'id' => 'some id',
|
37
|
+
'name' => 'some name',
|
38
|
+
'email' => 'some email',
|
39
|
+
'address_street' => 'some address_street',
|
40
|
+
'address_street_number' => 'some address_street_number',
|
41
|
+
'address_street_extra' => 'some address_street_extra',
|
42
|
+
'address_neighbourhood' => 'some address_neighbourhood',
|
43
|
+
'address_city' => 'some address_city',
|
44
|
+
'address_state' => 'RS',
|
45
|
+
'address_country' => 'BRA',
|
46
|
+
'address_cep' => '92123456',
|
47
|
+
'address_phone' => '5130405060'
|
48
|
+
)
|
49
|
+
|
50
|
+
assert_equal "some id", payer.id
|
51
|
+
assert_equal "some name", payer.name
|
52
|
+
assert_equal "some email", payer.email
|
53
|
+
assert_equal "some address_street", payer.address_street
|
54
|
+
assert_equal "some address_street_number", payer.address_street_number
|
55
|
+
assert_equal "some address_street_extra", payer.address_street_extra
|
56
|
+
assert_equal "some address_neighbourhood", payer.address_neighbourhood
|
57
|
+
assert_equal "some address_city", payer.address_city
|
58
|
+
assert_equal "RS", payer.address_state
|
59
|
+
assert_equal "BRA", payer.address_country
|
60
|
+
assert_equal "92123456", payer.address_cep
|
61
|
+
assert_equal "5130405060", payer.address_phone
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_validate_presence_of_id_attribute
|
65
|
+
subject = Fixture.payer
|
66
|
+
subject.id = nil
|
67
|
+
assert subject.invalid?, 'should be invalid without an id'
|
68
|
+
subject.id = ''
|
69
|
+
assert subject.invalid?, 'should be invalid without an id'
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_validate_presence_of_name_attribute
|
73
|
+
subject = Fixture.payer
|
74
|
+
subject.name = nil
|
75
|
+
assert subject.invalid?, 'should be invalid without an name'
|
76
|
+
subject.name = ''
|
77
|
+
assert subject.invalid?, 'should be invalid without an name'
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_validate_presence_of_email_attribute
|
81
|
+
subject = Fixture.payer
|
82
|
+
subject.email = nil
|
83
|
+
assert subject.invalid?, 'should be invalid without an email'
|
84
|
+
subject.email = ''
|
85
|
+
assert subject.invalid?, 'should be invalid without an email'
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_validate_presence_of_address_street_attribute
|
89
|
+
subject = Fixture.payer
|
90
|
+
subject.address_street = nil
|
91
|
+
assert subject.invalid?, 'should be invalid without an address_street'
|
92
|
+
subject.address_street = ''
|
93
|
+
assert subject.invalid?, 'should be invalid without an address_street'
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_validate_presence_of_address_street_number_attribute
|
97
|
+
subject = Fixture.payer
|
98
|
+
subject.address_street_number = nil
|
99
|
+
assert subject.invalid?, 'should be invalid without an address_street_number'
|
100
|
+
subject.address_street_number = ''
|
101
|
+
assert subject.invalid?, 'should be invalid without an address_street_number'
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_validate_presence_of_address_neighbourhood_attribute
|
105
|
+
subject = Fixture.payer
|
106
|
+
subject.address_neighbourhood = nil
|
107
|
+
assert subject.invalid?, 'should be invalid without an address_neighbourhood'
|
108
|
+
subject.address_neighbourhood = ''
|
109
|
+
assert subject.invalid?, 'should be invalid without an address_neighbourhood'
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_validate_presence_of_address_city_attribute
|
113
|
+
subject = Fixture.payer
|
114
|
+
subject.address_city = nil
|
115
|
+
assert subject.invalid?, 'should be invalid without an address_city'
|
116
|
+
subject.address_city = ''
|
117
|
+
assert subject.invalid?, 'should be invalid without an address_city'
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_validate_presence_of_address_state_attribute
|
121
|
+
subject = Fixture.payer
|
122
|
+
subject.address_state = nil
|
123
|
+
assert subject.invalid?, 'should be invalid without an address_state'
|
124
|
+
subject.address_state = ''
|
125
|
+
assert subject.invalid?, 'should be invalid without an address_state'
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_validate_length_of_address_state_attribute_in_2_chars
|
129
|
+
subject = Fixture.payer
|
130
|
+
subject.address_state = 'RS'
|
131
|
+
assert subject.valid?, 'should accept 2 chars'
|
132
|
+
subject.address_state = 'RSS'
|
133
|
+
assert subject.invalid? && subject.errors[:address_state].present?,
|
134
|
+
'should not accept strings with other than 2 chars'
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_upcase_assigned_address_state
|
138
|
+
subject = Fixture.payer
|
139
|
+
subject.address_state = 'rs'
|
140
|
+
assert_equal 'RS', subject.address_state
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_validate_presence_of_address_country_attribute
|
144
|
+
subject = Fixture.payer
|
145
|
+
subject.address_country = nil
|
146
|
+
assert subject.invalid?, 'should be invalid without an address_country'
|
147
|
+
subject.address_country = ''
|
148
|
+
assert subject.invalid?, 'should be invalid without an address_country'
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_validate_length_of_address_country_attribute_in_3_chars
|
152
|
+
subject = Fixture.payer
|
153
|
+
subject.address_country = 'BRA'
|
154
|
+
assert subject.valid?, 'should accept 3 chars'
|
155
|
+
subject.address_country = 'BR'
|
156
|
+
assert subject.invalid? && subject.errors[:address_country].present?,
|
157
|
+
'should not accept strings with other than 3 chars'
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_upcase_assigned_address_country
|
161
|
+
subject = Fixture.payer
|
162
|
+
subject.address_country = 'bra'
|
163
|
+
assert_equal 'BRA', subject.address_country
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_validate_presence_of_address_cep_attribute
|
167
|
+
subject = Fixture.payer
|
168
|
+
subject.address_cep = nil
|
169
|
+
assert subject.invalid?, 'should be invalid without an address_cep'
|
170
|
+
subject.address_cep = ''
|
171
|
+
assert subject.invalid?, 'should be invalid without an address_cep'
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_validate_length_of_address_cep_attribute_in_2_chars
|
175
|
+
subject = Fixture.payer
|
176
|
+
subject.address_cep = '92123456'
|
177
|
+
assert subject.valid?, 'should accept 8 chars'
|
178
|
+
subject.address_cep = '921234560000'
|
179
|
+
assert subject.invalid? && subject.errors[:address_cep].present?,
|
180
|
+
'should not accept strings with other than 8 chars'
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_dont_count_dashes_in_the_address_cep_length_validation
|
184
|
+
subject = Fixture.payer
|
185
|
+
subject.address_cep = '92123-456'
|
186
|
+
assert subject.valid?
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_remove_dashes_from_address_cep
|
190
|
+
subject = Fixture.payer
|
191
|
+
subject.address_cep = '92123-456'
|
192
|
+
assert_equal '92123456', subject.address_cep
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_validate_presence_of_address_phone_attribute
|
196
|
+
subject = Fixture.payer
|
197
|
+
subject.address_phone = nil
|
198
|
+
assert subject.invalid?, 'should be invalid without an address_phone'
|
199
|
+
subject.address_phone = ''
|
200
|
+
assert subject.invalid?, 'should be invalid without an address_phone'
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_validate_length_of_address_phone_attribute_in_10_or_11_chars
|
204
|
+
subject = Fixture.payer
|
205
|
+
subject.address_phone = '5130405060'
|
206
|
+
assert subject.valid?, 'should accept 10 chars'
|
207
|
+
subject.address_phone = '51930405060'
|
208
|
+
assert subject.valid?, 'should accept 11 chars'
|
209
|
+
subject.address_phone = '215130405060'
|
210
|
+
assert subject.invalid? && subject.errors[:address_phone].present?,
|
211
|
+
'should not accept strings with other than 10 or 11 chars'
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_remove_left_zeros_from_address_phone
|
215
|
+
subject = Fixture.payer
|
216
|
+
subject.address_phone = '05130405060'
|
217
|
+
assert_equal '5130405060', subject.address_phone
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_remove_dashes_from_address_phone
|
221
|
+
subject = Fixture.payer
|
222
|
+
subject.address_phone = '513040-5060'
|
223
|
+
assert_equal '5130405060', subject.address_phone
|
224
|
+
subject.address_phone = '5193040-5060'
|
225
|
+
assert_equal '51930405060', subject.address_phone
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_remove_parenthesis_from_address_phone
|
229
|
+
subject = Fixture.payer
|
230
|
+
subject.address_phone = '(51)30405060'
|
231
|
+
assert_equal '5130405060', subject.address_phone
|
232
|
+
subject.address_phone = '(51)930405060'
|
233
|
+
assert_equal '51930405060', subject.address_phone
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_to_xml_method_uses_the_formatted_version_of_the_address_cep
|
237
|
+
subject = Fixture.payer(address_cep: '92000123')
|
238
|
+
formatter = stub_everything('formatter')
|
239
|
+
formatter.expects(:cep).with('92000123')
|
240
|
+
subject.to_xml(nil, formatter)
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_to_xml_method_uses_the_formatted_version_of_the_address_phone
|
244
|
+
subject = Fixture.payer(address_phone: '5130405060')
|
245
|
+
formatter = stub_everything('formatter')
|
246
|
+
formatter.expects(:phone).with('5130405060')
|
247
|
+
subject.to_xml(nil, formatter)
|
248
|
+
end
|
249
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative '../test_helper'
|
3
|
+
|
4
|
+
class TestPaymentRequest < Test::Unit::TestCase
|
5
|
+
def test_http_method_as_get
|
6
|
+
assert_equal :get, MyMoip::PaymentRequest::HTTP_METHOD
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_path
|
10
|
+
assert_equal "/rest/pagamento?callback=?", MyMoip::PaymentRequest::PATH
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_non_auth_requirement
|
14
|
+
assert_equal false, MyMoip::PaymentRequest::REQUIRES_AUTH
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_generate_json
|
18
|
+
HTTParty.stubs(:send).returns("<html>some_result</html>")
|
19
|
+
request = MyMoip::PaymentRequest.new("id")
|
20
|
+
|
21
|
+
JSON.expects(:generate).with(
|
22
|
+
pagamentoWidget: {
|
23
|
+
referer: "http://localhost",
|
24
|
+
token: "big_transparent_token",
|
25
|
+
dadosPagamento: {payment: "attributes"}
|
26
|
+
}
|
27
|
+
)
|
28
|
+
request_data = stub(to_json: {payment: "attributes"})
|
29
|
+
request.api_call(request_data, token: "big_transparent_token", referer_url: "http://localhost")
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_gets_default_referer_if_another_isnt_passed
|
33
|
+
MyMoip.default_referer_url = "http://localhost/default"
|
34
|
+
HTTParty.stubs(:send).returns("<html>some_result</html>")
|
35
|
+
request = MyMoip::PaymentRequest.new("id")
|
36
|
+
|
37
|
+
JSON.expects(:generate).with(
|
38
|
+
pagamentoWidget: {
|
39
|
+
referer: MyMoip.default_referer_url,
|
40
|
+
token: "big_transparent_token",
|
41
|
+
dadosPagamento: {payment: "attributes"}
|
42
|
+
}
|
43
|
+
)
|
44
|
+
request_data = stub(to_json: {payment: "attributes"})
|
45
|
+
request.api_call(request_data, token: "big_transparent_token")
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_successful_status
|
49
|
+
MyMoip.default_referer_url = "http://localhost/default"
|
50
|
+
HTTParty.stubs(:send).returns(
|
51
|
+
JSON.parse '{"Status":"EmAnalise","Codigo":0,"CodigoRetorno":"","TaxaMoIP":"7.79","StatusPagamento":"Sucesso","Classificacao":{"Codigo":999,"Descricao":"Não suportado no ambiente Sandbox"},"CodigoMoIP":77316,"Mensagem":"Requisição processada com sucesso","TotalPago":"100.00"}'
|
52
|
+
)
|
53
|
+
request = MyMoip::PaymentRequest.new("id")
|
54
|
+
|
55
|
+
request_data = stub(to_json: {payment: "attributes"})
|
56
|
+
request.api_call(request_data, token: "big_transparent_token")
|
57
|
+
assert request.success?
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_success_method_returns_false_in_payments_already_made
|
61
|
+
MyMoip.default_referer_url = "http://localhost/default"
|
62
|
+
HTTParty.stubs(:send).returns(
|
63
|
+
JSON.parse '{"Codigo":236,"StatusPagamento":"Falha","Mensagem":"Pagamento já foi realizado"}'
|
64
|
+
)
|
65
|
+
request = MyMoip::PaymentRequest.new("id")
|
66
|
+
|
67
|
+
request_data = stub(to_json: {payment: "attributes"})
|
68
|
+
request.api_call(request_data, token: "big_transparent_token")
|
69
|
+
assert !request.success?
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_method_to_get_moip_code
|
73
|
+
instruction = Fixture.instruction(payer: Fixture.payer)
|
74
|
+
transparent_request = MyMoip::TransparentRequest.new("your_own_id")
|
75
|
+
VCR.use_cassette('transparent_request') do
|
76
|
+
transparent_request.api_call(instruction)
|
77
|
+
end
|
78
|
+
credit_card_payment = MyMoip::CreditCardPayment.new(Fixture.credit_card, 1)
|
79
|
+
payment_request = MyMoip::PaymentRequest.new("your_own_id")
|
80
|
+
VCR.use_cassette('payment_request') do
|
81
|
+
payment_request.api_call(credit_card_payment, token: transparent_request.token)
|
82
|
+
end
|
83
|
+
assert_equal 102596, payment_request.code
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_code_method_should_return_nil_with_blank_response
|
87
|
+
instruction = Fixture.instruction(payer: Fixture.payer)
|
88
|
+
transparent_request = MyMoip::TransparentRequest.new("your_own_id")
|
89
|
+
VCR.use_cassette('transparent_request') do
|
90
|
+
transparent_request.api_call(instruction)
|
91
|
+
end
|
92
|
+
credit_card_payment = MyMoip::CreditCardPayment.new(Fixture.credit_card, 1)
|
93
|
+
payment_request = MyMoip::PaymentRequest.new("your_own_id")
|
94
|
+
assert_nil payment_request.code
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
def cc_attrs(attrs = {})
|
4
|
+
{
|
5
|
+
logo: :visa,
|
6
|
+
card_number: '4916654211627608',
|
7
|
+
expiration_date: '06/15',
|
8
|
+
security_code: '000',
|
9
|
+
owner_name: 'Juquinha da Rocha',
|
10
|
+
owner_birthday: '03/11/1980',
|
11
|
+
owner_phone: '5130405060',
|
12
|
+
owner_cpf: '52211670695'
|
13
|
+
}.merge(attrs)
|
14
|
+
end
|
15
|
+
|
16
|
+
def payer_attrs(attrs = {})
|
17
|
+
{
|
18
|
+
id: rand,
|
19
|
+
name: 'Juquinha da Rocha',
|
20
|
+
email: 'juquinha@rocha.com',
|
21
|
+
address_street: 'Felipe Neri',
|
22
|
+
address_street_number: '406',
|
23
|
+
address_street_extra: 'Sala 501',
|
24
|
+
address_neighbourhood: 'Auxiliadora',
|
25
|
+
address_city: 'Porto Alegre',
|
26
|
+
address_state: 'RS',
|
27
|
+
address_country: 'BRA',
|
28
|
+
address_cep: '90440150',
|
29
|
+
address_phone: '5130405060'
|
30
|
+
}.merge(attrs)
|
31
|
+
end
|
32
|
+
|
33
|
+
class TestPurchase < Test::Unit::TestCase
|
34
|
+
def setup
|
35
|
+
MyMoip::Request.any_instance.stubs(:api_call)
|
36
|
+
MyMoip::PaymentRequest.any_instance.stubs(:api_call)
|
37
|
+
MyMoip::TransparentRequest.any_instance.stubs(:api_call)
|
38
|
+
end
|
39
|
+
|
40
|
+
def subject
|
41
|
+
MyMoip::Purchase.new(id: '42',
|
42
|
+
price: 400,
|
43
|
+
reason: 'Payment of my product',
|
44
|
+
credit_card: cc_attrs,
|
45
|
+
payer: payer_attrs)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_new_objects_stores_already_initialized_instance_of_credit_ard
|
49
|
+
assert subject.credit_card.kind_of?(MyMoip::CreditCard)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_new_objects_stores_already_initialized_instance_of_payer
|
53
|
+
assert subject.payer.kind_of?(MyMoip::Payer)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_checkout_uses_initialized_id_for_logging
|
57
|
+
MyMoip::PaymentRequest.expects(:new).
|
58
|
+
with('42').
|
59
|
+
returns(stub_everything)
|
60
|
+
subject.checkout!
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_checkout_instruction_uses_a_generated_id_for_instruction
|
64
|
+
MyMoip::Instruction.expects(:new).
|
65
|
+
with(has_entry(id: subject.id)).
|
66
|
+
returns(stub_everything)
|
67
|
+
subject.checkout!
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_checkout_instruction_uses_initialized_reason
|
71
|
+
MyMoip::Instruction.expects(:new).
|
72
|
+
with(has_entry(payment_reason: 'Payment of my product')).
|
73
|
+
returns(stub_everything)
|
74
|
+
subject.checkout!
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_checkout_instruction_uses_initialized_price
|
78
|
+
MyMoip::Instruction.expects(:new).
|
79
|
+
with(has_entry(values: [400.0])).
|
80
|
+
returns(stub_everything)
|
81
|
+
subject.checkout!
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_checkouts_transparent_request_uses_initialized_id_for_payment_request_logging
|
85
|
+
MyMoip::TransparentRequest.expects(:new).
|
86
|
+
with('42').
|
87
|
+
returns(stub_everything)
|
88
|
+
subject.checkout!
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_checkouts_transparent_request_confirm_request_with_authorized_token
|
92
|
+
MyMoip::Purchase.any_instance.stubs(:get_authorization!).
|
93
|
+
returns(stub('MyMoip request', token: 'abc'))
|
94
|
+
|
95
|
+
MyMoip::PaymentRequest.any_instance.expects(:api_call).
|
96
|
+
with(anything, has_entry(token: 'abc')).
|
97
|
+
returns(stub_everything)
|
98
|
+
subject.checkout!
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_checkouts_transparent_request_assigns_its_code
|
102
|
+
MyMoip::PaymentRequest.any_instance.stubs(:success?).returns(true)
|
103
|
+
MyMoip::PaymentRequest.any_instance.stubs(:code).returns('foo_bar')
|
104
|
+
purchase = subject
|
105
|
+
purchase.checkout!
|
106
|
+
|
107
|
+
assert_equal 'foo_bar', purchase.code
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class TestRequest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@default_environment = MyMoip.environment
|
6
|
+
@default_key = MyMoip.key
|
7
|
+
@default_token = MyMoip.token
|
8
|
+
@default_logger = MyMoip.logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
MyMoip.environment = @default_environment
|
13
|
+
MyMoip.key = @default_key
|
14
|
+
MyMoip.token = @default_token
|
15
|
+
MyMoip.logger = @default_logger
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_initializes_receiving_data_and_optional_id
|
19
|
+
request = MyMoip::Request.new("request_id")
|
20
|
+
assert_equal "request_id", request.id
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_logs_api_call_method_in_info_level
|
24
|
+
logger = stub_everything
|
25
|
+
request = MyMoip::Request.new("request_id")
|
26
|
+
params = {
|
27
|
+
http_method: :post, body: "<pretty><xml></xml></pretty>", path: "/ws/alpha/EnviarInstrucao/Unica"
|
28
|
+
}
|
29
|
+
|
30
|
+
HTTParty.stubs(:send).returns("<html>some_result</html>")
|
31
|
+
logger.expects(:info).at_least_once.
|
32
|
+
with(regexp_matches(/being sent to MoIP/))
|
33
|
+
|
34
|
+
request.api_call(params, logger: logger)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_logs_api_call_method_parameters_in_debug_level
|
38
|
+
logger = stub_everything
|
39
|
+
request = MyMoip::Request.new("request_id")
|
40
|
+
params = {
|
41
|
+
http_method: :post, body: "<pretty><xml></xml></pretty>", path: "/ws/alpha/EnviarInstrucao/Unica"
|
42
|
+
}
|
43
|
+
|
44
|
+
HTTParty.stubs(:send).returns("<html>some_result</html>")
|
45
|
+
logger.expects(:debug).at_least_once.
|
46
|
+
with(regexp_matches(/request_id.+<pretty><xml><\/xml><\/pretty>/))
|
47
|
+
|
48
|
+
request.api_call(params, logger: logger)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_logs_api_call_response_in_debug_level
|
52
|
+
logger = stub_everything
|
53
|
+
request = MyMoip::Request.new("request_id")
|
54
|
+
params = {
|
55
|
+
http_method: :post, body: "<pretty><xml></xml></pretty>", path: "/ws/alpha/EnviarInstrucao/Unica"
|
56
|
+
}
|
57
|
+
|
58
|
+
HTTParty.stubs(:send).returns("<html>some_result</html>")
|
59
|
+
logger.expects(:debug).at_least_once.
|
60
|
+
with(regexp_matches(/request_id.+<html>some_result<\/html>/))
|
61
|
+
|
62
|
+
request.api_call(params, logger: logger)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_raises_error_before_api_calls_without_a_key_set
|
66
|
+
subject = MyMoip::Request.new('request_id')
|
67
|
+
MyMoip.sandbox_key = nil
|
68
|
+
assert_raises StandardError do
|
69
|
+
subject.api_call({})
|
70
|
+
end
|
71
|
+
MyMoip.sandbox_key = ''
|
72
|
+
assert_raises StandardError do
|
73
|
+
subject.api_call({})
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_raises_error_before_api_calls_without_a_token_set
|
78
|
+
subject = MyMoip::Request.new('request_id')
|
79
|
+
MyMoip.sandbox_token = nil
|
80
|
+
assert_raises StandardError do
|
81
|
+
subject.api_call({})
|
82
|
+
end
|
83
|
+
MyMoip.sandbox_token = ''
|
84
|
+
assert_raises StandardError do
|
85
|
+
subject.api_call({})
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class TestTransparentRequest < Test::Unit::TestCase
|
4
|
+
def test_http_method_as_post
|
5
|
+
assert_equal :post, MyMoip::TransparentRequest::HTTP_METHOD
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_path
|
9
|
+
assert_equal "/ws/alpha/EnviarInstrucao/Unica", MyMoip::TransparentRequest::PATH
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_auth_requirement
|
13
|
+
assert_equal true, MyMoip::TransparentRequest::REQUIRES_AUTH
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_success_method_with_valid_json
|
17
|
+
HTTParty.stubs(:send).returns(
|
18
|
+
{"EnviarInstrucaoUnicaResponse"=>{"xmlns:ns1"=>"http://www.moip.com.br/ws/alpha/", "Resposta"=>{"ID"=>"201208081614306080000000928569", "Status"=>"Sucesso", "Token"=>"G290E1H230N8L0M8J1K6F1F4B3T0N610K8B0S0H0I0T0T0E029Y2R8H5Y6H9"}}}
|
19
|
+
)
|
20
|
+
request = MyMoip::TransparentRequest.new("some_id")
|
21
|
+
request_data = stub(to_xml: "<anydata></anydata>")
|
22
|
+
request.api_call request_data
|
23
|
+
assert request.success?
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_success_method_with_failed_response
|
27
|
+
HTTParty.stubs(:send).returns(
|
28
|
+
{"EnviarInstrucaoUnicaResponse"=>{"xmlns:ns1"=>"http://www.moip.com.br/ws/alpha/", "Resposta"=>{"Status"=>"Falha"}}}
|
29
|
+
)
|
30
|
+
request = MyMoip::TransparentRequest.new("some_id")
|
31
|
+
request_data = stub(to_xml: "<anydata></anydata>")
|
32
|
+
request.api_call request_data
|
33
|
+
assert !request.success?
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_success_method_with_requests_that_hasnt_be_made
|
37
|
+
request = MyMoip::TransparentRequest.new("some_id")
|
38
|
+
assert !request.success?
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_provides_token_when_has_a_valid_response
|
42
|
+
HTTParty.stubs(:send).returns(
|
43
|
+
{"EnviarInstrucaoUnicaResponse"=>{"xmlns:ns1"=>"http://www.moip.com.br/ws/alpha/", "Resposta"=>{"ID"=>"201208081614306080000000928569", "Status"=>"Sucesso", "Token"=>"token"}}}
|
44
|
+
)
|
45
|
+
request = MyMoip::TransparentRequest.new("some_id")
|
46
|
+
request_data = stub(to_xml: "<anydata></anydata>")
|
47
|
+
request.api_call request_data
|
48
|
+
assert_equal "token", request.token
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_provides_token_with_requests_that_hasnt_be_made
|
52
|
+
request = MyMoip::TransparentRequest.new("some_id")
|
53
|
+
assert_equal nil, request.token
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_provide_the_transaction_id_get_by_the_request
|
57
|
+
request = MyMoip::TransparentRequest.new("some_id")
|
58
|
+
VCR.use_cassette('transparent_request') do
|
59
|
+
request.api_call(Fixture.instruction(payer: Fixture.payer))
|
60
|
+
end
|
61
|
+
assert_equal "201210171118501100000001102691", request.id
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_provide_the_transaction_id_get_by_the_request_with_commissions_feature
|
65
|
+
request = MyMoip::TransparentRequest.new("some_id")
|
66
|
+
VCR.use_cassette('transparent_request_with_commissions') do
|
67
|
+
request.api_call Fixture.instruction(commissions: [Fixture.commission])
|
68
|
+
end
|
69
|
+
assert_equal "YOUR_REQUEST_ID", request.id
|
70
|
+
end
|
71
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'mocha/setup'
|
3
|
+
require 'vcr'
|
4
|
+
|
5
|
+
VCR.configure do |c|
|
6
|
+
c.cassette_library_dir = 'test/fixtures/vcr_cassettes'
|
7
|
+
c.hook_into :webmock
|
8
|
+
end
|
9
|
+
|
10
|
+
require_relative 'live_test'
|
11
|
+
require_relative 'fixtures/fixture'
|
12
|
+
Dir[File.dirname(__FILE__) + "/lib/*.rb"].each { |file| require file }
|
13
|
+
|
14
|
+
MyMoip.sandbox_key = 'YOUR_MOIP_KEY'
|
15
|
+
MyMoip.sandbox_token = 'YOUR_MOIP_TOKEN'
|
16
|
+
MyMoip.logger = Logger.new('/dev/null')
|
17
|
+
$VERBOSE = nil
|