currency_cloud 0.5

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.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +12 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +99 -0
  8. data/Guardfile +14 -0
  9. data/LICENSE.md +22 -0
  10. data/README.md +10 -0
  11. data/Rakefile +30 -0
  12. data/currency_cloud.gemspec +27 -0
  13. data/examples/server.rb +15 -0
  14. data/lib/currency_cloud.rb +26 -0
  15. data/lib/currency_cloud/actions/create.rb +9 -0
  16. data/lib/currency_cloud/actions/current.rb +9 -0
  17. data/lib/currency_cloud/actions/delete.rb +15 -0
  18. data/lib/currency_cloud/actions/find.rb +27 -0
  19. data/lib/currency_cloud/actions/retrieve.rb +9 -0
  20. data/lib/currency_cloud/actions/update.rb +12 -0
  21. data/lib/currency_cloud/errors/api_error.rb +38 -0
  22. data/lib/currency_cloud/errors/config_error.rb +5 -0
  23. data/lib/currency_cloud/errors/unexpected_error.rb +10 -0
  24. data/lib/currency_cloud/pagination.rb +7 -0
  25. data/lib/currency_cloud/request_handler.rb +68 -0
  26. data/lib/currency_cloud/resource.rb +73 -0
  27. data/lib/currency_cloud/resourceful_collection.rb +15 -0
  28. data/lib/currency_cloud/resources/account.rb +6 -0
  29. data/lib/currency_cloud/resources/balance.rb +8 -0
  30. data/lib/currency_cloud/resources/beneficiary.rb +14 -0
  31. data/lib/currency_cloud/resources/contact.rb +6 -0
  32. data/lib/currency_cloud/resources/conversion.rb +10 -0
  33. data/lib/currency_cloud/resources/payer.rb +6 -0
  34. data/lib/currency_cloud/resources/payment.rb +11 -0
  35. data/lib/currency_cloud/resources/rate.rb +21 -0
  36. data/lib/currency_cloud/resources/reference.rb +29 -0
  37. data/lib/currency_cloud/resources/settlement.rb +30 -0
  38. data/lib/currency_cloud/resources/transaction.rb +7 -0
  39. data/lib/currency_cloud/response_handler.rb +46 -0
  40. data/lib/currency_cloud/session.rb +62 -0
  41. data/lib/currency_cloud/version.rb +8 -0
  42. data/spec/currency_cloud_spec.rb +78 -0
  43. data/spec/integration/actions_spec.rb +101 -0
  44. data/spec/integration/authentication_spec.rb +37 -0
  45. data/spec/integration/errors_spec.rb +157 -0
  46. data/spec/integration/rates_spec.rb +39 -0
  47. data/spec/integration/reference_spec.rb +57 -0
  48. data/spec/spec_helper.rb +11 -0
  49. data/spec/support/vcr_cassettes/Actions/can_create.yml +38 -0
  50. data/spec/support/vcr_cassettes/Actions/can_current.yml +37 -0
  51. data/spec/support/vcr_cassettes/Actions/can_delete.yml +39 -0
  52. data/spec/support/vcr_cassettes/Actions/can_find.yml +38 -0
  53. data/spec/support/vcr_cassettes/Actions/can_first.yml +75 -0
  54. data/spec/support/vcr_cassettes/Actions/can_retrieve.yml +38 -0
  55. data/spec/support/vcr_cassettes/Actions/can_update.yml +39 -0
  56. data/spec/support/vcr_cassettes/Authentication/can_be_closed.yml +67 -0
  57. data/spec/support/vcr_cassettes/Authentication/can_use_just_a_token.yml +36 -0
  58. data/spec/support/vcr_cassettes/Authentication/handles_session_timeout_error.yml +101 -0
  59. data/spec/support/vcr_cassettes/Authentication/happens_lazily.yml +34 -0
  60. data/spec/support/vcr_cassettes/Error/is_raised_on_a_bad_request.yml +39 -0
  61. data/spec/support/vcr_cassettes/Error/is_raised_on_a_forbidden_request.yml +35 -0
  62. data/spec/support/vcr_cassettes/Error/is_raised_on_an_internal_server_error.yml +69 -0
  63. data/spec/support/vcr_cassettes/Error/is_raised_on_incorrect_authentication_details.yml +39 -0
  64. data/spec/support/vcr_cassettes/Error/is_raised_when_a_resource_is_not_found.yml +37 -0
  65. data/spec/support/vcr_cassettes/Error/is_raised_when_too_many_requests_have_been_issued.yml +34 -0
  66. data/spec/support/vcr_cassettes/Rates/can_find.yml +36 -0
  67. data/spec/support/vcr_cassettes/Rates/can_provided_detailed_rate.yml +36 -0
  68. data/spec/support/vcr_cassettes/Reference/can_retrieve_beneficiary_required_details.yml +36 -0
  69. data/spec/support/vcr_cassettes/Reference/can_retrieve_conversion_dates.yml +46 -0
  70. data/spec/support/vcr_cassettes/Reference/can_retrieve_currencies.yml +47 -0
  71. data/spec/support/vcr_cassettes/Reference/can_retrieve_settlement_accounts.yml +39 -0
  72. metadata +230 -0
@@ -0,0 +1,8 @@
1
+ # Separate Gem version from 'API version'
2
+
3
+ module CurrencyCloud
4
+
5
+ ApiVersion = 'v2' # API Version
6
+ Version = '0.5' # Gem Version
7
+
8
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe CurrencyCloud do
4
+
5
+ before(:each) do
6
+ CurrencyCloud.environment = nil
7
+ CurrencyCloud.login_id = nil
8
+ CurrencyCloud.api_key = nil
9
+ CurrencyCloud.reset_session
10
+ end
11
+
12
+ describe "#environment" do
13
+
14
+ it "can set the environment" do
15
+ CurrencyCloud.environment = :development
16
+ expect(CurrencyCloud.environment).to eq(:development)
17
+ end
18
+
19
+ end
20
+
21
+ describe "#login_id" do
22
+
23
+ it "can set the login_id" do
24
+ CurrencyCloud.login_id = 'test@example.com'
25
+ expect(CurrencyCloud.login_id).to eq('test@example.com')
26
+ end
27
+
28
+ end
29
+
30
+ describe "#api_key" do
31
+
32
+ it "can set the api_key" do
33
+ CurrencyCloud.api_key = 'e3b0d6895f91f46d9eaf5c95aa0f64dca9007b7ab0778721b6cdc0a8bc7c563b'
34
+ expect(CurrencyCloud.api_key).to eq('e3b0d6895f91f46d9eaf5c95aa0f64dca9007b7ab0778721b6cdc0a8bc7c563b')
35
+ end
36
+
37
+ end
38
+
39
+ describe "#session" do
40
+
41
+ it "returns a session object" do
42
+ CurrencyCloud.environment = :demonstration
43
+ CurrencyCloud.login_id = 'test@example.com'
44
+ CurrencyCloud.api_key = 'e3b0d6895f91f46d9eaf5c95aa0f64dca9007b7ab0778721b6cdc0a8bc7c563b'
45
+
46
+ request_handler = double('RequestHandler')
47
+ expect(request_handler).to receive(:post).and_return({'auth_token' => '123'})
48
+ expect(CurrencyCloud::RequestHandler).to receive(:new).and_return(request_handler)
49
+
50
+ expect(CurrencyCloud.session).to be_a(CurrencyCloud::Session)
51
+ end
52
+
53
+ it "raises an error if the environment is not set" do
54
+ CurrencyCloud.environment = nil
55
+ expect { CurrencyCloud.session }
56
+ .to raise_error(CurrencyCloud::ConfigError, "'' is not a valid environment, must be one of: production, demonstration, uat")
57
+ end
58
+
59
+ it "raises an error if the environment is invalid" do
60
+ CurrencyCloud.environment = :invalid
61
+ expect { CurrencyCloud.session }
62
+ .to raise_error(CurrencyCloud::ConfigError, "'invalid' is not a valid environment, must be one of: production, demonstration, uat")
63
+ end
64
+
65
+ it "raises an error if the login_id is not set" do
66
+ CurrencyCloud.environment = :demonstration
67
+ expect { CurrencyCloud.session }
68
+ .to raise_error(CurrencyCloud::ConfigError, "login_id must be set using CurrencyCloud.login_id=")
69
+ end
70
+
71
+ it "raises an error if the api_key is not set" do
72
+ CurrencyCloud.environment = :demonstration
73
+ CurrencyCloud.login_id = 'test@example.com'
74
+ expect { CurrencyCloud.session }
75
+ .to raise_error(CurrencyCloud::ConfigError, "api_key must be set using CurrencyCloud.api_key=")
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Actions', :vcr => true do
4
+ before do
5
+ CurrencyCloud.reset_session
6
+ CurrencyCloud.environment = :demonstration
7
+ CurrencyCloud.token = '4df5b3e5882a412f148dcd08fa4e5b73'
8
+ end
9
+
10
+ it "can #create" do
11
+ params = {
12
+ :bank_account_holder_name => 'Test User',
13
+ :bank_country => 'GB',
14
+ :currency => 'GBP',
15
+ :name => 'Test User',
16
+ :account_number => '12345678',
17
+ :routing_code_type_1 => 'sort_code',
18
+ :routing_code_value_1 => '123456',
19
+ :payment_types => ['regular']
20
+ }
21
+
22
+ beneficiary = CurrencyCloud::Beneficiary.create(params)
23
+ expect(beneficiary).to be_a_kind_of(CurrencyCloud::Beneficiary)
24
+
25
+ expect(beneficiary.id).to eq('081596c9-02de-483e-9f2a-4cf55dcdf98c')
26
+ expect(beneficiary.bank_account_holder_name).to eq('Test User')
27
+ expect(beneficiary.payment_types).to include('regular')
28
+ expect(beneficiary.created_at).to eq('2015-04-25T09:21:00+00:00')
29
+ expect(beneficiary.updated_at).to eq('2015-04-25T09:21:00+00:00')
30
+ end
31
+
32
+ it "can #retrieve" do
33
+ beneficiary = CurrencyCloud::Beneficiary.retrieve('081596c9-02de-483e-9f2a-4cf55dcdf98c')
34
+ expect(beneficiary).to be_a_kind_of(CurrencyCloud::Beneficiary)
35
+
36
+ expect(beneficiary.id).to eq('081596c9-02de-483e-9f2a-4cf55dcdf98c')
37
+ expect(beneficiary.bank_account_holder_name).to eq('Test User')
38
+ expect(beneficiary.payment_types).to include('regular')
39
+ expect(beneficiary.created_at).to eq('2015-04-25T09:21:00+00:00')
40
+ expect(beneficiary.updated_at).to eq('2015-04-25T09:21:00+00:00')
41
+ end
42
+
43
+ it "can #first" do
44
+ beneficiary = CurrencyCloud::Beneficiary.first(:bank_account_holder_name => 'Test User')
45
+ expect(beneficiary).to be_a_kind_of(CurrencyCloud::Beneficiary)
46
+
47
+ expect(beneficiary.id).to eq('081596c9-02de-483e-9f2a-4cf55dcdf98c')
48
+ expect(beneficiary.bank_account_holder_name).to eq('Test User')
49
+ expect(beneficiary.payment_types).to include('regular')
50
+ expect(beneficiary.created_at).to eq('2015-04-25T09:21:00+00:00')
51
+ expect(beneficiary.updated_at).to eq('2015-04-25T10:58:21+00:00')
52
+ end
53
+
54
+ it "can #find" do
55
+ beneficiaries = CurrencyCloud::Beneficiary.find
56
+ expect(beneficiaries).to_not be_empty
57
+ expect(beneficiaries.length).to eq(1)
58
+
59
+ beneficiaries.each do |b|
60
+ expect(b).to_not be_nil
61
+ expect(b).to be_a_kind_of(CurrencyCloud::Beneficiary)
62
+ end
63
+
64
+ pagination = beneficiaries.pagination
65
+ expect(pagination.total_entries).to eq(1)
66
+ expect(pagination.total_pages).to eq(1)
67
+ expect(pagination.current_page).to eq(1)
68
+ expect(pagination.per_page).to eq(25)
69
+ expect(pagination.previous_page).to eq(-1)
70
+ expect(pagination.next_page).to eq(-1)
71
+ expect(pagination.order).to eq('created_at')
72
+ expect(pagination.order_asc_desc).to eq('asc')
73
+ end
74
+
75
+ it "can #update" do
76
+ beneficiary = CurrencyCloud::Beneficiary.update('081596c9-02de-483e-9f2a-4cf55dcdf98c', :bank_account_holder_name => 'Test User 2')
77
+ expect(beneficiary).to be_a_kind_of(CurrencyCloud::Beneficiary)
78
+ expect(beneficiary.bank_account_holder_name).to eq('Test User 2')
79
+ end
80
+
81
+ it "can #delete" do
82
+ beneficiary = CurrencyCloud::Beneficiary.delete('081596c9-02de-483e-9f2a-4cf55dcdf98c')
83
+ expect(beneficiary).to be_a_kind_of(CurrencyCloud::Beneficiary)
84
+
85
+ expect(beneficiary.id).to eq('081596c9-02de-483e-9f2a-4cf55dcdf98c')
86
+ expect(beneficiary.bank_account_holder_name).to eq('Test User 2')
87
+ expect(beneficiary.payment_types).to include('regular')
88
+ expect(beneficiary.created_at).to eq('2015-04-25T09:21:00+00:00')
89
+ expect(beneficiary.updated_at).to eq('2015-04-25T11:06:27+00:00')
90
+ end
91
+
92
+ it "can #current" do
93
+ account = CurrencyCloud::Account.current
94
+
95
+ expect(account).to be_a_kind_of(CurrencyCloud::Account)
96
+ expect(account.id).to eq('8ec3a69b-02d1-4f09-9a6b-6bd54a61b3a8')
97
+ expect(account.postal_code).to be_nil
98
+ expect(account.created_at).to eq('2015-04-24T15:57:55+00:00')
99
+ expect(account.updated_at).to eq('2015-04-24T15:57:55+00:00')
100
+ end
101
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Authentication', :vcr => true do
4
+ before(:each) do
5
+ CurrencyCloud.reset_session
6
+ CurrencyCloud.environment = :demonstration
7
+ CurrencyCloud.login_id = 'rjnienaber@gmail.com'
8
+ CurrencyCloud.api_key = 'ef0fd50fca1fb14c1fab3a8436b9ecb65f02f129fd87eafa45ded8ae257528f0'
9
+ CurrencyCloud.token = nil
10
+ end
11
+
12
+ it 'happens lazily' do
13
+ expect(CurrencyCloud.session).to_not be_nil
14
+ expect(CurrencyCloud.session.token).to eq('57ef449f6316f2f54dfec37c2006fe50')
15
+ end
16
+
17
+ it 'can use just a token' do
18
+ CurrencyCloud.login_id = nil
19
+ CurrencyCloud.api_key = nil
20
+ CurrencyCloud.token = '7fbba909f66ee6721b2e20a5fa1ccae7'
21
+
22
+ response = CurrencyCloud::Beneficiary.find
23
+ expect(response).to_not be_nil
24
+ end
25
+
26
+ it 'can be closed' do
27
+ CurrencyCloud.session
28
+ expect(CurrencyCloud.close_session).to eq(true)
29
+ end
30
+
31
+ it 'handles session timeout error' do
32
+ CurrencyCloud.token = '3907f05da86533710efc589d58f51f45'
33
+
34
+ response = CurrencyCloud::Beneficiary.find
35
+ expect(response).to_not be_nil
36
+ end
37
+ end
@@ -0,0 +1,157 @@
1
+ require 'spec_helper'
2
+ require 'net/http'
3
+
4
+ describe 'Error', :vcr => true do
5
+ before(:each) do
6
+ CurrencyCloud.reset_session
7
+ CurrencyCloud.environment = :demonstration
8
+ CurrencyCloud.login_id = 'rjnienaber@gmail.com'
9
+ CurrencyCloud.api_key = 'ef0fd50fca1fb14c1fab3a8436b9ecb65f02f129fd87eafa45ded8ae257528f0'
10
+ CurrencyCloud.token = nil
11
+ end
12
+
13
+ it 'is raised on a bad request' do
14
+ CurrencyCloud.login_id = 'non-existent-login-id'
15
+ CurrencyCloud.api_key = 'ef0fd50fca1fb14c1fab3a8436b9ecb57528f0'
16
+
17
+ error = nil
18
+ begin
19
+ CurrencyCloud.session
20
+ raise 'Should have failed'
21
+ rescue CurrencyCloud::BadRequestError => error
22
+ end
23
+
24
+ expect(error.code).to eq('auth_invalid_user_login_details')
25
+ expect(error.raw_response).to_not be_nil
26
+ expect(error.status_code).to eq(400)
27
+ expect(error.messages.length).to eq(1)
28
+
29
+ error_message = error.messages[0]
30
+ expect(error_message.field).to eq('api_key')
31
+ expect(error_message.code).to eq('api_key_length_is_invalid')
32
+ expect(error_message.message).to eq('api_key should be 64 character(s) long')
33
+ expect(error_message.params).to include("length" => 64)
34
+ end
35
+
36
+ it 'is raised on incorrect authentication details' do
37
+ CurrencyCloud.login_id = 'non-existent-login-id'
38
+ CurrencyCloud.api_key = 'efb5ae2af84978b7a37f18dd61c8bbe139b403009faea83484405a3dcb64c4d8'
39
+
40
+ error = nil
41
+ begin
42
+ CurrencyCloud.session
43
+ raise 'Should have failed'
44
+ rescue CurrencyCloud::AuthenticationError => error
45
+ end
46
+
47
+ expect(error.code).to eq('auth_failed')
48
+ expect(error.raw_response).to_not be_nil
49
+ expect(error.status_code).to eq(401)
50
+ expect(error.messages.length).to eq(1)
51
+
52
+ error_message = error.messages[0]
53
+ expect(error_message.field).to eq('username')
54
+ expect(error_message.code).to eq('invalid_supplied_credentials')
55
+ expect(error_message.message).to eq('Authentication failed with the supplied credentials')
56
+ expect(error_message.params).to be_empty
57
+ end
58
+
59
+ it 'is raised on unexpected error' do
60
+ allow(HTTParty).to receive(:post).and_raise(Timeout::Error)
61
+
62
+ error = nil
63
+ begin
64
+ CurrencyCloud.session
65
+ raise 'Should have failed'
66
+ rescue CurrencyCloud::UnexpectedError => error
67
+ end
68
+
69
+ expect(error.inner_error).to_not be_nil
70
+ expect(error.inner_error.class).to eq(Timeout::Error)
71
+ end
72
+
73
+ it 'is raised on a forbidden request' do
74
+ error = nil
75
+ begin
76
+ CurrencyCloud.session
77
+ raise 'Should have failed'
78
+ rescue CurrencyCloud::ForbiddenError => error
79
+ end
80
+
81
+ expect(error.code).to eq('auth_failed')
82
+ expect(error.raw_response).to_not be_nil
83
+ expect(error.status_code).to eq(403)
84
+ expect(error.messages.length).to eq(1)
85
+
86
+ error_message = error.messages[0]
87
+ expect(error_message.field).to eq('username')
88
+ expect(error_message.code).to eq('invalid_supplied_credentials')
89
+ expect(error_message.message).to eq('Authentication failed with the supplied credentials')
90
+ expect(error_message.params).to be_empty
91
+ end
92
+
93
+ it 'is raised when a resource is not found' do
94
+ CurrencyCloud.token = '656485646b068f6e9c81e3d885fa54f5'
95
+ error = nil
96
+ begin
97
+ CurrencyCloud::Beneficiary.retrieve('081596c9-02de-483e-9f2a-4cf55dcdf98c')
98
+ raise 'Should fail'
99
+ rescue CurrencyCloud::NotFoundError => error
100
+ end
101
+
102
+ expect(error.code).to eq('beneficiary_not_found')
103
+ expect(error.raw_response).to_not be_nil
104
+ expect(error.status_code).to eq(404)
105
+ expect(error.messages.length).to eq(1)
106
+
107
+ error_message = error.messages[0]
108
+ expect(error_message.field).to eq('id')
109
+ expect(error_message.code).to eq('beneficiary_not_found')
110
+ expect(error_message.message).to eq('Beneficiary was not found for this id')
111
+ expect(error_message.params).to be_empty
112
+ end
113
+
114
+ it 'is raised on an internal server error' do
115
+
116
+ error = nil
117
+ begin
118
+ CurrencyCloud.session
119
+ raise 'Should have failed'
120
+ rescue CurrencyCloud::InternalApplicationError => error
121
+ end
122
+
123
+ expect(error.code).to eq('internal_application_error')
124
+ expect(error.raw_response).to_not be_nil
125
+ expect(error.status_code).to eq(500)
126
+ expect(error.messages.length).to eq(1)
127
+
128
+ error_message = error.messages[0]
129
+ expect(error_message.field).to eq('base')
130
+ expect(error_message.code).to eq('internal_application_error')
131
+ expect(error_message.message).to eq('A general application error occurred')
132
+ expect(error_message.params).to include("request_id" => 2771875643610572878)
133
+ end
134
+
135
+ it 'is raised when too many requests have been issued' do
136
+ CurrencyCloud.login_id = 'rjnienaber@gmail.com2'
137
+
138
+ error = nil
139
+ begin
140
+ CurrencyCloud.session
141
+
142
+ raise 'Should have failed'
143
+ rescue CurrencyCloud::TooManyRequestsError => error
144
+ end
145
+
146
+ expect(error.code).to eq('too_many_requests')
147
+ expect(error.raw_response).to_not be_nil
148
+ expect(error.status_code).to eq(429)
149
+ expect(error.messages.length).to eq(1)
150
+
151
+ error_message = error.messages[0]
152
+ expect(error_message.field).to eq('base')
153
+ expect(error_message.code).to eq('too_many_requests')
154
+ expect(error_message.message).to eq('Too many requests have been made to the api. Please refer to the Developer Center for more information')
155
+ expect(error_message.params).to be_empty
156
+ end
157
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Rates', :vcr => true do
4
+ before do
5
+ CurrencyCloud.reset_session
6
+ CurrencyCloud.environment = :demonstration
7
+ CurrencyCloud.token = '242993ca94b9d1c6c1d8f7d3275a6f36'
8
+ end
9
+
10
+ it 'can #find' do
11
+ rates = CurrencyCloud::Rate.find(currency_pair: 'GBPUSD,EURGBP')
12
+
13
+ expect(rates).to_not be_nil
14
+ expect(rates.currencies).to_not be_empty
15
+
16
+ currencies = rates.currencies
17
+ expect(currencies.length).to eq(2)
18
+
19
+ currencies.each do |b|
20
+ expect(b).to_not be_nil
21
+ expect(b).to be_a_kind_of(CurrencyCloud::Rate)
22
+ end
23
+
24
+ rate = currencies.first
25
+ expect(rate.currency_pair).to eq('EURGBP')
26
+ expect(rate.bid).to eq('0.71445')
27
+ expect(rate.offer).to eq('0.71508')
28
+
29
+ expect(rates.unavailable).to be_empty
30
+ end
31
+
32
+ it 'can provided #detailed rate' do
33
+ detailed_rate = CurrencyCloud::Rate.detailed(buy_currency: 'GBP', sell_currency: 'USD', fixed_side: 'buy', amount: '10000')
34
+
35
+ expect(detailed_rate).to be_a_kind_of(CurrencyCloud::Rate)
36
+ expect(detailed_rate.client_sell_amount).to eq('15234.00')
37
+ expect(detailed_rate.settlement_cut_off_time).to eq('2015-04-29T14:00:00Z')
38
+ end
39
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Reference', :vcr => true do
4
+ before do
5
+ CurrencyCloud.reset_session
6
+ CurrencyCloud.environment = :demonstration
7
+ CurrencyCloud.token = '1c9da5726314246acfb09ec5651307a5'
8
+ end
9
+
10
+ it 'can retrieve #beneficiary_required_details' do
11
+ details = CurrencyCloud::Reference.beneficiary_required_details(:currency => 'GBP', :bank_account_country => 'GB', :beneficiary_country => 'GB')
12
+ expect(details).to_not be_empty
13
+
14
+ details = details.first
15
+ expect(details['payment_type']).to eq('priority')
16
+ expect(details["payment_type"]).to eq("priority")
17
+ expect(details["beneficiary_entity_type"]).to eq("individual")
18
+ expect(details["beneficiary_address"]).to eq("^.{1,255}")
19
+ expect(details["beneficiary_city"]).to eq("^.{1,255}")
20
+ expect(details["beneficiary_country"]).to eq("^[A-z]{2}$")
21
+ expect(details["beneficiary_first_name"]).to eq("^.{1,255}")
22
+ expect(details["beneficiary_last_name"]).to eq("^.{1,255}")
23
+ expect(details["acct_number"]).to eq("^[0-9A-Z]{1,50}$")
24
+ expect(details["sort_code"]).to eq("^\\d{6}$")
25
+ end
26
+
27
+ it 'can retrieve #conversion_dates' do
28
+ dates = CurrencyCloud::Reference.conversion_dates(:conversion_pair => 'GBPUSD')
29
+
30
+ expect(dates.invalid_conversion_dates).to_not be_empty
31
+ invalid_conversion_date = dates.invalid_conversion_dates.first
32
+ expect(invalid_conversion_date).to eq(["2015-05-02", "No trading on Saturday"])
33
+ expect(dates.first_conversion_date).to eq('2015-04-30')
34
+ expect(dates.default_conversion_date).to eq('2015-04-30')
35
+ end
36
+
37
+ it 'can retrieve #currencies' do
38
+ currencies = CurrencyCloud::Reference.currencies
39
+ expect(currencies).to_not be_empty
40
+
41
+ currency = currencies.first
42
+ expect(currency).to be_a_kind_of(CurrencyCloud::Currency)
43
+ expect(currency.code).to eq('AED')
44
+ expect(currency.name).to eq('United Arab Emirates Dirham')
45
+ expect(currency.decimal_places).to eq(2)
46
+ end
47
+
48
+ it 'can retrieve #settlement_accounts' do
49
+ settlement_accounts = CurrencyCloud::Reference.settlement_accounts(:currency => 'GBP')
50
+ expect(settlement_accounts).to_not be_empty
51
+
52
+ settlement_account = settlement_accounts.first
53
+ expect(settlement_account).to be_a_kind_of(CurrencyCloud::SettlementAccount)
54
+ expect(settlement_account.bank_account_holder_name).to eq("The Currency Cloud GBP - Client Seg A/C")
55
+ expect(settlement_account.bank_address).to be_empty
56
+ end
57
+ end