bitex 0.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|