synapsis 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/synapsis/api_operations/create.rb +1 -5
- data/lib/synapsis/api_operations/edit.rb +1 -5
- data/lib/synapsis/api_operations/view.rb +6 -5
- data/lib/synapsis/api_resource.rb +9 -1
- data/lib/synapsis/bank.rb +25 -29
- data/lib/synapsis/card.rb +10 -0
- data/lib/synapsis/mass_pay.rb +31 -0
- data/lib/synapsis/order.rb +11 -0
- data/lib/synapsis/user.rb +5 -2
- data/lib/synapsis/version.rb +1 -1
- data/lib/synapsis/withdrawal.rb +0 -2
- data/lib/synapsis.rb +2 -0
- data/spec/synapsis/card_spec.rb +44 -0
- data/spec/synapsis/deposit_spec.rb +8 -2
- data/spec/synapsis/mass_pay_spec.rb +129 -0
- data/spec/synapsis/order_spec.rb +34 -10
- data/spec/synapsis/user_spec.rb +20 -0
- data/spec/synapsis/withdrawal_spec.rb +8 -2
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecde15b08bf18590a20a13795e91010562449565
|
4
|
+
data.tar.gz: 5e496bb5ca4b58af878323805c01c0da1248d548
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a47452de08e2b1432cf57b05101c8aeefee2ee0a81ea06c715c55af993dbb075269b216e51d0c16a5d06cd16f730ff3a26072d4940324049b86a085b97bb256f
|
7
|
+
data.tar.gz: c9f6b96d45eecbd844e2f65be73067b071beed149ca43626082c93e89a0812aacffb321b0ba9b08909cd868b6f154f45d503588c0c091727adf5ca64b6f6bb10
|
@@ -1,10 +1,6 @@
|
|
1
1
|
module Synapsis::APIOperations::Create
|
2
2
|
def create_request(params)
|
3
|
-
|
4
|
-
req.headers['Content-Type'] = 'application/json'
|
5
|
-
req.url create_url
|
6
|
-
req.body = JSON.generate(params)
|
7
|
-
end
|
3
|
+
request(:post, create_url, params)
|
8
4
|
end
|
9
5
|
|
10
6
|
def create_url
|
@@ -1,10 +1,6 @@
|
|
1
1
|
module Synapsis::APIOperations::Edit
|
2
2
|
def edit_request(params)
|
3
|
-
|
4
|
-
req.headers['Content-Type'] = 'application/json'
|
5
|
-
req.url edit_url
|
6
|
-
req.body = JSON.generate(params)
|
7
|
-
end
|
3
|
+
request(:post, edit_url, params)
|
8
4
|
end
|
9
5
|
|
10
6
|
def edit_url
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module Synapsis::APIOperations::View
|
2
|
+
def view(params)
|
3
|
+
response = view_request(params)
|
4
|
+
return_response(response)
|
5
|
+
end
|
6
|
+
|
2
7
|
def view_request(params)
|
3
|
-
|
4
|
-
req.headers['Content-Type'] = 'application/json'
|
5
|
-
req.url view_url
|
6
|
-
req.body = JSON.generate(params)
|
7
|
-
end
|
8
|
+
request(:post, view_url, params)
|
8
9
|
end
|
9
10
|
|
10
11
|
def view_url
|
@@ -1,4 +1,12 @@
|
|
1
1
|
class Synapsis::APIResource
|
2
|
+
def self.request(method = :post, url, params)
|
3
|
+
Synapsis.connection.send(method) do |req|
|
4
|
+
req.headers['Content-Type'] = 'application/json'
|
5
|
+
req.url url
|
6
|
+
req.body = JSON.generate(params)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
2
10
|
def self.class_name
|
3
11
|
name.partition('::').last.downcase
|
4
12
|
end
|
@@ -13,7 +21,7 @@ class Synapsis::APIResource
|
|
13
21
|
if response.success?
|
14
22
|
return parsed_response
|
15
23
|
else
|
16
|
-
raise Synapsis::Error, parsed_response['reason']
|
24
|
+
raise Synapsis::Error, parsed_response['reason'] || parsed_response['error_message']
|
17
25
|
end
|
18
26
|
end
|
19
27
|
|
data/lib/synapsis/bank.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class Synapsis::Bank < Synapsis::APIResource
|
2
2
|
include Synapsis::Utilities
|
3
3
|
extend Synapsis::APIOperations::Create
|
4
|
+
extend Synapsis::APIOperations::View
|
4
5
|
|
5
6
|
module AccountClass
|
6
7
|
PERSONAL = 1
|
@@ -37,13 +38,9 @@ class Synapsis::Bank < Synapsis::APIResource
|
|
37
38
|
return_response(added_bank)
|
38
39
|
end
|
39
40
|
|
40
|
-
def self.link(params)
|
41
|
-
partially_linked_bank = Synapsis.connection.post do |req|
|
42
|
-
req.headers['Content-Type'] = 'application/json'
|
43
|
-
req.url "#{API_V2_PATH}bank/login/?is_dev=yes"
|
44
|
-
req.body = JSON.generate(params)
|
45
|
-
end
|
46
41
|
|
42
|
+
def self.link(params)
|
43
|
+
partially_linked_bank = request(:post, bank_link_url, params)
|
47
44
|
parsed_partially_linked_bank = parse_as_synapse_resource(partially_linked_bank)
|
48
45
|
|
49
46
|
if parsed_partially_linked_bank.success
|
@@ -53,15 +50,10 @@ class Synapsis::Bank < Synapsis::APIResource
|
|
53
50
|
|
54
51
|
@access_token = parsed_partially_linked_bank.response.access_token
|
55
52
|
|
56
|
-
new_bank =
|
57
|
-
req.headers['Content-Type'] = 'application/json'
|
58
|
-
req.url "#{API_V2_PATH}bank/mfa/?is_dev=yes"
|
59
|
-
req.body = JSON.generate(params.merge(access_token: @access_token))
|
60
|
-
end
|
61
|
-
|
53
|
+
new_bank = request(:post, bank_mfa_url, params.merge(access_token: @access_token))
|
62
54
|
parsed_new_bank = parse_as_synapse_resource(new_bank)
|
63
55
|
|
64
|
-
if parsed_new_bank.banks
|
56
|
+
if parsed_new_bank.banks # SynapseAPI will return an array of the banks if the MFA process was successful
|
65
57
|
return parsed_new_bank
|
66
58
|
else
|
67
59
|
raise Synapsis::Error, 'Wrong MFA answer.'
|
@@ -71,28 +63,32 @@ class Synapsis::Bank < Synapsis::APIResource
|
|
71
63
|
end
|
72
64
|
end
|
73
65
|
|
74
|
-
def self.view_linked_banks(
|
75
|
-
|
66
|
+
def self.view_linked_banks(oauth_token)
|
67
|
+
response = view_request(oauth_consumer_key: oauth_token)
|
68
|
+
return_response(response)
|
76
69
|
end
|
77
70
|
|
78
71
|
def self.remove(bank_id, oauth_consumer_key)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
bank_id: bank_id,
|
84
|
-
oauth_consumer_key: oauth_consumer_key
|
85
|
-
)
|
86
|
-
end
|
72
|
+
params = {
|
73
|
+
bank_id: bank_id,
|
74
|
+
oauth_consumer_key: oauth_consumer_key
|
75
|
+
}
|
87
76
|
|
77
|
+
response = request(:post, bank_delete_url, params)
|
88
78
|
return_response(response)
|
89
79
|
end
|
90
80
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
81
|
+
private
|
82
|
+
|
83
|
+
def self.bank_link_url
|
84
|
+
"#{API_V2_PATH}bank/login/?is_dev=yes"
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.bank_mfa_url
|
88
|
+
"#{API_V2_PATH}bank/mfa/?is_dev=yes"
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.bank_delete_url
|
92
|
+
"#{API_V2_PATH}bank/delete/"
|
97
93
|
end
|
98
94
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Synapsis::MassPay < Synapsis::APIResource
|
2
|
+
extend Synapsis::APIOperations::Create
|
3
|
+
extend Synapsis::APIOperations::View
|
4
|
+
|
5
|
+
COST_PER_MASS_PAY = 0.1
|
6
|
+
|
7
|
+
def self.cost_per_mass_pay
|
8
|
+
COST_PER_MASS_PAY
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.add(mass_pays:, oauth_consumer_key:)
|
12
|
+
params = {
|
13
|
+
mass_pays: mass_pays,
|
14
|
+
oauth_consumer_key: oauth_consumer_key
|
15
|
+
}
|
16
|
+
|
17
|
+
response = create_request(params)
|
18
|
+
return_response(response)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.show(mass_pay_id: {}, oauth_consumer_key:)
|
22
|
+
params = {
|
23
|
+
id: mass_pay_id,
|
24
|
+
oauth_consumer_key: oauth_consumer_key
|
25
|
+
}
|
26
|
+
|
27
|
+
response = view_request(params)
|
28
|
+
return_response(response)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
data/lib/synapsis/order.rb
CHANGED
@@ -7,6 +7,11 @@ class Synapsis::Order < Synapsis::APIResource
|
|
7
7
|
return_response(response)
|
8
8
|
end
|
9
9
|
|
10
|
+
def self.poll(order_id:)
|
11
|
+
response = request(:post, poll_url, order_id: order_id)
|
12
|
+
return_response(response)
|
13
|
+
end
|
14
|
+
|
10
15
|
def self.synapse_fee(transaction_amount)
|
11
16
|
if transaction_amount > 10
|
12
17
|
0.25
|
@@ -14,5 +19,11 @@ class Synapsis::Order < Synapsis::APIResource
|
|
14
19
|
0.1
|
15
20
|
end
|
16
21
|
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def self.poll_url
|
26
|
+
"#{API_V2_PATH}order/poll"
|
27
|
+
end
|
17
28
|
end
|
18
29
|
|
data/lib/synapsis/user.rb
CHANGED
@@ -15,8 +15,11 @@ class Synapsis::User < Synapsis::APIResource
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.view(oauth_token)
|
18
|
-
|
19
|
-
|
18
|
+
show('oauth_consumer_key' => oauth_token)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.view_linked_banks(oauth_token)
|
22
|
+
Synapsis::Bank.view_linked_banks(oauth_token)
|
20
23
|
end
|
21
24
|
|
22
25
|
private
|
data/lib/synapsis/version.rb
CHANGED
data/lib/synapsis/withdrawal.rb
CHANGED
@@ -6,13 +6,11 @@ class Synapsis::Withdrawal < Synapsis::APIResource
|
|
6
6
|
# Note: If you do not supply the bank_id, Synapse will attempt to withdraw from the primary bank.
|
7
7
|
def self.create(params)
|
8
8
|
response = create_request(params)
|
9
|
-
|
10
9
|
return_response(response)
|
11
10
|
end
|
12
11
|
|
13
12
|
def self.view(params)
|
14
13
|
response = view_request(params)
|
15
|
-
|
16
14
|
return_response(response)
|
17
15
|
end
|
18
16
|
|
data/lib/synapsis.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Synapsis::Card do
|
4
|
+
let!(:users_consumer_key) { 'dcd234d9d9fb55ad9711c4c41e254868ef3768d4' }
|
5
|
+
describe '.add' do
|
6
|
+
context 'happy path' do
|
7
|
+
it 'returns the created Card object' do
|
8
|
+
card_params = {
|
9
|
+
legal_name: 'Test Person',
|
10
|
+
account_number: '1111111112',
|
11
|
+
routing_number: '121000358',
|
12
|
+
amount: 1,
|
13
|
+
trans_type: 0,
|
14
|
+
account_class: 1,
|
15
|
+
account_type: 1,
|
16
|
+
oauth_consumer_key: users_consumer_key
|
17
|
+
}
|
18
|
+
|
19
|
+
added_card_response = Synapsis::Card.add(card_params)
|
20
|
+
|
21
|
+
expect(added_card_response).to respond_to(:card)
|
22
|
+
expect(added_card_response.card).to respond_to(:id)
|
23
|
+
expect(added_card_response).to respond_to(:success)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context '.show' do
|
29
|
+
context 'without id parameter' do
|
30
|
+
context 'happy path' do
|
31
|
+
it 'shows all of the user\'s cards' do
|
32
|
+
card_params = {
|
33
|
+
oauth_consumer_key: users_consumer_key
|
34
|
+
}
|
35
|
+
|
36
|
+
shown_card_response = Synapsis::Card.show(card_params)
|
37
|
+
|
38
|
+
expect(shown_card_response).to respond_to(:cards)
|
39
|
+
expect(shown_card_response.obj_count).to be > 1
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -12,10 +12,16 @@ RSpec.describe Synapsis::Deposit do
|
|
12
12
|
it 'constructs the correct deposit object' do
|
13
13
|
deposit_response = Synapsis::Deposit.create(deposit_params)
|
14
14
|
|
15
|
+
FIRST_LEVEL_PARAMS = ['deposit', 'reason', 'success']
|
16
|
+
|
15
17
|
DEPOSIT_SPECIFIC_PARAMS = ['amount', 'bank', 'date_created', 'id', 'resource_uri', 'status', 'status_url', 'user_id']
|
16
18
|
|
17
|
-
|
18
|
-
expect(deposit_response.
|
19
|
+
FIRST_LEVEL_PARAMS.each do |param|
|
20
|
+
expect(deposit_response).to respond_to(param)
|
21
|
+
end
|
22
|
+
|
23
|
+
DEPOSIT_SPECIFIC_PARAMS.each do |param|
|
24
|
+
expect(deposit_response.deposit).to respond_to(param)
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Synapsis::MassPay do
|
4
|
+
let!(:users_consumer_key) { 'dcd234d9d9fb55ad9711c4c41e254868ef3768d4' }
|
5
|
+
describe '.add' do
|
6
|
+
# These tests might fail if the guy runs out of money
|
7
|
+
context 'happy path' do
|
8
|
+
let!(:delta) { 0.001 }
|
9
|
+
let!(:mass_pay_hash) {{
|
10
|
+
legal_name: 'Test Person',
|
11
|
+
account_number: '1111111112',
|
12
|
+
routing_number: '121000358',
|
13
|
+
amount: 1,
|
14
|
+
trans_type: 0,
|
15
|
+
account_class: 1,
|
16
|
+
account_type: 1
|
17
|
+
}}
|
18
|
+
let!(:mass_pay_hash2) {{
|
19
|
+
legal_name: 'Test Person2',
|
20
|
+
account_number: '1111111112',
|
21
|
+
routing_number: '121000359',
|
22
|
+
amount: 1,
|
23
|
+
trans_type: 0,
|
24
|
+
account_class: 1,
|
25
|
+
account_type: 1
|
26
|
+
}}
|
27
|
+
|
28
|
+
it 'returns an array of MassPay objects' do
|
29
|
+
mass_pay_response = Synapsis::MassPay.add(
|
30
|
+
mass_pays: [mass_pay_hash, mass_pay_hash2],
|
31
|
+
oauth_consumer_key: users_consumer_key)
|
32
|
+
|
33
|
+
expect(mass_pay_response).to respond_to(:mass_pays)
|
34
|
+
expect(mass_pay_response.mass_pays.count).to eq 2
|
35
|
+
expect(mass_pay_response).to respond_to(:success)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'deducts the user\'s account by the total amount plus 0.1 per mass pay' do
|
39
|
+
users_balance = Synapsis::User.view(users_consumer_key).user.balance
|
40
|
+
|
41
|
+
Synapsis::MassPay.add(
|
42
|
+
mass_pays: [mass_pay_hash, mass_pay_hash2],
|
43
|
+
oauth_consumer_key: users_consumer_key)
|
44
|
+
|
45
|
+
users_balance_after = Synapsis::User.view(users_consumer_key).user.balance
|
46
|
+
expect(users_balance_after).to be_within(delta).of(users_balance - mass_pay_hash[:amount] - mass_pay_hash2[:amount] - (2 * Synapsis::MassPay.cost_per_mass_pay))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '.add (via cards)' do
|
52
|
+
# These tests might fail if the guy runs out of money
|
53
|
+
context 'happy path' do
|
54
|
+
let!(:delta) { 0.001 }
|
55
|
+
let!(:mass_pay_hash) {{
|
56
|
+
amount: 1,
|
57
|
+
card_id: 359,
|
58
|
+
trans_type: 0
|
59
|
+
}}
|
60
|
+
let!(:mass_pay_hash2) {{
|
61
|
+
amount: 1,
|
62
|
+
card_id: 360,
|
63
|
+
trans_type: 0
|
64
|
+
}}
|
65
|
+
|
66
|
+
it 'returns an array of MassPay objects' do
|
67
|
+
mass_pay_response = Synapsis::MassPay.add(
|
68
|
+
mass_pays: [mass_pay_hash, mass_pay_hash2],
|
69
|
+
oauth_consumer_key: users_consumer_key)
|
70
|
+
|
71
|
+
expect(mass_pay_response).to respond_to(:mass_pays)
|
72
|
+
expect(mass_pay_response.mass_pays.count).to eq 2
|
73
|
+
expect(mass_pay_response).to respond_to(:success)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'deducts the user\'s account by the total amount plus 0.1 per mass pay' do
|
77
|
+
users_balance = Synapsis::User.view(users_consumer_key).user.balance
|
78
|
+
|
79
|
+
Synapsis::MassPay.add(
|
80
|
+
mass_pays: [mass_pay_hash, mass_pay_hash2],
|
81
|
+
oauth_consumer_key: users_consumer_key)
|
82
|
+
|
83
|
+
users_balance_after = Synapsis::User.view(users_consumer_key).user.balance
|
84
|
+
expect(users_balance_after).to be_within(delta).of(users_balance - mass_pay_hash[:amount] - mass_pay_hash2[:amount] - (2 * Synapsis::MassPay.cost_per_mass_pay))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '.show' do
|
90
|
+
context 'with mass_pay_id argument' do
|
91
|
+
context 'happy path' do
|
92
|
+
it 'returns a MassPay object' do
|
93
|
+
view_params = {
|
94
|
+
mass_pay_id: 721,
|
95
|
+
oauth_consumer_key: users_consumer_key
|
96
|
+
}
|
97
|
+
|
98
|
+
mass_pay_response = Synapsis::MassPay.show(view_params)
|
99
|
+
|
100
|
+
[:success, :mass_pays, :obj_count]. each do |param|
|
101
|
+
expect(mass_pay_response).to respond_to(param)
|
102
|
+
end
|
103
|
+
expect(mass_pay_response.obj_count).to eq 1
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'bad_parameters' do
|
108
|
+
it 'raises an error' do
|
109
|
+
# Authentication isn't owned by the user
|
110
|
+
expect { Synapsis::MassPay.show(mass_pay_id: 721, oauth_consumer_key: 'WRONG KEY') }.to raise_error(Synapsis::Error).with_message('Error in OAuth Authentication.')
|
111
|
+
|
112
|
+
# Bad ID
|
113
|
+
expect { Synapsis::MassPay.show(mass_pay_id: 'a', oauth_consumer_key: users_consumer_key) }.to raise_error(Synapsis::Error).with_message('Sorry, this request could not be processed. Please try again later.')
|
114
|
+
|
115
|
+
# If mass_pay_id isn't owned by the user, then return all the mass_pays of the user
|
116
|
+
expect(Synapsis::MassPay.show(mass_pay_id: 200, oauth_consumer_key: users_consumer_key)).to respond_to(:obj_count)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'without mass_pay_id argument' do
|
122
|
+
it 'returns all the user\'s mass_pays' do
|
123
|
+
mass_pay_response = Synapsis::MassPay.show(oauth_consumer_key: users_consumer_key)
|
124
|
+
|
125
|
+
expect(mass_pay_response.obj_count).to be > 1
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/spec/synapsis/order_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
RSpec.describe Synapsis::Order do
|
4
|
-
context '
|
4
|
+
context '.add' do
|
5
5
|
let!(:delta) { 0.001 }
|
6
6
|
let!(:buyer_consumer_key) { '3bdb5790692d06983d8cb0feb40365886631e52d' }
|
7
7
|
let!(:seller_consumer_key) { '325ea5c0c3a7927280c54ed3ad310c02b45129d8' }
|
@@ -13,12 +13,19 @@ RSpec.describe Synapsis::Order do
|
|
13
13
|
|
14
14
|
context 'happy path' do
|
15
15
|
it 'constructs the correct Order object' do
|
16
|
-
|
16
|
+
order_response = Synapsis::Order.add(order_params)
|
17
17
|
|
18
|
-
|
18
|
+
FIRST_LEVEL_PARAMS = ['balance_verified', 'order', 'success']
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
ORDER_PARAMS = ['account_type', 'amount', 'date', 'date_settled', 'discount', 'facilitator_fee', 'fee', 'id', 'is_buyer', 'note', 'resource_uri', 'seller', 'status', 'status_url', 'ticket_number', 'tip', 'total']
|
21
|
+
|
22
|
+
|
23
|
+
FIRST_LEVEL_PARAMS.each do |param|
|
24
|
+
expect(order_response).to respond_to(param)
|
25
|
+
end
|
26
|
+
|
27
|
+
ORDER_PARAMS.each do |x|
|
28
|
+
expect(order_response.order).to respond_to(x)
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
@@ -26,20 +33,20 @@ RSpec.describe Synapsis::Order do
|
|
26
33
|
buyer_account_balance = Synapsis::User.view(buyer_consumer_key).user.balance
|
27
34
|
seller_account_balance = Synapsis::User.view(seller_consumer_key).user.balance
|
28
35
|
|
29
|
-
|
36
|
+
order_response = Synapsis::Order.add(order_params)
|
30
37
|
|
31
38
|
new_buyer_account_balance = Synapsis::User.view(buyer_consumer_key).user.balance
|
32
39
|
new_seller_account_balance = Synapsis::User.view(seller_consumer_key).user.balance
|
33
40
|
|
34
41
|
expect(new_buyer_account_balance).to be_within(delta).of(buyer_account_balance - order_params[:amount])
|
35
|
-
expect(new_seller_account_balance).to be_within(seller_account_balance + order_params[:amount] - Synapsis::Order.synapse_fee(order_params[:amount]))
|
42
|
+
expect(new_seller_account_balance).to be_within(delta).of(seller_account_balance + order_params[:amount] - Synapsis::Order.synapse_fee(order_params[:amount]))
|
36
43
|
end
|
37
44
|
|
38
|
-
it 'subtracts the money from the consumer\'s account and adds to the seller\'s account, with a charge of ' do
|
45
|
+
it 'subtracts the money from the consumer\'s account and adds to the seller\'s account, with a charge of 0.25 if amount is greater than $10' do
|
39
46
|
buyer_account_balance = Synapsis::User.view(buyer_consumer_key).user.balance
|
40
47
|
seller_account_balance = Synapsis::User.view(seller_consumer_key).user.balance
|
41
48
|
|
42
|
-
|
49
|
+
order_response = Synapsis::Order.add(order_params.merge(amount: 10.1))
|
43
50
|
|
44
51
|
new_buyer_account_balance = Synapsis::User.view(buyer_consumer_key).user.balance
|
45
52
|
new_seller_account_balance = Synapsis::User.view(seller_consumer_key).user.balance
|
@@ -49,7 +56,7 @@ RSpec.describe Synapsis::Order do
|
|
49
56
|
end
|
50
57
|
end
|
51
58
|
|
52
|
-
context '
|
59
|
+
context 'errors' do
|
53
60
|
it 'raises a Synapsis::Error' do
|
54
61
|
expect{ Synapsis::Order.add(order_params.merge(oauth_consumer_key: 'WRONG!')) }.to raise_error(Synapsis::Error).with_message('Error in OAuth Authentication.')
|
55
62
|
expect{ Synapsis::Order.add(order_params.merge(amount: 0)) }.to raise_error(Synapsis::Error).with_message('Missing amount')
|
@@ -57,4 +64,21 @@ RSpec.describe Synapsis::Order do
|
|
57
64
|
end
|
58
65
|
end
|
59
66
|
end
|
67
|
+
|
68
|
+
context '.poll' do
|
69
|
+
context 'happy path' do
|
70
|
+
it 'retrieves the order' do
|
71
|
+
order_id = 1398
|
72
|
+
polled_order_response = Synapsis::Order.poll(order_id: 1398)
|
73
|
+
|
74
|
+
FIRST_LEVEL_PARAMS = ['order', 'success']
|
75
|
+
|
76
|
+
FIRST_LEVEL_PARAMS.each do |param|
|
77
|
+
expect(polled_order_response).to respond_to(param)
|
78
|
+
end
|
79
|
+
|
80
|
+
expect(polled_order_response.order.status).not_to be_nil
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
60
84
|
end
|
data/spec/synapsis/user_spec.rb
CHANGED
@@ -80,4 +80,24 @@ RSpec.describe Synapsis::User do
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
83
|
+
|
84
|
+
describe '.view_linked_banks' do
|
85
|
+
context 'happy path' do
|
86
|
+
it 'shows the user\'s balance and linked banks' do
|
87
|
+
token = 'da2e45d5665551667ba6e08292407b56daa6ea43'
|
88
|
+
synapse_response = Synapsis::User.view_linked_banks(token)
|
89
|
+
|
90
|
+
expect(synapse_response).to respond_to(:balance)
|
91
|
+
expect(synapse_response).to respond_to(:banks)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'authentication error' do
|
96
|
+
it 'raises an Error' do
|
97
|
+
oauth_token = 'WRONG!!!'
|
98
|
+
|
99
|
+
expect { Synapsis::User.view_linked_banks(oauth_token) }.to raise_error(Synapsis::Error).with_message('Error in OAuth Authentication.')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
83
103
|
end
|
@@ -12,10 +12,16 @@ RSpec.describe Synapsis::Withdrawal do
|
|
12
12
|
it 'constructs the correct Withdrawal object' do
|
13
13
|
withdrawal_response = Synapsis::Withdrawal.create(withdrawal_params)
|
14
14
|
|
15
|
+
FIRST_LEVEL_PARAMS = ['balance', 'is_mfa', 'reason', 'success', 'withdrawal']
|
16
|
+
|
15
17
|
WITHDRAWAL_SPECIFIC_PARAMS = ['amount', 'bank', 'date_created', 'fee', 'id', 'instant_credit', 'resource_uri', 'status', 'status_url', 'user_id']
|
16
18
|
|
17
|
-
|
18
|
-
expect(withdrawal_response.
|
19
|
+
FIRST_LEVEL_PARAMS.each do |param|
|
20
|
+
expect(withdrawal_response).to respond_to(param)
|
21
|
+
end
|
22
|
+
|
23
|
+
WITHDRAWAL_SPECIFIC_PARAMS.each do |param|
|
24
|
+
expect(withdrawal_response.withdrawal).to respond_to(param)
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synapsis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daryll Santos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -115,8 +115,10 @@ files:
|
|
115
115
|
- lib/synapsis/api_resource.rb
|
116
116
|
- lib/synapsis/authentication.rb
|
117
117
|
- lib/synapsis/bank.rb
|
118
|
+
- lib/synapsis/card.rb
|
118
119
|
- lib/synapsis/deposit.rb
|
119
120
|
- lib/synapsis/error.rb
|
121
|
+
- lib/synapsis/mass_pay.rb
|
120
122
|
- lib/synapsis/order.rb
|
121
123
|
- lib/synapsis/user.rb
|
122
124
|
- lib/synapsis/utilities.rb
|
@@ -129,7 +131,9 @@ files:
|
|
129
131
|
- spec/synapsis/authentication_spec.rb
|
130
132
|
- spec/synapsis/bank_link_spec.rb
|
131
133
|
- spec/synapsis/bank_spec.rb
|
134
|
+
- spec/synapsis/card_spec.rb
|
132
135
|
- spec/synapsis/deposit_spec.rb
|
136
|
+
- spec/synapsis/mass_pay_spec.rb
|
133
137
|
- spec/synapsis/order_spec.rb
|
134
138
|
- spec/synapsis/user_spec.rb
|
135
139
|
- spec/synapsis/withdrawal_spec.rb
|
@@ -166,7 +170,9 @@ test_files:
|
|
166
170
|
- spec/synapsis/authentication_spec.rb
|
167
171
|
- spec/synapsis/bank_link_spec.rb
|
168
172
|
- spec/synapsis/bank_spec.rb
|
173
|
+
- spec/synapsis/card_spec.rb
|
169
174
|
- spec/synapsis/deposit_spec.rb
|
175
|
+
- spec/synapsis/mass_pay_spec.rb
|
170
176
|
- spec/synapsis/order_spec.rb
|
171
177
|
- spec/synapsis/user_spec.rb
|
172
178
|
- spec/synapsis/withdrawal_spec.rb
|