openpay 0.9.8
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 +17 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/OpenPay.iml +614 -0
- data/.idea/dictionaries/ronnie.xml +7 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/misc.xml +5 -0
- data/.idea/modules.xml +9 -0
- data/.idea/runConfigurations/Run_spec__bankaccounts_spec___OpenPay.xml +37 -0
- data/.idea/runConfigurations/Run_spec__customers_spec___OpenPay.xml +37 -0
- data/.idea/runConfigurations/all_specs.xml +41 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +7 -0
- data/Gemfile +11 -0
- data/LICENSE.txt +13 -0
- data/OpenPay.gemspec +24 -0
- data/README.md +370 -0
- data/Rakefile +1 -0
- data/lib/OpenPay/Cards.rb +76 -0
- data/lib/OpenPay/Charges.rb +79 -0
- data/lib/OpenPay/Customers.rb +195 -0
- data/lib/OpenPay/Fees.rb +5 -0
- data/lib/OpenPay/Payouts.rb +59 -0
- data/lib/OpenPay/Plans.rb +28 -0
- data/lib/OpenPay/Subscriptions.rb +58 -0
- data/lib/OpenPay/Transfers.rb +43 -0
- data/lib/OpenPay/bankaccounts.rb +66 -0
- data/lib/OpenPay/errors/open_pay_exception.rb +51 -0
- data/lib/OpenPay/errors/open_pay_exception_factory.rb +58 -0
- data/lib/OpenPay/errors/openpay_connection_exception.rb +3 -0
- data/lib/OpenPay/errors/openpay_transaction_exception.rb +5 -0
- data/lib/OpenPay/open_pay_resource.rb +242 -0
- data/lib/OpenPay/open_pay_resource_factory.rb +10 -0
- data/lib/OpenPay/openpay_api.rb +63 -0
- data/lib/OpenPay/version.rb +3 -0
- data/lib/openpay.rb +34 -0
- data/test/Factories.rb +258 -0
- data/test/spec/bankaccounts_spec.rb +187 -0
- data/test/spec/cards_spec.rb +411 -0
- data/test/spec/charges_spec.rb +377 -0
- data/test/spec/customers_spec.rb +230 -0
- data/test/spec/exceptions_spec.rb +138 -0
- data/test/spec/fees_spec.rb +113 -0
- data/test/spec/openpayresource_spec.rb +52 -0
- data/test/spec/payouts_spec.rb +197 -0
- data/test/spec/plans_spec.rb +229 -0
- data/test/spec/subscriptions_spec.rb +228 -0
- data/test/spec/transfers_spec.rb +221 -0
- data/test/spec_helper.rb +16 -0
- metadata +135 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
|
3
|
+
|
4
|
+
describe 'OpenPayResource' do
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
before(:all) do
|
10
|
+
|
11
|
+
@merchant_id='mywvupjjs9xdnryxtplq'
|
12
|
+
@private_key='sk_92b25d3baec149e6b428d81abfe37006'
|
13
|
+
|
14
|
+
@openpay=OpenpayApi.new(@merchant_id,@private_key)
|
15
|
+
@cards=@openpay.create(:cards)
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
describe '.hash2json' do
|
21
|
+
|
22
|
+
|
23
|
+
it 'converts a ruby hash into a json string' do
|
24
|
+
card_hash = FactoryGirl.build(:valid_card, holder_name: 'Juan')
|
25
|
+
json=@cards.hash2json(card_hash)
|
26
|
+
expect(json).to have_json_path('holder_name')
|
27
|
+
expect(json).to have_json_path('expiration_year')
|
28
|
+
expect(json).to have_json_path('bank_code')
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
describe '.json2hash' do
|
37
|
+
|
38
|
+
|
39
|
+
it 'converts json into a ruby hash' do
|
40
|
+
card_hash = FactoryGirl.build(:valid_card, holder_name: 'Pepe')
|
41
|
+
json=@cards.hash2json(card_hash)
|
42
|
+
jash=@cards.json2hash(json)
|
43
|
+
expect(jash).to be_a Hash
|
44
|
+
expect(jash['holder_name']).to match 'Pepe'
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
|
2
|
+
require '../spec_helper'
|
3
|
+
|
4
|
+
describe Payouts do
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
|
8
|
+
@merchant_id='mywvupjjs9xdnryxtplq'
|
9
|
+
@private_key='sk_92b25d3baec149e6b428d81abfe37006'
|
10
|
+
|
11
|
+
@openpay=OpenpayApi.new(@merchant_id, @private_key)
|
12
|
+
@payouts=@openpay.create(:payouts)
|
13
|
+
|
14
|
+
@customers=@openpay.create(:customers)
|
15
|
+
@cards=@openpay.create(:cards)
|
16
|
+
@charges=@openpay.create(:charges)
|
17
|
+
|
18
|
+
@bank_accounts=@openpay.create(:bankaccounts)
|
19
|
+
|
20
|
+
@fees=@openpay.create(:fees)
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
describe '.create' do
|
26
|
+
|
27
|
+
it 'creates a merchant payout' do
|
28
|
+
|
29
|
+
payout_hash= FactoryGirl.build(:payout_card, destination_id: 'b4ravkgvpir9izop1faz',amount: 100)
|
30
|
+
|
31
|
+
payout=@payouts.create(payout_hash)
|
32
|
+
expect(@payouts.get(payout['id'])['amount']).to be_within(0.1).of(100)
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
it 'creates a customer payout using a card' do
|
40
|
+
#We need to charge 1st into the card we are going to use
|
41
|
+
|
42
|
+
#create new customer
|
43
|
+
customer_hash= FactoryGirl.build(:customer)
|
44
|
+
customer=@customers.create(customer_hash)
|
45
|
+
|
46
|
+
#create new customer card
|
47
|
+
card_hash=FactoryGirl.build(:valid_card)
|
48
|
+
card=@cards.create(card_hash, customer['id'])
|
49
|
+
|
50
|
+
#create charge
|
51
|
+
charge_hash=FactoryGirl.build(:card_charge, source_id:card['id'],order_id: card['id'])
|
52
|
+
charge=@charges.create(charge_hash,customer['id'])
|
53
|
+
|
54
|
+
payout_hash= FactoryGirl.build(:payout_card, destination_id: card['id'],amount: 400)
|
55
|
+
|
56
|
+
payout=@payouts.create(payout_hash,customer['id'])
|
57
|
+
expect( @payouts.get( payout['id'],customer['id'] )['amount']).to be_within(0.1).of(400)
|
58
|
+
|
59
|
+
#cleanup
|
60
|
+
@cards.delete_all(customer['id'])
|
61
|
+
@bank_accounts.delete_all(customer['id'])
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
it 'creates a customer payout using a bank account' do
|
68
|
+
|
69
|
+
#create new customer
|
70
|
+
customer_hash= FactoryGirl.build(:customer)
|
71
|
+
customer=@customers.create(customer_hash)
|
72
|
+
|
73
|
+
#create new customer card
|
74
|
+
card_hash=FactoryGirl.build(:valid_card)
|
75
|
+
card=@cards.create(card_hash, customer['id'])
|
76
|
+
|
77
|
+
#create new customer bank account
|
78
|
+
account_hash=FactoryGirl.build(:bank_account)
|
79
|
+
account=@bank_accounts.create(account_hash, customer['id'])
|
80
|
+
|
81
|
+
#create charge
|
82
|
+
charge_hash=FactoryGirl.build(:card_charge, source_id:card['id'],order_id: card['id'])
|
83
|
+
charge=@charges.create(charge_hash,customer['id'])
|
84
|
+
|
85
|
+
payout_hash= FactoryGirl.build(:payout_card, destination_id: account['id'],amount: 400)
|
86
|
+
|
87
|
+
payout=@payouts.create(payout_hash,customer['id'])
|
88
|
+
expect( @payouts.get( payout['id'],customer['id'] )['amount']).to be_within(0.1).of(400)
|
89
|
+
|
90
|
+
#cleanup
|
91
|
+
@cards.delete_all(customer['id'])
|
92
|
+
@bank_accounts.delete_all(customer['id'])
|
93
|
+
# @customers.delete_all
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '.get' do
|
101
|
+
|
102
|
+
it 'gets a merchant payout' do
|
103
|
+
|
104
|
+
payout_hash= FactoryGirl.build(:payout_card, destination_id: 'b4ravkgvpir9izop1faz',amount: 10)
|
105
|
+
|
106
|
+
payout=@payouts.create(payout_hash)
|
107
|
+
expect(@payouts.get(payout['id'])['amount']).to be_within(0.1).of(10)
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'gets a customer payout' do
|
112
|
+
#create new customer
|
113
|
+
customer_hash= FactoryGirl.build(:customer)
|
114
|
+
customer=@customers.create(customer_hash)
|
115
|
+
|
116
|
+
#create new customer card
|
117
|
+
card_hash=FactoryGirl.build(:valid_card)
|
118
|
+
card=@cards.create(card_hash, customer['id'])
|
119
|
+
|
120
|
+
#create charge
|
121
|
+
charge_hash=FactoryGirl.build(:card_charge, source_id:card['id'],order_id: card['id'])
|
122
|
+
charge=@charges.create(charge_hash,customer['id'])
|
123
|
+
|
124
|
+
payout_hash= FactoryGirl.build(:payout_card, destination_id: card['id'],amount: 40)
|
125
|
+
|
126
|
+
payout=@payouts.create(payout_hash,customer['id'])
|
127
|
+
|
128
|
+
res=@payouts.get( payout['id'],customer['id'] )
|
129
|
+
expect(res['amount']).to be_within(0.1).of(40)
|
130
|
+
|
131
|
+
#cleanup
|
132
|
+
@cards.delete_all(customer['id'])
|
133
|
+
@bank_accounts.delete_all(customer['id'])
|
134
|
+
#@customers.delete_all
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
describe '.all' do
|
141
|
+
|
142
|
+
it 'all merchant payouts' do
|
143
|
+
expect(@payouts.all.size).to be_a Integer
|
144
|
+
expect(@payouts.all.last['transaction_type']) .to match 'payout'
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'all customer payout' do
|
148
|
+
#create new customer
|
149
|
+
customer_hash= FactoryGirl.build(:customer)
|
150
|
+
customer=@customers.create(customer_hash)
|
151
|
+
|
152
|
+
#create new customer card
|
153
|
+
card_hash=FactoryGirl.build(:valid_card)
|
154
|
+
card=@cards.create(card_hash, customer['id'])
|
155
|
+
|
156
|
+
#create charge
|
157
|
+
charge_hash=FactoryGirl.build(:card_charge, source_id:card['id'],order_id: card['id'])
|
158
|
+
charge=@charges.create(charge_hash,customer['id'])
|
159
|
+
|
160
|
+
payout_hash= FactoryGirl.build(:payout_card, destination_id: card['id'],amount: 40)
|
161
|
+
|
162
|
+
payout=@payouts.create(payout_hash,customer['id'])
|
163
|
+
|
164
|
+
res=@payouts.get( payout['id'],customer['id'] )
|
165
|
+
expect(res['amount']).to be_within(0.1).of(40)
|
166
|
+
|
167
|
+
|
168
|
+
expect(@payouts.all(customer['id']).last['transaction_type']).to match 'payout'
|
169
|
+
|
170
|
+
#cleanup
|
171
|
+
@cards.delete_all(customer['id'])
|
172
|
+
@bank_accounts.delete_all(customer['id'])
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
describe '.each' do
|
179
|
+
|
180
|
+
it 'iterates over all merchant payouts' do
|
181
|
+
|
182
|
+
@payouts.each do |pay|
|
183
|
+
expect(@payouts.get(pay['id'])['transaction_type'] ).to match 'payout'
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'iterates over a given customer payouts' do
|
189
|
+
a_customer=@customers.all.last
|
190
|
+
@payouts.each(a_customer['id']) do |pay|
|
191
|
+
expect(@payouts.get(pay['id'],a_customer['id'])['transaction_type'] ).to match 'payout'
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
|
197
|
+
end
|
@@ -0,0 +1,229 @@
|
|
1
|
+
require '../spec_helper'
|
2
|
+
|
3
|
+
describe Plans do
|
4
|
+
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
|
8
|
+
@merchant_id='mywvupjjs9xdnryxtplq'
|
9
|
+
@private_key='sk_92b25d3baec149e6b428d81abfe37006'
|
10
|
+
|
11
|
+
@openpay=OpenpayApi.new(@merchant_id, @private_key)
|
12
|
+
@customers=@openpay.create(:customers)
|
13
|
+
@plans=@openpay.create(:plans)
|
14
|
+
@subscriptions=@openpay.create(:subscriptions)
|
15
|
+
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
after(:all) do
|
21
|
+
@plans.delete_all
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
describe '.create' do
|
26
|
+
|
27
|
+
|
28
|
+
it 'creates a merchant plan' do
|
29
|
+
|
30
|
+
plan_hash= FactoryGirl.build(:plan, repeat_every: 5)
|
31
|
+
plan=@plans.create(plan_hash)
|
32
|
+
|
33
|
+
|
34
|
+
#validates
|
35
|
+
expect(@plans.get(plan['id'])['repeat_every']).to be 5
|
36
|
+
|
37
|
+
#clean
|
38
|
+
@plans.delete(plan['id'])
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
describe 'get' do
|
48
|
+
|
49
|
+
it 'gets a merchant plan' do
|
50
|
+
|
51
|
+
|
52
|
+
#creates a plan
|
53
|
+
plan_hash= FactoryGirl.build(:plan, repeat_every: 5, amount: 500)
|
54
|
+
plan=@plans.create(plan_hash)
|
55
|
+
|
56
|
+
|
57
|
+
#validates
|
58
|
+
expect(@plans.get(plan['id'])['repeat_every']).to be 5
|
59
|
+
expect(@plans.get(plan['id'])['amount']).to be_within(0.1).of(500)
|
60
|
+
|
61
|
+
|
62
|
+
#clean
|
63
|
+
@plans.delete(plan['id'])
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
it 'fails to get a non existing customer plan' do
|
71
|
+
|
72
|
+
|
73
|
+
#validates
|
74
|
+
expect { @plans.get('111111') }.to raise_exception OpenpayTransactionException
|
75
|
+
begin
|
76
|
+
@plans.get('111111')
|
77
|
+
rescue OpenpayTransactionException => e
|
78
|
+
|
79
|
+
expect(e.description).to match 'The requested resource doesn\'t exist.'
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
describe '.all' do
|
87
|
+
|
88
|
+
it 'returns all customer plans' do
|
89
|
+
|
90
|
+
expect(@plans.all.size).to be_a Integer
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
describe '.update' do
|
98
|
+
|
99
|
+
|
100
|
+
it 'updates an existing customer plan' do
|
101
|
+
|
102
|
+
#creates a plan
|
103
|
+
plan_hash= FactoryGirl.build(:plan, trial_days: 10)
|
104
|
+
plan=@plans.create(plan_hash)
|
105
|
+
|
106
|
+
expect(plan['trial_days']).to be 10
|
107
|
+
|
108
|
+
|
109
|
+
plan_hash= FactoryGirl.build(:plan, trial_days: 100)
|
110
|
+
|
111
|
+
plan=@plans.update(plan_hash, plan['id'])
|
112
|
+
|
113
|
+
expect(plan['trial_days']).to be 100
|
114
|
+
|
115
|
+
#cleanup
|
116
|
+
@plans.delete(plan['id'])
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
it 'fails to update an non existing customer plan' do
|
122
|
+
|
123
|
+
plan_hash= FactoryGirl.build(:plan, trial_days: 100)
|
124
|
+
|
125
|
+
#validates
|
126
|
+
expect { @plans.update(plan_hash, '111111') }.to raise_exception RestClient::ResourceNotFound
|
127
|
+
begin
|
128
|
+
@plans.update(plan_hash, '111111')
|
129
|
+
rescue RestClient::ResourceNotFound => e
|
130
|
+
|
131
|
+
expect(e.http_body).to be_a String
|
132
|
+
expect(e.message).to match '404 Resource Not Found'
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
describe '.each' do
|
143
|
+
|
144
|
+
it 'iterates over all customer plans' do
|
145
|
+
|
146
|
+
#creates a plan
|
147
|
+
plan_hash= FactoryGirl.build(:plan, trial_days: 10)
|
148
|
+
plan=@plans.create(plan_hash)
|
149
|
+
plan1=@plans.create(plan_hash)
|
150
|
+
plan2=@plans.create(plan_hash)
|
151
|
+
|
152
|
+
|
153
|
+
expect(@plans.all.size).to be_a Integer
|
154
|
+
@plans.each do |plan|
|
155
|
+
|
156
|
+
expect(plan['name']).to match 'Curso de ingles'
|
157
|
+
@plans.delete(plan['id'])
|
158
|
+
end
|
159
|
+
|
160
|
+
expect(@plans.all.size).to be_a Integer
|
161
|
+
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
#
|
170
|
+
#describe 'all_subscriptions' do
|
171
|
+
#
|
172
|
+
#
|
173
|
+
# it 'returns all subscriptions for a given plan' do
|
174
|
+
# #creates a plan
|
175
|
+
# plan_hash= FactoryGirl.build(:plan, trial_days: 10)
|
176
|
+
# plan=@plans.create(plan_hash)
|
177
|
+
# expect(@plans.all_subscriptions(plan['id']).size).to be 0
|
178
|
+
#
|
179
|
+
#
|
180
|
+
# #creates subscriptions
|
181
|
+
#
|
182
|
+
# subscription_hash= FactoryGirl.build(:subscription)
|
183
|
+
#
|
184
|
+
# @subscriptions.create(subscription_hash,plan['id'])
|
185
|
+
# @subscriptions.create(subscription_hash,plan['id'])
|
186
|
+
#
|
187
|
+
# expect(@plans.all_subscriptions(plan['id'])).to be 2
|
188
|
+
#
|
189
|
+
# @plans.delete_all(customer['id'])
|
190
|
+
# expect(@plans.all_subscriptions(plan['id'])).to be 0
|
191
|
+
#
|
192
|
+
# end
|
193
|
+
#
|
194
|
+
#
|
195
|
+
#end
|
196
|
+
#
|
197
|
+
#describe '.each_subscription' do
|
198
|
+
#
|
199
|
+
#
|
200
|
+
# it 'itereates over all subscriptions for a given plan' do
|
201
|
+
#
|
202
|
+
# #creates a plan
|
203
|
+
# plan_hash= FactoryGirl.build(:plan, trial_days: 10)
|
204
|
+
# plan=@plans.create(plan_hash)
|
205
|
+
#
|
206
|
+
#
|
207
|
+
# #creates subscriptions
|
208
|
+
#
|
209
|
+
# customer_hash= FactoryGirl.build(:subscription)
|
210
|
+
#
|
211
|
+
# @subscriptions.create(subscription_hash)
|
212
|
+
# @subscriptions.create(subscription_hash)
|
213
|
+
#
|
214
|
+
#
|
215
|
+
# it 'iterates over all paln subscription' do
|
216
|
+
#
|
217
|
+
# @plans.each_subscription do |subscription|
|
218
|
+
# pending 'no esta bien algo le falta'
|
219
|
+
# end
|
220
|
+
#
|
221
|
+
# end
|
222
|
+
# end
|
223
|
+
#end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
|