bitex 0.3 → 0.4.0
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 +4 -4
- data/.circleci/config.yml +63 -0
- data/.rubocop.yml +32 -0
- data/.ruby-version +1 -0
- data/bitex.gemspec +21 -18
- data/lib/bitex.rb +7 -1
- data/lib/bitex/api.rb +34 -41
- data/lib/bitex/ask.rb +74 -0
- data/lib/bitex/base_order.rb +106 -0
- data/lib/bitex/bid.rb +72 -0
- data/lib/bitex/buy.rb +8 -5
- data/lib/bitex/kyc_file.rb +31 -9
- data/lib/bitex/kyc_profile.rb +113 -38
- data/lib/bitex/{market.rb → market_data.rb} +3 -3
- data/lib/bitex/match.rb +30 -15
- data/lib/bitex/order.rb +6 -238
- data/lib/bitex/payment.rb +30 -18
- data/lib/bitex/rates.rb +6 -8
- data/lib/bitex/sell.rb +5 -5
- data/lib/bitex/specie_deposit.rb +9 -4
- data/lib/bitex/specie_withdrawal.rb +29 -28
- data/lib/bitex/trade.rb +4 -5
- data/lib/bitex/transaction.rb +7 -8
- data/lib/bitex/usd_deposit.rb +46 -47
- data/lib/bitex/usd_withdrawal.rb +33 -34
- data/lib/bitex/version.rb +1 -1
- data/spec/ask_spec.rb +17 -5
- data/spec/bid_spec.rb +17 -5
- data/spec/buy_spec.rb +14 -4
- data/spec/kyc_file_spec.rb +34 -18
- data/spec/kyc_profile_spec.rb +158 -122
- data/spec/order_spec.rb +1 -1
- data/spec/payment_spec.rb +51 -45
- data/spec/sell_spec.rb +14 -4
- data/spec/spec_helper.rb +7 -6
- data/spec/specie_deposit_spec.rb +10 -4
- data/spec/specie_withdrawal_spec.rb +26 -25
- data/spec/support/from_json_shared_examples.rb +20 -22
- data/spec/support/order_shared_examples.rb +14 -17
- data/spec/support/request_stubs.rb +18 -12
- data/spec/trade_spec.rb +5 -5
- data/spec/transaction_spec.rb +12 -13
- data/spec/usd_deposit_spec.rb +120 -105
- data/spec/usd_withdrawal_spec.rb +89 -79
- metadata +57 -10
data/lib/bitex/usd_withdrawal.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Bitex
|
2
2
|
# A withdrawal of USD from your bitex.la balance
|
3
|
+
#
|
3
4
|
class UsdWithdrawal
|
4
5
|
# @!attribute id
|
5
6
|
# @return [Integer] This UsdWithdrawal's unique ID.
|
@@ -17,19 +18,16 @@ module Bitex
|
|
17
18
|
# Returns the status of this withdrawal.
|
18
19
|
# * :received Our engine is checking if you have enough funds.
|
19
20
|
# * :pending your withdrawal was accepted and is being processed.
|
20
|
-
# * :done your withdrawal was processed and it's on its way through
|
21
|
-
# the withdrawal channel you chose.
|
21
|
+
# * :done your withdrawal was processed and it's on its way through the withdrawal channel you chose.
|
22
22
|
# * :cancelled your withdrawal could not be processed.
|
23
23
|
attr_accessor :status
|
24
24
|
|
25
25
|
# @!attribute reason
|
26
26
|
# Returns the reason for cancellation of this withdrawal, if any.
|
27
27
|
# * :not_cancelled
|
28
|
-
# * :insufficient_funds The instruction was received, but you didn't have enough
|
29
|
-
# funds available
|
28
|
+
# * :insufficient_funds The instruction was received, but you didn't have enough funds available.
|
30
29
|
# * :no_instructions We could not understand the instructions you provided.
|
31
|
-
# * :recipient_unknown we could not issue this withdrawal because you're
|
32
|
-
# not the receiving party.
|
30
|
+
# * :recipient_unknown we could not issue this withdrawal because you're not the receiving party.
|
33
31
|
attr_accessor :reason
|
34
32
|
|
35
33
|
# @!attribute countr
|
@@ -42,7 +40,7 @@ module Bitex
|
|
42
40
|
|
43
41
|
# @!attribute payment_method
|
44
42
|
# Returns the payment method for this withdrawal.
|
45
|
-
# * :international_bank International bank transfer
|
43
|
+
# * :international_bank International bank transfer.
|
46
44
|
# * :bb we'll contact you regarding this withdrawal.
|
47
45
|
attr_accessor :payment_method
|
48
46
|
|
@@ -56,42 +54,31 @@ module Bitex
|
|
56
54
|
attr_accessor :instructions
|
57
55
|
|
58
56
|
# @visibility private
|
57
|
+
# rubocop:disable Metrics/AbcSize
|
59
58
|
def self.from_json(json)
|
60
|
-
status_lookup = {
|
61
|
-
1 => :received,
|
62
|
-
2 => :pending,
|
63
|
-
3 => :done,
|
64
|
-
4 => :cancelled,
|
65
|
-
}
|
66
|
-
reason_lookup = {
|
67
|
-
0 => :not_cancelled,
|
68
|
-
1 => :insufficient_funds,
|
69
|
-
2 => :no_instructions,
|
70
|
-
3 => :recipient_unknown,
|
71
|
-
}
|
72
59
|
Api.from_json(new, json) do |thing|
|
73
|
-
thing.amount =
|
74
|
-
thing.status =
|
75
|
-
thing.reason =
|
60
|
+
thing.amount = (json[3].presence || 0).to_d
|
61
|
+
thing.status = statuses[json[4]]
|
62
|
+
thing.reason = reasons[json[5]]
|
76
63
|
thing.country = json[6]
|
77
64
|
thing.currency = json[7]
|
78
|
-
thing.payment_method = json[8]
|
65
|
+
thing.payment_method = payment_methods[json[8]]
|
79
66
|
thing.label = json[9]
|
80
67
|
thing.kyc_profile_id = json[10]
|
81
68
|
thing.instructions = json[11]
|
82
69
|
end
|
83
70
|
end
|
71
|
+
# rubocop:enable Metrics/AbcSize
|
84
72
|
|
85
|
-
def self.create!(country, amount, currency, method, instructions, label, profile=nil)
|
86
|
-
from_json(
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
}))
|
73
|
+
def self.create!(country, amount, currency, method, instructions, label, profile = nil)
|
74
|
+
from_json(
|
75
|
+
Api.private(
|
76
|
+
:post,
|
77
|
+
'/private/usd/withdrawals',
|
78
|
+
country: country, amount: amount, currency: currency, payment_method: method, instructions: instructions, label: label,
|
79
|
+
kyc_profile_id: profile
|
80
|
+
)
|
81
|
+
)
|
95
82
|
end
|
96
83
|
|
97
84
|
def self.find(id)
|
@@ -99,7 +86,19 @@ module Bitex
|
|
99
86
|
end
|
100
87
|
|
101
88
|
def self.all
|
102
|
-
Api.private(:get,
|
89
|
+
Api.private(:get, '/private/usd/withdrawals').map { |sw| from_json(sw) }
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.payment_methods
|
93
|
+
{ 1 => :bb, 2 => :international_bank }
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.reasons
|
97
|
+
{ 0 => :not_cancelled, 1 => :insufficient_funds, 2 => :no_instructions, 3 => :recipient_unknown }
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.statuses
|
101
|
+
{ 1 => :received, 2 => :pending, 3 => :done, 4 => :cancelled }
|
103
102
|
end
|
104
103
|
end
|
105
104
|
end
|
data/lib/bitex/version.rb
CHANGED
data/spec/ask_spec.rb
CHANGED
@@ -2,19 +2,31 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Bitex::Ask do
|
4
4
|
let(:as_json) do
|
5
|
-
[
|
5
|
+
[
|
6
|
+
1, # 0 - API class reference
|
7
|
+
12345678, # 1 - id
|
8
|
+
946685400, # 2 - created_at
|
9
|
+
1, # 3 - orderbook
|
10
|
+
100.0, # 4 - quantity
|
11
|
+
100.0, # 5 - remaining_quantity
|
12
|
+
1000.0, # 6 - price
|
13
|
+
1, # 7 - status
|
14
|
+
0, # 8 - reason
|
15
|
+
10.0, # 9 - produced_amount
|
16
|
+
'User#1' # 10 - issuer
|
17
|
+
]
|
6
18
|
end
|
7
|
-
|
19
|
+
|
8
20
|
it_behaves_like 'API class'
|
9
|
-
it_behaves_like 'API class with a
|
21
|
+
it_behaves_like 'API class with a orderbook'
|
10
22
|
it_behaves_like 'JSON deserializable order'
|
11
23
|
|
12
24
|
describe 'Api calls' do
|
13
|
-
before(:each){ Bitex.api_key = 'valid_api_key' }
|
25
|
+
before(:each) { Bitex.api_key = 'valid_api_key' }
|
14
26
|
it_behaves_like 'Order', 'asks'
|
15
27
|
end
|
16
28
|
|
17
|
-
{ quantity: 100.0, remaining_quantity: 100.0, produced_amount: 10.0}.each do |field, value|
|
29
|
+
{ quantity: 100.0, remaining_quantity: 100.0, produced_amount: 10.0 }.each do |field, value|
|
18
30
|
it "sets #{field} as BigDecimal" do
|
19
31
|
thing = subject.class.from_json(as_json).send(field)
|
20
32
|
thing.should be_a BigDecimal
|
data/spec/bid_spec.rb
CHANGED
@@ -2,19 +2,31 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Bitex::Bid do
|
4
4
|
let(:as_json) do
|
5
|
-
[
|
5
|
+
[
|
6
|
+
1, # 0 - API class reference
|
7
|
+
12_345_678, # 1 - id
|
8
|
+
946_685_400, # 2 - created_at
|
9
|
+
1, # 3 - orderbook
|
10
|
+
100.0, # 4 - quantity
|
11
|
+
100.0, # 5 - remaining_quantity
|
12
|
+
1_000.0, # 6 - price
|
13
|
+
1, # 7 - status
|
14
|
+
0, # 8 - reason
|
15
|
+
10.0, # 9 - produced_amount
|
16
|
+
'User#1' # 10 - issuer
|
17
|
+
]
|
6
18
|
end
|
7
|
-
|
19
|
+
|
8
20
|
it_behaves_like 'API class'
|
9
|
-
it_behaves_like 'API class with a
|
21
|
+
it_behaves_like 'API class with a orderbook'
|
10
22
|
it_behaves_like 'JSON deserializable order'
|
11
23
|
|
12
24
|
describe 'Api calls' do
|
13
|
-
before(:each){ Bitex.api_key = 'valid_api_key' }
|
25
|
+
before(:each) { Bitex.api_key = 'valid_api_key' }
|
14
26
|
it_behaves_like 'Order', 'bids'
|
15
27
|
end
|
16
28
|
|
17
|
-
{ amount: 100.0, remaining_amount: 100.0, produced_quantity: 10.0}.each do |field, value|
|
29
|
+
{ amount: 100.0, remaining_amount: 100.0, produced_quantity: 10.0 }.each do |field, value|
|
18
30
|
it "sets #{field} as BigDecimal" do
|
19
31
|
thing = subject.class.from_json(as_json).send(field)
|
20
32
|
thing.should be_a BigDecimal
|
data/spec/buy_spec.rb
CHANGED
@@ -2,14 +2,24 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Bitex::Buy do
|
4
4
|
let(:as_json) do
|
5
|
-
[
|
5
|
+
[
|
6
|
+
4, # 0 - API class reference
|
7
|
+
12_345_678, # 1 - id
|
8
|
+
946_685_400, # 2 - created_at
|
9
|
+
1, # 3 - orderbook
|
10
|
+
100.5, # 4 - quantity
|
11
|
+
201, # 5 - amount
|
12
|
+
0.05, # 6 - fee
|
13
|
+
2, # 7 - price
|
14
|
+
456 # 8 - bid_id
|
15
|
+
]
|
6
16
|
end
|
7
|
-
|
17
|
+
|
8
18
|
it_behaves_like 'API class'
|
9
|
-
it_behaves_like 'API class with a
|
19
|
+
it_behaves_like 'API class with a orderbook'
|
10
20
|
it_behaves_like 'JSON deserializable match'
|
11
21
|
|
12
|
-
it
|
22
|
+
it 'sets the bid id' do
|
13
23
|
thing = subject.class.from_json(as_json).bid_id
|
14
24
|
thing.should == 456
|
15
25
|
end
|
data/spec/kyc_file_spec.rb
CHANGED
@@ -1,30 +1,46 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Bitex::KycFile do
|
4
|
-
before
|
5
|
-
Bitex.api_key = 'valid_api_key'
|
6
|
-
end
|
4
|
+
before(:each) { Bitex.api_key = 'valid_api_key' }
|
7
5
|
|
8
|
-
let(:
|
9
|
-
|
10
|
-
|
6
|
+
let(:id) { 1 }
|
7
|
+
let(:kyc_profile_id) { 2 }
|
8
|
+
let(:url) { 'http://foo.bar.example/photo.jpg' }
|
9
|
+
let(:file_name) { 'photo.jpg' }
|
10
|
+
let(:file_size) { 10_000 }
|
11
|
+
let(:content_type) { 'application/jpeg' }
|
12
|
+
|
13
|
+
let(:as_json) { [id, kyc_profile_id, url, file_name, content_type, file_size] }
|
14
|
+
let(:kyc_file) { subject.class.from_json(as_json) }
|
15
|
+
let(:kyc_files) { Bitex::KycFile.all }
|
16
|
+
|
17
|
+
context 'deserializing from json' do
|
18
|
+
it 'sets url as String' do
|
19
|
+
kyc_file.url.should be_an String
|
20
|
+
kyc_file.url.should eq url
|
21
|
+
end
|
11
22
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
it 'sets file name as String' do
|
24
|
+
kyc_file.file_name.should be_an String
|
25
|
+
kyc_file.file_name.should eq file_name
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'sets file size as Integer' do
|
29
|
+
kyc_file.file_size.should be_an Integer
|
30
|
+
kyc_file.file_size.should eq file_size
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'sets content type as String' do
|
34
|
+
kyc_file.content_type.should be_an String
|
35
|
+
kyc_file.content_type.should eq content_type
|
21
36
|
end
|
22
37
|
end
|
23
38
|
|
24
39
|
it 'lists all kyc profiles' do
|
25
|
-
stub_private(:get, '/private/kyc_files',
|
26
|
-
|
40
|
+
stub_private(:get, '/private/kyc_files', :kyc_files)
|
41
|
+
|
27
42
|
kyc_files.should be_an Array
|
28
|
-
kyc_files.
|
43
|
+
kyc_files.sample.should be_an Bitex::KycFile
|
44
|
+
kyc_files.find(id: id).should be_present
|
29
45
|
end
|
30
46
|
end
|
data/spec/kyc_profile_spec.rb
CHANGED
@@ -1,154 +1,190 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Bitex::KycProfile do
|
4
|
-
before
|
5
|
-
Bitex.api_key = 'valid_api_key'
|
6
|
-
end
|
4
|
+
before(:each) { Bitex.api_key = 'valid_api_key' }
|
7
5
|
|
8
|
-
let(:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
let(:
|
29
|
-
{
|
30
|
-
last_name:
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
birth_date: '1999/12/31',
|
36
|
-
nationality: 'brazilian',
|
37
|
-
gender: 'male',
|
38
|
-
occupation: 'Singer',
|
39
|
-
home_address: 'Argentina, Buenos Aires, etc',
|
40
|
-
work_address: 'Argentina, La Plata',
|
41
|
-
phone_numbers: '+51 555 120921',
|
42
|
-
legal_entity: true,
|
43
|
-
politically_exposed_person: true,
|
44
|
-
usage_tier: 'micro',
|
6
|
+
let(:id) { 1 }
|
7
|
+
let(:first_name) { 'Billy' }
|
8
|
+
let(:last_name) { 'Bob' }
|
9
|
+
let(:personal_id_number) { '33222111N' }
|
10
|
+
let(:personal_id_issuer) { 'AR' }
|
11
|
+
let(:personal_id_type) { :passport }
|
12
|
+
let(:tax_id) { 4_332_221_115 }
|
13
|
+
let(:birth_date) { Time.at(946_685_400).utc }
|
14
|
+
let(:rest_birth_date) { '2000/01/01' }
|
15
|
+
let(:nationality) { 'brazilian' }
|
16
|
+
let(:gender) { :male }
|
17
|
+
let(:occupation) { 'Singer' }
|
18
|
+
let(:home_address) { 'Argentina, Buenos Aires, etc' }
|
19
|
+
let(:work_address) { 'Argentina, La Plata' }
|
20
|
+
let(:phone_numbers) { '+51 555 120921' }
|
21
|
+
let(:legal_entity) { true }
|
22
|
+
let(:politically_exposed_person) { true }
|
23
|
+
let(:usage_tier) { :micro }
|
24
|
+
let(:accepted_usage_tier) { :micro }
|
25
|
+
|
26
|
+
let(:kyc_profile_params) do
|
27
|
+
{
|
28
|
+
first_name: first_name, last_name: last_name, personal_id_number: personal_id_number,
|
29
|
+
personal_id_issuer: personal_id_issuer, personal_id_type: personal_id_type, tax_id: tax_id, birth_date: birth_date,
|
30
|
+
nationality: nationality, gender: gender, occupation: occupation, home_address: home_address, work_address: work_address,
|
31
|
+
phone_numbers: phone_numbers, legal_entity: legal_entity, politically_exposed_person: politically_exposed_person,
|
32
|
+
usage_tier: usage_tier
|
45
33
|
}
|
46
34
|
end
|
47
35
|
|
48
36
|
let(:as_json) do
|
49
|
-
[
|
50
|
-
|
51
|
-
|
52
|
-
'33222111N', # Personal ID Number
|
53
|
-
'AR', # ISO country code for the issuer of this ID.
|
54
|
-
'passport', # Type of ID
|
55
|
-
'4332221115', # Tax Id
|
56
|
-
946685400, # Birth date as unix timestamp.
|
57
|
-
'brazilian', # Nationality
|
58
|
-
'male', # Gender
|
59
|
-
'Singer', # Occupation
|
60
|
-
'Argentina, Buenos Aires, etc', # Home address.
|
61
|
-
'Argentina, La Plata', # Work address.
|
62
|
-
'+51 555 120921', # Phone numbers.
|
63
|
-
true, # Is legal entity.
|
64
|
-
true, # Is politically exposed.
|
65
|
-
'micro', # Requested usage tier.
|
66
|
-
'micro', # Current usage tier as accepted by
|
67
|
-
# our compliance officers.
|
68
|
-
]
|
37
|
+
[id, first_name, last_name, personal_id_number, personal_id_issuer, personal_id_type, tax_id, birth_date, nationality,
|
38
|
+
gender, occupation, home_address, work_address, phone_numbers, legal_entity, politically_exposed_person, usage_tier,
|
39
|
+
accepted_usage_tier]
|
69
40
|
end
|
70
41
|
|
71
|
-
{
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
42
|
+
let(:kyc_profile) { subject.class.from_json(as_json) }
|
43
|
+
|
44
|
+
context 'deserializing from json' do
|
45
|
+
it 'sets first name as String' do
|
46
|
+
kyc_profile.first_name.should be_an String
|
47
|
+
kyc_profile.first_name.should eq first_name
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'sets last name as String' do
|
51
|
+
kyc_profile.last_name.should be_an String
|
52
|
+
kyc_profile.last_name.should eq last_name
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'sets personal ID number as String' do
|
56
|
+
kyc_profile.personal_id_number.should be_an String
|
57
|
+
kyc_profile.personal_id_number.should eq personal_id_number
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'sets personal ID issuer as String' do
|
61
|
+
kyc_profile.personal_id_issuer.should be_an String
|
62
|
+
kyc_profile.personal_id_issuer.should eq personal_id_issuer
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'sets personal ID type as Symbol' do
|
66
|
+
kyc_profile.personal_id_type.should be_an Symbol
|
67
|
+
kyc_profile.personal_id_type.should eq personal_id_type
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'sets tax ID as Integer' do
|
71
|
+
kyc_profile.tax_id.should be_an Integer
|
72
|
+
kyc_profile.tax_id.should eq tax_id
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'sets birth date as Time' do
|
76
|
+
kyc_profile.birth_date.should be_an Time
|
77
|
+
kyc_profile.birth_date.should eq birth_date
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'can have a nil birth_date' do
|
81
|
+
as_json[7] = nil
|
82
|
+
|
83
|
+
kyc_profile.birth_date.should be_nil
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'sets nationality as String' do
|
87
|
+
kyc_profile.nationality.should be_an String
|
88
|
+
kyc_profile.nationality.should eq nationality
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'sets gender as Symbol' do
|
92
|
+
kyc_profile.gender.should be_an Symbol
|
93
|
+
kyc_profile.gender.should be gender
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'sets occupation as String' do
|
97
|
+
kyc_profile.occupation.should be_an String
|
98
|
+
kyc_profile.occupation.should eq occupation
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'sets home address as String' do
|
102
|
+
kyc_profile.home_address.should be_an String
|
103
|
+
kyc_profile.home_address.should eq home_address
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'sets work address as String' do
|
107
|
+
kyc_profile.work_address.should be_an String
|
108
|
+
kyc_profile.work_address.should eq work_address
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'sets phone numbers as String' do
|
112
|
+
kyc_profile.phone_numbers.should be_an String
|
113
|
+
kyc_profile.phone_numbers.should eq phone_numbers
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'sets legal entity as Boolean' do
|
117
|
+
kyc_profile.legal_entity.should be_an TrueClass
|
118
|
+
kyc_profile.legal_entity.should eq legal_entity
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'sets politically exposed person as Boolean' do
|
122
|
+
kyc_profile.politically_exposed_person.should be_an TrueClass
|
123
|
+
kyc_profile.politically_exposed_person.should eq politically_exposed_person
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'sets usage tier as Symbol' do
|
127
|
+
kyc_profile.usage_tier.should be_an Symbol
|
128
|
+
kyc_profile.usage_tier.should eq usage_tier
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'sets accepted usage tier as Symbol' do
|
132
|
+
kyc_profile.accepted_usage_tier.should be_an Symbol
|
133
|
+
kyc_profile.accepted_usage_tier.should eq accepted_usage_tier
|
92
134
|
end
|
93
135
|
end
|
94
136
|
|
95
137
|
it 'creates a new kyc profile' do
|
96
|
-
stub_private(:post,
|
97
|
-
|
98
|
-
Bitex::KycProfile.create!(
|
99
|
-
.should be_a Bitex::KycProfile
|
138
|
+
stub_private(:post, '/private/kyc_profiles', :kyc_profile, kyc_profile_params.merge(birth_date: rest_birth_date))
|
139
|
+
|
140
|
+
Bitex::KycProfile.create!(kyc_profile_params).should be_a Bitex::KycProfile
|
100
141
|
end
|
101
|
-
|
142
|
+
|
102
143
|
it 'finds a single kyc profile' do
|
103
|
-
stub_private(:get,
|
104
|
-
|
144
|
+
stub_private(:get, "/private/kyc_profiles/#{id}", :kyc_profile)
|
145
|
+
|
146
|
+
kyc_profile = Bitex::KycProfile.find(id)
|
147
|
+
|
105
148
|
kyc_profile.should be_a Bitex::KycProfile
|
149
|
+
kyc_profile.id.should eq id
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'updates a kyc profile' do
|
153
|
+
stub_private(:put, "/private/kyc_profiles/#{id}", :kyc_profile, kyc_profile_params.merge(birth_date: rest_birth_date))
|
154
|
+
|
155
|
+
kyc_profile.update!(kyc_profile_params)
|
156
|
+
kyc_profile.birth_date.should eq birth_date
|
106
157
|
end
|
107
|
-
|
158
|
+
|
108
159
|
it 'lists all kyc profiles' do
|
109
|
-
stub_private(:get, '/private/kyc_profiles',
|
160
|
+
stub_private(:get, '/private/kyc_profiles', :kyc_profiles)
|
161
|
+
|
110
162
|
kyc_profiles = Bitex::KycProfile.all
|
163
|
+
|
111
164
|
kyc_profiles.should be_an Array
|
112
165
|
kyc_profiles.first.should be_an Bitex::KycProfile
|
113
166
|
end
|
114
167
|
|
115
|
-
it 'updates a kyc profile' do
|
116
|
-
stub_private(:put, "/private/kyc_profiles/1", 'kyc_profile',
|
117
|
-
rest_params_for_create_or_update)
|
118
|
-
kyc_profile = Bitex::KycProfile.from_json(as_json)
|
119
|
-
kyc_profile.update!(params_for_create_or_update)
|
120
|
-
end
|
121
|
-
|
122
168
|
it 'creates a kyc file' do
|
123
|
-
path =
|
124
|
-
stub_private(:post,
|
125
|
-
|
126
|
-
kyc_profile
|
127
|
-
kyc_file = kyc_profile.add_kyc_file!(path, 'image/jpg')
|
128
|
-
kyc_file.should be_a Bitex::KycFile
|
169
|
+
path = File.expand_path('fixtures/file.jpg', __dir__)
|
170
|
+
stub_private(:post, "/private/kyc_profiles/#{id}/kyc_files", :kyc_file, document: path, document_content_type: 'image/jpg')
|
171
|
+
|
172
|
+
kyc_profile.add_kyc_file!(path, 'image/jpg') { |kyc_file| kyc_file.should be_a Bitex::KycFile }
|
129
173
|
end
|
130
174
|
|
131
175
|
it 'creates a kyc file without specifying content type' do
|
132
|
-
path =
|
133
|
-
stub_private(:post, '/private/kyc_profiles/1/kyc_files',
|
134
|
-
|
135
|
-
kyc_profile
|
136
|
-
kyc_file = kyc_profile.add_kyc_file!(path)
|
137
|
-
kyc_file.should be_a Bitex::KycFile
|
176
|
+
path = File.expand_path('fixtures/file.jpg', __dir__)
|
177
|
+
stub_private(:post, '/private/kyc_profiles/1/kyc_files', :kyc_file, document: path)
|
178
|
+
|
179
|
+
kyc_profile.add_kyc_file!(path) { |kyc_file| kyc_file.should be_a Bitex::KycFile }
|
138
180
|
end
|
139
|
-
|
181
|
+
|
140
182
|
it 'lists a profiles kyc files' do
|
141
|
-
stub_private(:get,
|
142
|
-
|
143
|
-
kyc_files
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
it 'can have a nil birth_date' do
|
149
|
-
json = as_json.dup
|
150
|
-
json[7] = nil
|
151
|
-
kyc_profile = Bitex::KycProfile.from_json(json)
|
152
|
-
kyc_profile.birth_date.should be_nil
|
183
|
+
stub_private(:get, "/private/kyc_profiles/#{id}/kyc_files", :kyc_files)
|
184
|
+
|
185
|
+
kyc_profile.kyc_files do |kyc_files|
|
186
|
+
kyc_files.should be_an Array
|
187
|
+
kyc_files.sample.should be_a Bitex::KycFile
|
188
|
+
end
|
153
189
|
end
|
154
190
|
end
|