finapps 2.1.4 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -18
- data/.ruby-gemset +1 -1
- data/.travis.yml +5 -2
- data/README.md +1 -1
- data/finapps.gemspec +10 -12
- data/lib/finapps.rb +5 -21
- data/lib/finapps/rest/client.rb +42 -53
- data/lib/finapps/rest/institutions.rb +2 -2
- data/lib/finapps/rest/institutions_forms.rb +2 -2
- data/lib/finapps/rest/order_reports.rb +4 -4
- data/lib/finapps/rest/order_statuses.rb +2 -2
- data/lib/finapps/rest/order_tokens.rb +2 -3
- data/lib/finapps/rest/orders.rb +6 -6
- data/lib/finapps/rest/password_resets.rb +4 -4
- data/lib/finapps/rest/sessions.rb +2 -2
- data/lib/finapps/rest/user_institutions.rb +21 -26
- data/lib/finapps/rest/user_institutions_forms.rb +2 -2
- data/lib/finapps/rest/user_institutions_statuses.rb +2 -2
- data/lib/finapps/rest/users.rb +5 -5
- data/lib/finapps/rest/version.rb +1 -1
- data/lib/finapps/version.rb +1 -1
- data/spec/rest/client_spec.rb +4 -13
- data/spec/rest/institutions_forms_spec.rb +5 -2
- data/spec/rest/institutions_spec.rb +4 -2
- data/spec/rest/order_reports_spec.rb +4 -4
- data/spec/rest/order_statuses_spec.rb +3 -2
- data/spec/rest/order_tokens_spec.rb +3 -2
- data/spec/rest/orders_spec.rb +6 -5
- data/spec/rest/password_resets_spec.rb +4 -4
- data/spec/rest/sessions_spec.rb +2 -2
- data/spec/rest/user_institutions_forms_spec.rb +5 -2
- data/spec/rest/user_institutions_spec.rb +10 -9
- data/spec/rest/user_institutions_statuses_spec.rb +3 -2
- data/spec/rest/users_spec.rb +4 -4
- data/spec/rest/version_spec.rb +1 -1
- data/spec/spec_helper.rb +5 -3
- data/spec/spec_helpers/client.rb +1 -1
- metadata +49 -124
- data/lib/core_extensions/hash/compact.rb +0 -23
- data/lib/core_extensions/object/blank.rb +0 -69
- data/lib/core_extensions/object/is_integer.rb +0 -10
- data/lib/core_extensions/string/json_to_hash.rb +0 -10
- data/lib/finapps/error.rb +0 -17
- data/lib/finapps/middleware/middleware.rb +0 -22
- data/lib/finapps/middleware/request/accept_json.rb +0 -14
- data/lib/finapps/middleware/request/no_encoding_basic_authentication.rb +0 -21
- data/lib/finapps/middleware/request/tenant_authentication.rb +0 -20
- data/lib/finapps/middleware/request/user_agent.rb +0 -15
- data/lib/finapps/middleware/response/custom_logger.rb +0 -41
- data/lib/finapps/middleware/response/raise_error.rb +0 -46
- data/lib/finapps/rest/base_client.rb +0 -122
- data/lib/finapps/rest/configuration.rb +0 -31
- data/lib/finapps/rest/connection.rb +0 -35
- data/lib/finapps/rest/credentials.rb +0 -21
- data/lib/finapps/rest/defaults.rb +0 -80
- data/lib/finapps/rest/resources.rb +0 -64
- data/lib/finapps/utils/loggeable.rb +0 -14
- data/lib/finapps/utils/parameter_filter.rb +0 -32
- data/spec/core_extensions/hash/compact_spec.rb +0 -21
- data/spec/core_extensions/object/is_integer_spec.rb +0 -17
- data/spec/middleware/request/accept_json_spec.rb +0 -12
- data/spec/middleware/request/no_encoding_basic_authentication_spec.rb +0 -32
- data/spec/middleware/request/tenant_authentication_spec.rb +0 -34
- data/spec/middleware/request/user_agent_spec.rb +0 -12
- data/spec/middleware/response/raise_error_spec.rb +0 -24
- data/spec/rest/base_client_spec.rb +0 -120
- data/spec/rest/configuration_spec.rb +0 -39
- data/spec/rest/credentials_spec.rb +0 -20
- data/spec/rest/resources_spec.rb +0 -76
- data/spec/rest/timeout_spec.rb +0 -9
- data/spec/support/fixtures/relevance_ruleset_names.json +0 -47
- data/spec/utils/parameter_filter_spec.rb +0 -23
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module FinApps
|
3
|
-
module REST
|
4
|
-
module Defaults
|
5
|
-
API_VERSION = '2'
|
6
|
-
|
7
|
-
# noinspection SpellCheckingInspection
|
8
|
-
DEFAULTS = {
|
9
|
-
host: 'https://api.financialapps.com',
|
10
|
-
user_identifier: nil,
|
11
|
-
user_token: nil,
|
12
|
-
timeout: 30,
|
13
|
-
proxy: nil,
|
14
|
-
retry_limit: 1,
|
15
|
-
log_level: Logger::INFO
|
16
|
-
}.freeze
|
17
|
-
|
18
|
-
END_POINTS = {
|
19
|
-
users_create: 'users/new',
|
20
|
-
users_update: 'user',
|
21
|
-
users_update_password: 'user/password',
|
22
|
-
users_delete: 'users/:public_id',
|
23
|
-
users_show: 'users/:public_id',
|
24
|
-
users_login: 'users/login',
|
25
|
-
|
26
|
-
relevance_rulesets_list: 'relevance/ruleset/names',
|
27
|
-
relevance_rulesets_show: 'relevance/ruleset/:ruleset_name',
|
28
|
-
relevance_rulesets_run: 'relevance/run',
|
29
|
-
|
30
|
-
institutions_list: 'institutions/:search_term/search',
|
31
|
-
institutions_form: 'institutions/:site_id/form',
|
32
|
-
|
33
|
-
user_institutions_list: 'institutions/user',
|
34
|
-
user_institutions_add: 'institutions/:site_id/add',
|
35
|
-
user_institutions_show: 'institutions/user/:user_institution_id',
|
36
|
-
user_institutions_update: 'institutions/user/:user_institution_id/credentials',
|
37
|
-
user_institutions_delete: 'institutions/user/:user_institution_id',
|
38
|
-
user_institutions_status: 'institutions/user/:user_institution_id/status',
|
39
|
-
user_institutions_mfa: 'institutions/user/:user_institution_id/mfa',
|
40
|
-
user_institutions_refresh: 'institutions/user/refresh',
|
41
|
-
user_institutions_form: 'institutions/user/:user_institution_id/form',
|
42
|
-
|
43
|
-
transactions_show: 'transaction/:transaction_id',
|
44
|
-
transactions_list: 'transactions/search',
|
45
|
-
transactions_update: 'transactions/edit',
|
46
|
-
|
47
|
-
categories_list: 'categories',
|
48
|
-
categories_new: 'categories',
|
49
|
-
categories_update: 'categories',
|
50
|
-
categories_show: 'categories/:category_id',
|
51
|
-
categories_delete: 'categories/:category_id',
|
52
|
-
|
53
|
-
budget_models_list: 'budget/templates',
|
54
|
-
budget_models_show: 'budget/template/:budget_model_id',
|
55
|
-
|
56
|
-
budget_calculation_create: 'budget/template/:budget_model_id/:income',
|
57
|
-
budget_calculation_show: 'categories',
|
58
|
-
|
59
|
-
budget_update: 'budget',
|
60
|
-
budget_show: 'budget/:start_date/:end_date',
|
61
|
-
|
62
|
-
cashflow_show: 'cashflow/:start_date/:end_date',
|
63
|
-
|
64
|
-
alert_list: 'alerts/:page/:requested/:sort/:asc/:read',
|
65
|
-
alert_update: 'alerts/:alert_id/:read',
|
66
|
-
alert_delete: 'alerts/:alert_id',
|
67
|
-
|
68
|
-
alert_definition_list: 'alerts/definitions',
|
69
|
-
alert_definition_show: 'alerts/definitions/:alert_name',
|
70
|
-
|
71
|
-
alert_settings_show: 'alerts/settings',
|
72
|
-
alert_settings_update: 'alerts/settings',
|
73
|
-
|
74
|
-
alert_preferences_show: 'alerts/preferences',
|
75
|
-
alert_preferences_update: 'alerts/preferences'
|
76
|
-
|
77
|
-
}.freeze
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module FinApps
|
3
|
-
module REST
|
4
|
-
class Resources # :nodoc:
|
5
|
-
include FinApps::Utils::ParameterFilter
|
6
|
-
require 'erb'
|
7
|
-
|
8
|
-
attr_reader :client
|
9
|
-
|
10
|
-
# @param [FinApps::REST::Client] client
|
11
|
-
# @return [FinApps::REST::Resources]
|
12
|
-
def initialize(client)
|
13
|
-
raise MissingArgumentsError.new 'Missing argument: client.' if client.nil?
|
14
|
-
raise InvalidArgumentsError.new 'Invalid argument: client.' unless client.is_a?(FinApps::REST::Client)
|
15
|
-
|
16
|
-
@client = client
|
17
|
-
end
|
18
|
-
|
19
|
-
def list(path=nil)
|
20
|
-
path = end_point.to_s if path.nil?
|
21
|
-
request_with_body(path, :get, {})
|
22
|
-
end
|
23
|
-
|
24
|
-
def create(params={}, path=nil)
|
25
|
-
request_with_body(path, :post, params)
|
26
|
-
end
|
27
|
-
|
28
|
-
def update(params={}, path=nil)
|
29
|
-
request_with_body(path, :put, params)
|
30
|
-
end
|
31
|
-
|
32
|
-
def show(id=nil, path=nil)
|
33
|
-
request_without_body(path, :get, id)
|
34
|
-
end
|
35
|
-
|
36
|
-
def destroy(id=nil, path=nil)
|
37
|
-
request_without_body(path, :delete, id)
|
38
|
-
end
|
39
|
-
|
40
|
-
def request_without_body(path, method, id)
|
41
|
-
raise MissingArgumentsError.new 'Missing argument: id.' if id.nil? && path.nil?
|
42
|
-
path = "#{end_point}/:id".sub ':id', ERB::Util.url_encode(id) if path.nil?
|
43
|
-
request_with_body path, method, {}
|
44
|
-
end
|
45
|
-
|
46
|
-
def request_with_body(path, method, params)
|
47
|
-
path = end_point if path.nil?
|
48
|
-
logger.debug "#{self.class.name}##{__method__} => path: #{path} params: #{skip_sensitive_data(params)}"
|
49
|
-
|
50
|
-
client.send_request path, method, params
|
51
|
-
end
|
52
|
-
|
53
|
-
protected
|
54
|
-
|
55
|
-
def logger
|
56
|
-
client.logger
|
57
|
-
end
|
58
|
-
|
59
|
-
def end_point
|
60
|
-
self.class.name.split('::').last.downcase
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module FinApps
|
3
|
-
module Utils
|
4
|
-
# Adds logging capabilities when included into other classes
|
5
|
-
module Loggeable
|
6
|
-
def logger
|
7
|
-
@logger ||= begin
|
8
|
-
require 'logger'
|
9
|
-
::Logger.new(STDOUT)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module FinApps
|
3
|
-
module Utils
|
4
|
-
module ParameterFilter
|
5
|
-
using StringExtensions
|
6
|
-
PROTECTED_KEYS = %w(login login1 username password password1 password_confirm token
|
7
|
-
x-finapps-token authorization).freeze
|
8
|
-
|
9
|
-
def skip_sensitive_data(hash)
|
10
|
-
if hash.is_a? String
|
11
|
-
hash = hash.json_to_hash
|
12
|
-
end
|
13
|
-
if hash.is_a? Hash
|
14
|
-
filtered_hash = hash.clone
|
15
|
-
filtered_hash.each do |key, value|
|
16
|
-
if PROTECTED_KEYS.include? key.to_s.downcase
|
17
|
-
filtered_hash[key] = '[REDACTED]'
|
18
|
-
elsif value.is_a?(Hash)
|
19
|
-
filtered_hash[key] = skip_sensitive_data(value)
|
20
|
-
elsif value.is_a?(Array)
|
21
|
-
filtered_hash[key] = value.map {|v| v.is_a?(Hash) ? skip_sensitive_data(v) : v }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
filtered_hash
|
26
|
-
else
|
27
|
-
hash
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe HashExtensions do
|
3
|
-
context 'when refining hash' do
|
4
|
-
using HashExtensions
|
5
|
-
|
6
|
-
subject { {a: true, b: false, c: nil} }
|
7
|
-
|
8
|
-
describe '#compact' do
|
9
|
-
it 'returns a hash with non nil values' do
|
10
|
-
expect(subject.compact).to eq(a: true, b: false)
|
11
|
-
expect(subject).to eq(a: true, b: false, c: nil)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
describe '#compact!' do
|
15
|
-
it 'replaces current hash with non nil values' do
|
16
|
-
expect(subject.compact!).to eq(a: true, b: false)
|
17
|
-
expect(subject).to eq(a: true, b: false)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe ObjectExtensions do
|
3
|
-
context 'when refining Object' do
|
4
|
-
using ObjectExtensions
|
5
|
-
|
6
|
-
describe '#integer?' do
|
7
|
-
context 'for integers' do
|
8
|
-
subject { 1 + rand(10) }
|
9
|
-
it { expect(subject.integer?).to eq(true) }
|
10
|
-
end
|
11
|
-
context 'for non integers' do
|
12
|
-
subject { rand }
|
13
|
-
it { expect(subject.integer?).to eq(false) }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe FinApps::Middleware::AcceptJson do
|
3
|
-
let(:fake_app) { proc {|env| env } }
|
4
|
-
describe '#call' do
|
5
|
-
subject { FinApps::Middleware::AcceptJson.new(fake_app) }
|
6
|
-
env = {request_headers: {}}
|
7
|
-
|
8
|
-
it('generates a UserAgent header') do
|
9
|
-
expect(subject.call(env)[:request_headers][FinApps::Middleware::AcceptJson::KEY]).to eq('application/json')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe FinApps::Middleware::NoEncodingBasicAuthentication do
|
3
|
-
let(:valid_credentials) { VALID_CREDENTIALS }
|
4
|
-
let(:key) { FinApps::Middleware::NoEncodingBasicAuthentication::KEY }
|
5
|
-
|
6
|
-
describe '#call' do
|
7
|
-
fake_app = proc {|env| env }
|
8
|
-
|
9
|
-
context 'when credentials were provided' do
|
10
|
-
let(:middleware) do
|
11
|
-
FinApps::Middleware::NoEncodingBasicAuthentication.new(fake_app, VALID_CREDENTIALS[:token])
|
12
|
-
end
|
13
|
-
let(:expected_header) { "Basic #{valid_credentials[:token]}" }
|
14
|
-
|
15
|
-
context 'when header was not previously set' do
|
16
|
-
let(:request_env) { {request_headers: {}} }
|
17
|
-
subject(:actual_header) { middleware.call(request_env)[:request_headers][key] }
|
18
|
-
|
19
|
-
it('generates a header') { expect(actual_header).to eq(expected_header) }
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'when header was previously set' do
|
23
|
-
let(:existing_header) { {FinApps::Middleware::NoEncodingBasicAuthentication::KEY => 'foo'} }
|
24
|
-
let(:request_env) { {request_headers: existing_header} }
|
25
|
-
subject(:actual_header) { middleware.call(request_env)[:request_headers][key] }
|
26
|
-
|
27
|
-
it('does not override existing header') { expect(actual_header).to eq('foo') }
|
28
|
-
it('does not generate a header') { expect(actual_header).to_not eq(expected_header) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe FinApps::Middleware::TenantAuthentication do
|
3
|
-
let(:valid_tenant_options) { VALID_CREDENTIALS }
|
4
|
-
let(:key) { FinApps::Middleware::TenantAuthentication::KEY }
|
5
|
-
|
6
|
-
describe '#call' do
|
7
|
-
fake_app = proc {|env| env }
|
8
|
-
|
9
|
-
context 'when company credentials were provided' do
|
10
|
-
let(:middleware) do
|
11
|
-
FinApps::Middleware::TenantAuthentication.new(fake_app,
|
12
|
-
VALID_CREDENTIALS[:identifier],
|
13
|
-
VALID_CREDENTIALS[:token])
|
14
|
-
end
|
15
|
-
let(:expected_header) { "#{valid_tenant_options[:identifier]}=#{valid_tenant_options[:token]}" }
|
16
|
-
|
17
|
-
context 'when header was not previously set' do
|
18
|
-
let(:request_env) { {request_headers: {}} }
|
19
|
-
subject(:actual_header) { middleware.call(request_env)[:request_headers][key] }
|
20
|
-
|
21
|
-
it('generates a Tenant Authentication header') { expect(actual_header).to eq(expected_header) }
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'when header was previously set' do
|
25
|
-
let(:existing_header) { {FinApps::Middleware::TenantAuthentication::KEY => 'foo'} }
|
26
|
-
let(:request_env) { {request_headers: existing_header} }
|
27
|
-
subject(:actual_header) { middleware.call(request_env)[:request_headers][key] }
|
28
|
-
|
29
|
-
it('does not override existing Tenant Authentication header') { expect(actual_header).to eq('foo') }
|
30
|
-
it('does not generate a Tenant Authentication header') { expect(actual_header).to_not eq(expected_header) }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe FinApps::Middleware::UserAgent do
|
3
|
-
let(:fake_app) { proc {|env| env } }
|
4
|
-
describe '#call' do
|
5
|
-
subject { FinApps::Middleware::UserAgent.new(fake_app) }
|
6
|
-
env = {request_headers: {}}
|
7
|
-
|
8
|
-
it('generates a UserAgent header') do
|
9
|
-
expect(subject.call(env)[:request_headers][FinApps::Middleware::UserAgent::KEY]).to start_with('finapps-ruby')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe FinApps::Middleware::RaiseError do
|
3
|
-
let(:fake_app) { proc {|env| env } }
|
4
|
-
Env = Struct.new(:status, :response_headers, :body)
|
5
|
-
|
6
|
-
describe '#on_complete' do
|
7
|
-
subject { FinApps::Middleware::RaiseError.new(fake_app) }
|
8
|
-
|
9
|
-
context 'for succesful requests' do
|
10
|
-
let(:env) { Env.new(200) }
|
11
|
-
it { expect { subject.on_complete(env) }.not_to raise_error }
|
12
|
-
end
|
13
|
-
context 'for client errors' do
|
14
|
-
let(:env) { Env.new(401, {}, '{"messages":["Invalid User Identifier or Credentials"]}') }
|
15
|
-
error_message = 'the server responded with status 401'
|
16
|
-
it { expect { subject.on_complete(env) }.to raise_error(Faraday::Error::ClientError, error_message) }
|
17
|
-
end
|
18
|
-
context 'for connection failed error' do
|
19
|
-
let(:env) { Env.new(407) }
|
20
|
-
error_message = '407 "Proxy Authentication Required"'
|
21
|
-
it { expect { subject.on_complete(env) }.to raise_error(Faraday::Error::ConnectionFailed, error_message) }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
RSpec.describe FinApps::REST::BaseClient do
|
3
|
-
let(:valid_tenant_options) do
|
4
|
-
{tenant_identifier: VALID_CREDENTIALS[:identifier],
|
5
|
-
tenant_token: VALID_CREDENTIALS[:token]}
|
6
|
-
end
|
7
|
-
subject { FinApps::REST::BaseClient.new(valid_tenant_options) }
|
8
|
-
|
9
|
-
RESPONSE = 0
|
10
|
-
ERROR_MESSAGES = 1
|
11
|
-
let(:return_array) { %i(RESPONSE ERROR_MESSAGES) }
|
12
|
-
|
13
|
-
describe '#new' do
|
14
|
-
it 'assigns @config' do
|
15
|
-
expect(subject.config).to be_a(FinApps::REST::Configuration)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#user_credentials?' do
|
20
|
-
context 'when user credentials were not set' do
|
21
|
-
it { expect(subject.user_credentials?).to eq(false) }
|
22
|
-
end
|
23
|
-
context 'when user credentials were set' do
|
24
|
-
subject { FinApps::REST::BaseClient.new(valid_tenant_options.merge(user_identifier: 1, user_token: 2)) }
|
25
|
-
it { expect(subject.user_credentials?).to eq(true) }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe '#connection' do
|
30
|
-
it 'created a Faraday connection object' do
|
31
|
-
expect(subject.connection).to be_a(Faraday::Connection)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'memoizes the results' do
|
35
|
-
first = subject.connection
|
36
|
-
second = subject.connection
|
37
|
-
expect(first.object_id).to eq(second.object_id)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe '#send_request' do
|
42
|
-
it 'should raise FinApps::InvalidArgumentsError if method is NOT supported' do
|
43
|
-
expect { subject.send_request('fake_path', :option) }.to raise_error(FinApps::InvalidArgumentsError,
|
44
|
-
'Method not supported: option.')
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should raise FinApps::MissingArgumentsError if method is NOT provided' do
|
48
|
-
expect { subject.send_request(nil, :get) }.to raise_error(FinApps::MissingArgumentsError,
|
49
|
-
'Missing argument: path.')
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should raise FinApps::MissingArgumentsError if path is NOT provided' do
|
53
|
-
expect { subject.send_request('fake_path', nil) }.to raise_error(FinApps::MissingArgumentsError,
|
54
|
-
'Missing argument: method.')
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'when method and path are provided' do
|
58
|
-
subject { FinApps::REST::BaseClient.new(valid_tenant_options).send_request('relevance/ruleset/names', :get) }
|
59
|
-
let(:return_array) { %i(RESPONSE ERROR_MESSAGES) }
|
60
|
-
|
61
|
-
it('returns an array of 2 items') do
|
62
|
-
expect(subject).to be_a(Array)
|
63
|
-
expect(subject.size).to eq(return_array.length)
|
64
|
-
end
|
65
|
-
|
66
|
-
context 'for unsupported methods' do
|
67
|
-
subject { FinApps::REST::BaseClient.new(valid_tenant_options).send_request('users', :options) }
|
68
|
-
|
69
|
-
it do
|
70
|
-
expect { subject.send_request(nil, :get) }
|
71
|
-
.to raise_error(FinApps::InvalidArgumentsError, 'Method not supported: options.')
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'for client errors' do
|
76
|
-
subject { FinApps::REST::BaseClient.new(valid_tenant_options).send_request('client_error', :get) }
|
77
|
-
|
78
|
-
it('result is null') { expect(subject[RESPONSE]).to be_nil }
|
79
|
-
it('error_messages is an array') { expect(subject[ERROR_MESSAGES]).to be_a(Array) }
|
80
|
-
it('error_messages gets populated') { expect(subject[ERROR_MESSAGES].first).to eq 'Password Minimum size is 8' }
|
81
|
-
end
|
82
|
-
|
83
|
-
context 'for server errors' do
|
84
|
-
subject { FinApps::REST::BaseClient.new(valid_tenant_options).send_request('server_error', :get) }
|
85
|
-
|
86
|
-
it('the result should be nil') { expect(subject[RESPONSE]).to be_nil }
|
87
|
-
it { expect(subject[ERROR_MESSAGES]).not_to be_nil }
|
88
|
-
it { expect(subject[ERROR_MESSAGES]).to be_a(Array) }
|
89
|
-
it { expect(subject[ERROR_MESSAGES].first).to eq 'the server responded with status 500' }
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'for proxy errors' do
|
93
|
-
subject { FinApps::REST::BaseClient.new(valid_tenant_options).send_request('proxy_error', :get) }
|
94
|
-
|
95
|
-
it { expect { subject }.to raise_error(Faraday::ConnectionFailed, '407 "Proxy Authentication Required"') }
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
context 'if a block is provided' do
|
100
|
-
it('gets executed on the response') do
|
101
|
-
expect(subject.send_request('relevance/ruleset/names', :get, &:status)[RESPONSE]).to eq(200)
|
102
|
-
expect(subject.send_request('relevance/ruleset/names', :get) {|r| r.body.length }[RESPONSE]).to eq(45)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe '#method_missing' do
|
108
|
-
context 'for unsupported methods' do
|
109
|
-
it { expect { subject.unsupported }.to raise_error(NoMethodError) }
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe '#respond_to_missing?' do
|
114
|
-
context 'for supported methods' do
|
115
|
-
[:get, :post, :put, :delete].each do |method|
|
116
|
-
it("responds to #{method}") { expect(subject).to respond_to(method) }
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|