finapps 0.22.4.pre → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,37 +7,49 @@ module FinApps
7
7
  # @transaction_id [String]
8
8
  # # @return [Hash, Array<String>]
9
9
  def show(transaction_id)
10
+ logger.debug "##{__method__.to_s} => Started"
11
+
10
12
  end_point = Defaults::END_POINTS[:transactions_show]
11
13
  logger.debug "##{__method__.to_s} => end_point: #{end_point}"
12
14
 
13
15
  path = end_point.sub ':transaction_id', ERB::Util.url_encode(transaction_id)
14
16
  logger.debug "##{__method__.to_s} => path: #{path}"
15
17
 
16
- transaction, error_messages = @client.send(path, :get)
18
+ transaction, error_messages = @client.send_request(path, :get)
19
+
20
+ logger.debug "##{__method__.to_s} => Completed"
17
21
  return transaction, error_messages
18
22
  end
19
23
 
20
24
  # @param [Hash] params
21
25
  # @return [Array<Hash>, Array<String>]
22
26
  def search(params={})
27
+ logger.debug "##{__method__.to_s} => Started"
28
+
23
29
  path = Defaults::END_POINTS[:transactions_list]
24
30
  logger.debug "##{__method__.to_s} => path: #{path}"
25
31
 
26
- transactions, error_messages = @client.send(path, :post, params.compact)
32
+ transactions, error_messages = @client.send_request(path, :post, params.compact)
33
+
34
+ logger.debug "##{__method__.to_s} => Completed"
27
35
  return transactions, error_messages
28
36
  end
29
37
 
30
38
  # @param [Hash] params
31
39
  # @return [Array<Hash>, Array<String>]
32
40
  def update(params={})
41
+ logger.debug "##{__method__.to_s} => Started"
42
+
33
43
  path = Defaults::END_POINTS[:transactions_update]
34
44
  logger.debug "##{__method__.to_s} => path: #{path}"
35
45
 
36
- _, error_messages = @client.send(path, :put, params.compact)
46
+ _, error_messages = @client.send_request(path, :put, params.compact)
47
+
48
+ logger.debug "##{__method__.to_s} => Completed"
37
49
  error_messages
38
50
  end
39
51
 
40
52
  end
41
53
 
42
54
  end
43
- end
55
+ end
@@ -7,15 +7,19 @@ module FinApps
7
7
  include FinApps::REST::Defaults
8
8
 
9
9
  def list
10
+ logger.debug "##{__method__.to_s} => Started"
11
+
10
12
  path = Defaults::END_POINTS[:user_institutions_list]
11
13
  logger.debug "##{__method__.to_s} => path: #{path}"
12
14
 
13
- user_institutions, error_messages = @client.send(path, :get)
15
+ user_institutions, error_messages = @client.send_request(path, :get)
14
16
 
17
+ logger.debug "##{__method__.to_s} => Completed"
15
18
  return user_institutions, error_messages
16
19
  end
17
20
 
18
21
  def add(site_id, parameters)
22
+ logger.debug "##{__method__.to_s} => Started"
19
23
 
20
24
  raise MissingArgumentsError.new 'Missing argument: site_id.' if site_id.blank?
21
25
  logger.debug "##{__method__.to_s} => site_id: #{site_id}"
@@ -29,12 +33,14 @@ module FinApps
29
33
  path = end_point.sub ':site_id', ERB::Util.url_encode(site_id)
30
34
  logger.debug "##{__method__.to_s} => path: #{path}"
31
35
 
32
- user_institution, error_messages = @client.send(path, :post, :parameters => parameters)
36
+ user_institution, error_messages = @client.send_request(path, :post, :parameters => parameters)
33
37
 
38
+ logger.debug "##{__method__.to_s} => Completed"
34
39
  return user_institution, error_messages
35
40
  end
36
41
 
37
42
  def show(user_institution_id)
43
+ logger.debug "##{__method__.to_s} => Started"
38
44
 
39
45
  raise MissingArgumentsError.new 'Missing argument: user_institution_id.' if user_institution_id.blank?
40
46
  logger.debug "##{__method__.to_s} => user_institution_id: #{user_institution_id}"
@@ -45,12 +51,15 @@ module FinApps
45
51
  path = end_point.sub ':user_institution_id', ERB::Util.url_encode(user_institution_id)
46
52
  logger.debug "##{__method__.to_s} => path: #{path}"
47
53
 
48
- user_institution, error_messages = @client.send(path, :get)
54
+ user_institution, error_messages = @client.send_request(path, :get)
49
55
 
56
+ logger.debug "##{__method__.to_s} => Completed"
50
57
  return user_institution, error_messages
51
58
  end
52
59
 
53
60
  def form(user_institution_id)
61
+ logger.debug "##{__method__.to_s} => Started"
62
+
54
63
  raise MissingArgumentsError.new 'Missing argument: user_institution_id.' if user_institution_id.blank?
55
64
  logger.debug "##{__method__.to_s} => user_institution_id: #{user_institution_id}"
56
65
 
@@ -60,12 +69,15 @@ module FinApps
60
69
  path = end_point.sub ':user_institution_id', ERB::Util.url_encode(user_institution_id)
61
70
  logger.debug "##{__method__.to_s} => path: #{path}"
62
71
 
63
- user_institution, error_messages = @client.send(path, :get)
72
+ user_institution, error_messages = @client.send_request(path, :get)
64
73
 
74
+ logger.debug "##{__method__.to_s} => Completed"
65
75
  return user_institution, error_messages
66
76
  end
67
77
 
68
78
  def status(user_institution_id)
79
+ logger.debug "##{__method__.to_s} => Started"
80
+
69
81
  raise MissingArgumentsError.new 'Missing argument: user_institution_id.' if user_institution_id.blank?
70
82
  logger.debug "##{__method__.to_s} => user_institution_id: #{user_institution_id}"
71
83
 
@@ -75,12 +87,15 @@ module FinApps
75
87
  path = end_point.sub ':user_institution_id', ERB::Util.url_encode(user_institution_id)
76
88
  logger.debug "##{__method__.to_s} => path: #{path}"
77
89
 
78
- user_institution, error_messages = @client.send(path, :get)
90
+ user_institution, error_messages = @client.send_request(path, :get)
79
91
 
92
+ logger.debug "##{__method__.to_s} => Completed"
80
93
  return user_institution, error_messages
81
94
  end
82
95
 
83
96
  def mfa(user_institution_id, parameters)
97
+ logger.debug "##{__method__.to_s} => Started"
98
+
84
99
  raise MissingArgumentsError.new 'Missing argument: user_institution_id.' if user_institution_id.blank?
85
100
  logger.debug "##{__method__.to_s} => user_institution_id: #{user_institution_id}"
86
101
 
@@ -93,12 +108,15 @@ module FinApps
93
108
  path = end_point.sub ':user_institution_id', ERB::Util.url_encode(user_institution_id)
94
109
  logger.debug "##{__method__.to_s} => path: #{path}"
95
110
 
96
- user_institution, error_messages = @client.send(path, :put, :parameters => parameters)
111
+ user_institution, error_messages = @client.send_request(path, :put, :parameters => parameters)
97
112
 
113
+ logger.debug "##{__method__.to_s} => Completed"
98
114
  return user_institution, error_messages
99
115
  end
100
116
 
101
117
  def update(user_institution_id, parameters)
118
+ logger.debug "##{__method__.to_s} => Started"
119
+
102
120
  raise MissingArgumentsError.new 'Missing argument: user_institution_id.' if user_institution_id.blank?
103
121
  logger.debug "##{__method__.to_s} => user_institution_id: #{user_institution_id}"
104
122
 
@@ -111,22 +129,28 @@ module FinApps
111
129
  path = end_point.sub ':user_institution_id', ERB::Util.url_encode(user_institution_id)
112
130
  logger.debug "##{__method__.to_s} => path: #{path}"
113
131
 
114
- user_institution, error_messages = @client.send(path, :put, :parameters => parameters)
132
+ user_institution, error_messages = @client.send_request(path, :put, :parameters => parameters)
115
133
 
134
+ logger.debug "##{__method__.to_s} => Completed"
116
135
  return user_institution, error_messages
117
136
  end
118
137
 
119
138
  def refresh
139
+ logger.debug "##{__method__.to_s} => Started"
140
+
120
141
  path = Defaults::END_POINTS[:user_institutions_refresh]
121
142
  logger.debug "##{__method__.to_s} => path: #{path}"
122
143
 
123
- user_institutions, error_messages = @client.send(path, :get)
144
+ user_institutions, error_messages = @client.send_request(path, :get)
124
145
 
146
+ logger.debug "##{__method__.to_s} => Completed"
125
147
  return user_institutions, error_messages
126
148
  end
127
149
 
128
150
  # @return [Hash, Array<String>]
129
151
  def delete(user_institution_id)
152
+ logger.debug "##{__method__.to_s} => Started"
153
+
130
154
  raise MissingArgumentsError.new 'Missing argument: user_institution_id.' if user_institution_id.blank?
131
155
  logger.debug "##{__method__.to_s} => user_institution_id: #{user_institution_id.inspect}"
132
156
 
@@ -136,12 +160,13 @@ module FinApps
136
160
  path = end_point.sub ':user_institution_id', ERB::Util.url_encode(user_institution_id)
137
161
  logger.debug "##{__method__.to_s} => path: #{path}"
138
162
 
139
- _, error_messages = @client.send(path, :delete)
163
+ _, error_messages = @client.send_request(path, :delete)
140
164
 
165
+ logger.debug "##{__method__.to_s} => Completed"
141
166
  error_messages
142
167
  end
143
168
 
144
169
  end
145
170
 
146
171
  end
147
- end
172
+ end
@@ -10,37 +10,44 @@ module FinApps
10
10
  # @param [Hash] params
11
11
  # @return [FinApps::REST::User, Array<String>]
12
12
  def create(params = {})
13
+ logger.debug "##{__method__.to_s} => Started"
14
+
13
15
  raise MissingArgumentsError.new 'Missing argument: params.' if params.blank?
14
16
  logger.debug "##{__method__.to_s} => params: #{skip_sensitive_data params}"
15
17
 
16
18
  end_point = Defaults::END_POINTS[:users_create]
17
19
  logger.debug "##{__method__.to_s} => end_point: #{end_point}"
18
20
 
19
- user, error_messages = @client.send(end_point, :post, params) { |r| User.new(r.body) }
21
+ user, error_messages = @client.send_request(end_point, :post, params) { |r| User.new(r.body) }
22
+ logger.debug "##{__method__.to_s} => Completed"
20
23
 
21
24
  return user, error_messages
22
25
  end
23
26
 
24
27
  def update(params = {})
25
- raise MissingArgumentsError.new 'Missing argument: params.' if params.blank?
28
+ logger.debug "##{__method__.to_s} => Started"
29
+
26
30
  logger.debug "##{__method__.to_s} => params: #{skip_sensitive_data params}"
27
31
 
28
32
  path = Defaults::END_POINTS[:users_update]
29
33
  logger.debug "##{__method__.to_s} => path: #{path}"
30
34
 
31
- _, error_messages = @client.send(path, :put, params.compact)
35
+ _, error_messages = @client.send_request(path, :put, params.compact)
32
36
 
37
+ logger.debug "##{__method__.to_s} => Completed"
33
38
  error_messages
34
39
  end
35
40
 
36
41
  def update_password(params = {})
37
- raise MissingArgumentsError.new 'Missing argument: params.' if params.blank?
42
+ logger.debug "##{__method__.to_s} => Started"
43
+
38
44
  logger.debug "##{__method__.to_s} => params: #{skip_sensitive_data params}"
39
45
 
40
46
  path = Defaults::END_POINTS[:users_update_password]
41
47
  logger.debug "##{__method__.to_s} => path: #{path}"
42
48
 
43
- user, error_messages = @client.send(path, :put, params.compact) { |r| User.new(r.body) }
49
+ user, error_messages = @client.send_request(path, :put, params.compact) { |r| User.new(r.body) }
50
+ logger.debug "##{__method__.to_s} => Completed"
44
51
 
45
52
  return user, error_messages
46
53
  end
@@ -48,30 +55,16 @@ module FinApps
48
55
  # @param [Hash] params
49
56
  # @return [FinApps::REST::User, Array<String>]
50
57
  def login(params = {})
58
+ logger.debug "##{__method__.to_s} => Started"
59
+
51
60
  raise MissingArgumentsError.new 'Missing argument: params.' if params.blank?
52
61
  logger.debug "##{__method__.to_s} => params: #{skip_sensitive_data params}"
53
62
 
54
63
  end_point = Defaults::END_POINTS[:users_login]
55
64
  logger.debug "##{__method__.to_s} => end_point: #{end_point}"
56
65
 
57
- user, error_messages = @client.send(end_point, :post, params) { |r| User.new(r.body) }
58
-
59
- return user, error_messages
60
- end
61
-
62
- # @param [String] public_id
63
- # @return [FinApps::REST::User, Array<String>]
64
- def show(public_id)
65
- raise MissingArgumentsError.new 'Missing argument: public_id.' if public_id.blank?
66
- logger.debug "##{__method__.to_s} => public_id: #{public_id}"
67
-
68
- end_point = Defaults::END_POINTS[:users_show]
69
- logger.debug "##{__method__.to_s} => end_point: #{end_point}"
70
-
71
- path = end_point.sub ':public_id', ERB::Util.url_encode(public_id)
72
- logger.debug "##{__method__.to_s} => path: #{path}"
73
-
74
- user, error_messages = @client.send(path, :get) { |r| User.new(r.body) }
66
+ user, error_messages = @client.send_request(end_point, :post, params) { |r| User.new(r.body) }
67
+ logger.debug "##{__method__.to_s} => Completed"
75
68
 
76
69
  return user, error_messages
77
70
  end
@@ -79,6 +72,8 @@ module FinApps
79
72
  # @param [String] public_id
80
73
  # @return [Array<String>]
81
74
  def delete(public_id)
75
+ logger.debug "##{__method__.to_s} => Started"
76
+
82
77
  raise MissingArgumentsError.new 'Missing argument: public_id.' if public_id.blank?
83
78
  logger.debug "##{__method__.to_s} => public_id: #{public_id}"
84
79
 
@@ -88,7 +83,8 @@ module FinApps
88
83
  path = end_point.sub ':public_id', ERB::Util.url_encode(public_id)
89
84
  logger.debug "##{__method__.to_s} => path: #{path}"
90
85
 
91
- _, error_messages = @client.send(path, :delete)
86
+ _, error_messages = @client.send_request(path, :delete)
87
+ logger.debug "##{__method__.to_s} => Completed"
92
88
 
93
89
  error_messages
94
90
  end
@@ -2,14 +2,14 @@ module FinApps
2
2
  module Logging
3
3
 
4
4
  SEVERITY_LABEL = %w(DEBUG INFO WARN ERROR FATAL UNKNOWN)
5
- PROTECTED_KEYS = %w(login password password_confirm password1 token)
5
+ PROTECTED_KEYS = %w(login login1 password password1 password_confirm token)
6
6
  FORMAT = "\033[%sm[%s#%d] %5s -- %s: %s\033[0m\n"
7
7
  FORMAT_TAG = "\033[%sm[%s#%d] %5s -- %s: %s %s\033[0m\n"
8
8
  SEVERITY_COLOR_MAP = {:debug => '0', :info => '32', :warn => '33', :error => '31', :fatal => '31', :unknown => '0;37'}
9
9
 
10
10
 
11
11
  class << self;
12
- attr_accessor :tag;
12
+ attr_accessor :tag, :level;
13
13
  end
14
14
 
15
15
  def logger=(logger)
@@ -23,21 +23,21 @@ module FinApps
23
23
  require 'logger' unless defined?(::Logger)
24
24
  ::Logger.new(STDOUT).tap do |log|
25
25
  log.progname = "#{self.class.to_s}"
26
+ log.level = Logging.level if Logging.level.present?
26
27
  log.formatter = proc do |severity, time, progname, msg|
27
28
  Logging.tag.present? ?
28
29
  FORMAT_TAG % [severity_to_color(severity), format_datetime(time), $$, severity, progname, Logging.tag.to_s, msg2str(msg)] :
29
30
  FORMAT % [severity_to_color(severity), format_datetime(time), $$, severity, progname, msg2str(msg)]
31
+
30
32
  end
31
33
  end
32
34
  end
33
35
 
34
36
  end
35
37
 
36
- def set_up_logger_level(logger_level)
37
- unless logger_level.blank? || logger.level == logger_level
38
- logger.info "##{__method__.to_s} => Setting logger level to #{SEVERITY_LABEL[logger_level]}"
39
- logger.level = logger_level
40
- end
38
+ def logger_config(config)
39
+ Logging.tag= config[:logger_tag] if config[:logger_tag].present?
40
+ Logging.level = config[:log_level] if config[:log_level].present?
41
41
  end
42
42
 
43
43
  # noinspection SpellCheckingInspection
@@ -1,3 +1,3 @@
1
1
  module FinApps
2
- VERSION = '0.22.4.pre'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -0,0 +1,32 @@
1
+ RSpec.describe FinApps::Middleware::ApiToken do
2
+
3
+ describe '#call' do
4
+
5
+ fake_app = Proc.new { |env| env }
6
+ valid_credentials = {:company_identifier => 'id', :company_token => 'token'}
7
+
8
+ context 'when company_identifier is NOT provided' do
9
+ let(:api_token) { FinApps::Middleware::ApiToken.new fake_app, valid_credentials.select { |x| x!= :company_identifier } }
10
+ it { expect { api_token.call({}) }.to raise_error(FinApps::REST::MissingArgumentsError) }
11
+ end
12
+
13
+ context 'when company_token is NOT provided' do
14
+ let(:api_token) { FinApps::Middleware::ApiToken.new fake_app, valid_credentials.select { |x| x!= :company_token } }
15
+ it { expect { api_token.call({}) }.to raise_error(FinApps::REST::MissingArgumentsError) }
16
+ end
17
+
18
+ context 'when company credentials were provided' do
19
+
20
+ let(:api_token) { FinApps::Middleware::ApiToken.new fake_app, valid_credentials }
21
+ let(:expected_header_value) { "#{valid_credentials[:company_identifier]}=#{valid_credentials[:company_token]}" }
22
+ subject(:call) { api_token.call({:request_headers => {}}) }
23
+
24
+ it { expect { call }.not_to raise_error }
25
+ it 'should generate the X-FinApps-Token header' do
26
+ expect(call[:request_headers]['X-FinApps-Token']).to eq(expected_header_value)
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+
@@ -1,91 +1,123 @@
1
- require 'rspec'
2
- require 'finapps'
1
+ RSpec.describe FinApps::REST::Client do
3
2
 
4
- module FinApps
3
+ describe '#new' do
5
4
 
6
- describe FinApps::REST::Client do
5
+ context 'when company_identifier is NOT provided' do
6
+ it { expect { FinApps::REST::Client.new nil, :company_token }.to raise_error(FinApps::REST::MissingArgumentsError) }
7
+ end
7
8
 
8
- before do
9
- @client = FinApps::REST::Client.new :company_identifier, :company_token
9
+ context 'when company_token is NOT provided' do
10
+ it { expect { FinApps::REST::Client.new :company_identifier, nil }.to raise_error(FinApps::REST::MissingArgumentsError) }
10
11
  end
11
12
 
12
- it 'responds to send' do
13
- expect(@client).to respond_to(:send)
13
+ context 'when company_identifier is not string or symbol' do
14
+ it { expect { FinApps::REST::Client.new 1, :company_token }.to raise_error(FinApps::REST::InvalidArgumentsError) }
14
15
  end
15
16
 
16
- it 'responds to user_credentials!' do
17
- expect(@client).to respond_to(:user_credentials!)
17
+ context 'when company_token is not string or symbol' do
18
+ it { expect { FinApps::REST::Client.new :company_identifier, 1 }.to raise_error(FinApps::REST::InvalidArgumentsError) }
18
19
  end
19
20
 
20
- it 'responds to public api methods' do
21
- [:alert, :alert_definition, :alert_settings, :alert_preferences,
22
- :budgets, :budget_calculation, :budget_models, :cashflows,
23
- :categories, :institutions, :transactions,
24
- :user_institutions, :users,
25
- :rule_sets].each do |method|
26
- expect(@client).to respond_to(method)
27
- end
21
+ context 'when options are not provided' do
22
+ it { expect { FinApps::REST::Client.new :company_identifier, :company_token }.not_to raise_error }
28
23
  end
29
24
 
30
- describe '#new' do
31
- context 'when company credentials are NOT provided' do
32
- it 'should raise a MissingArgumentsError exception' do
33
- expect { FinApps::REST::Client.new nil, nil }.to raise_error(FinApps::REST::MissingArgumentsError)
34
- end
35
- end
25
+ end
36
26
 
37
- context 'when company credentials are of invalid type' do
38
- it 'should raise an InvalidArgumentsError exception' do
39
- expect { FinApps::REST::Client.new 1, 2 }.to raise_error(FinApps::REST::InvalidArgumentsError)
40
- end
41
- end
27
+ context 'after initialized' do
42
28
 
43
- context 'when company credentials are provided' do
44
- it 'returns a client object' do
45
- expect(@client).to be_an_instance_of(FinApps::REST::Client)
46
- end
29
+ let(:client) { FinApps::REST::Client.new(:company_identifier, :company_token) }
30
+
31
+ [:send_request, :connection, :users, :institutions, :user_institutions, :transactions,
32
+ :categories, :budget_models, :budget_calculation, :budgets, :cashflows, :alert,
33
+ :alert_definition, :alert_preferences, :alert_settings, :rule_sets, :user_credentials!].each do |method|
34
+ it "responds to #{method}" do
35
+ expect(client).to respond_to(method)
47
36
  end
48
37
  end
49
38
 
50
- describe '.users' do
51
- it 'returns a Users object' do
52
- expect(@client.users).to be_an_instance_of(FinApps::REST::Users)
53
- end
39
+ describe '#users' do
40
+ it { expect(client.users).to be_an_instance_of(FinApps::REST::Users) }
54
41
  end
55
42
 
56
- describe '.users' do
57
- it 'returns a Users object' do
58
- expect(@client.users).to be_an_instance_of(FinApps::REST::Users)
59
- end
43
+ describe '#institutions' do
44
+ it { expect(client.institutions).to be_an_instance_of(FinApps::REST::Institutions) }
60
45
  end
61
46
 
62
- describe '.institutions' do
63
- it 'returns an Institutions object' do
64
- expect(@client.institutions).to be_an_instance_of(FinApps::REST::Institutions)
65
- end
47
+ describe '#user_institutions' do
48
+ it { expect(client.user_institutions).to be_an_instance_of(FinApps::REST::UserInstitutions) }
66
49
  end
67
50
 
68
- describe '.user_institutions' do
69
- it 'returns a UserInstitutions object' do
70
- expect(@client.user_institutions).to be_an_instance_of(FinApps::REST::UserInstitutions)
71
- end
51
+ describe '#categories' do
52
+ it { expect(client.categories).to be_an_instance_of(FinApps::REST::Categories) }
72
53
  end
73
54
 
74
- describe '.transactions' do
75
- it 'returns a Transactions object' do
76
- expect(@client.transactions).to be_an_instance_of(FinApps::REST::Transactions)
77
- end
55
+ describe '#budget_models' do
56
+ it { expect(client.budget_models).to be_an_instance_of(FinApps::REST::BudgetModels) }
57
+ end
58
+
59
+ describe '#budget_calculation' do
60
+ it { expect(client.budget_calculation).to be_an_instance_of(FinApps::REST::BudgetCalculation) }
61
+ end
62
+
63
+ describe '#budgets' do
64
+ it { expect(client.budgets).to be_an_instance_of(FinApps::REST::Budgets) }
65
+ end
66
+
67
+ describe '#cashflows' do
68
+ it { expect(client.cashflows).to be_an_instance_of(FinApps::REST::Cashflows) }
69
+ end
70
+
71
+ describe '#alert' do
72
+ it { expect(client.alert).to be_an_instance_of(FinApps::REST::Alert) }
73
+ end
74
+
75
+ describe '#alert_definition' do
76
+ it { expect(client.alert_definition).to be_an_instance_of(FinApps::REST::AlertDefinition) }
77
+ end
78
+
79
+ describe '#alert_preferences' do
80
+ it { expect(client.alert_preferences).to be_an_instance_of(FinApps::REST::AlertPreferences) }
81
+ end
82
+
83
+ describe '#alert_settings' do
84
+ it { expect(client.alert_settings).to be_an_instance_of(FinApps::REST::AlertSettings) }
85
+ end
86
+
87
+ describe '#rule_sets' do
88
+ it { expect(client.rule_sets).to be_an_instance_of(FinApps::REST::Relevance::Rulesets) }
78
89
  end
79
90
 
80
91
  describe '#connection' do
81
- it 'looks like Faraday connection' do
82
- expect(@client.connection).to respond_to(:run_request)
92
+ it { expect(client.connection).to be_an_instance_of(Faraday::Connection) }
93
+ end
94
+
95
+ [:connection, :users, :institutions, :user_institutions, :transactions,
96
+ :categories, :budget_models, :budget_calculation, :budgets, :cashflows, :alert,
97
+ :alert_definition, :alert_preferences, :alert_settings, :rule_sets].each do |method|
98
+ it "memoizes the result of #{method}" do
99
+ first, second = client.send(method), client.send(method)
100
+ expect(first.object_id).to eq(second.object_id)
83
101
  end
84
- it 'memoizes the connection' do
85
- c1, c2 = @client.connection, @client.connection
86
- expect(c1.object_id).to eq(c2.object_id)
102
+ end
103
+
104
+ describe '#send_request' do
105
+
106
+ context 'when path is NOT provided' do
107
+ it { expect { client.send_request(nil, :post) }.to raise_error(FinApps::REST::MissingArgumentsError) }
87
108
  end
109
+
110
+ context 'when method is NOT provided' do
111
+ it { expect { client.send_request(:path, nil) }.to raise_error(FinApps::REST::MissingArgumentsError) }
112
+ end
113
+
114
+ context 'when method is NOT supported' do
115
+ it { expect { client.send_request(:path, :unsupported_method) }.to raise_error(FinApps::REST::InvalidArgumentsError) }
116
+ end
117
+
88
118
  end
89
119
 
90
120
  end
91
- end
121
+
122
+ end
123
+