yodlee_wrap 0.0.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.
@@ -0,0 +1,534 @@
1
+ require "yodleeicious"
2
+
3
+ describe 'the yodlee api client integration tests', integration: true do
4
+ let(:config) {
5
+ {
6
+ base_url: ENV['YODLEE_BASE_URL'],
7
+ cobranded_username: ENV['YODLEE_COBRANDED_USERNAME'],
8
+ cobranded_password: ENV['YODLEE_COBRANDED_PASSWORD'],
9
+ proxy_url: ENV['YODLEEICIOUS_PROXY_URL']
10
+ }
11
+ }
12
+
13
+ let(:api) { Yodleeicious::YodleeApi.new(config) }
14
+
15
+ let(:registered_user) {
16
+ {
17
+ email: 'testuser_with_transactions@liftforward.com',
18
+ password: 'testpassword143'
19
+ }
20
+ }
21
+
22
+ describe 'the yodlee apis cobranded login endpoint' do
23
+ context 'Given valid cobranded credentials and base_url' do
24
+ context 'When /authenticate/coblogin is called the return' do
25
+ subject { api.cobranded_login }
26
+
27
+ it { is_expected.to be_kind_of(Yodleeicious::Response) }
28
+ it { is_expected.to be_success }
29
+
30
+ it 'contains valid json response' do
31
+ expect(subject.body['cobrandConversationCredentials']).not_to be_nil
32
+ expect(subject.body['cobrandConversationCredentials']['sessionToken']).not_to be_nil
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ describe 'the yodlee apis user login endpoint' do
39
+ context 'Given valid cobranded credentials and base_url' do
40
+ context 'Given a new user who does not exist within the cobranded account' do
41
+ describe 'When /authenticate/coblogin is called the return' do
42
+ subject {
43
+ api.cobranded_login
44
+ api.user_login 'testuser', 'testpassword'
45
+ }
46
+
47
+ it { is_expected.to be_kind_of(Yodleeicious::Response) }
48
+ it { is_expected.to be_fail }
49
+
50
+ it 'returns an error response' do
51
+ expect(subject.body).to eq({"Error"=>[{"errorDetail"=>"Invalid User Credentials"}]})
52
+ end
53
+ end
54
+ end
55
+
56
+ context 'Given a user who does exist within the cobranded account' do
57
+ describe 'When /authenticate/coblogin is called the return' do
58
+ subject {
59
+ api.cobranded_login
60
+ api.user_login 'testuser', 'testpassword'
61
+ }
62
+
63
+ it { is_expected.to be_kind_of(Yodleeicious::Response) }
64
+ it { is_expected.to be_fail }
65
+
66
+ it 'returns an error response' do
67
+ expect(subject.body).to eq({"Error"=>[{"errorDetail"=>"Invalid User Credentials"}]})
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ describe 'the yodlee apis register user endpoint' do
75
+ context 'Given a valid cobranded credentials and base_url' do
76
+ context 'Given a new user who does not exist within the cobranded account' do
77
+ context 'When /jsonsdk/UserRegistration/register3 endpoint is called the response' do
78
+ subject {
79
+ api.cobranded_login
80
+ api.register_user "testuser#{rand(100...200)}", 'testpassword143', 'test@test.com'
81
+ }
82
+
83
+ after {
84
+ api.unregister_user
85
+ }
86
+
87
+ it 'is expected to offer a valid response' do
88
+ is_expected.to be_kind_of(Yodleeicious::Response)
89
+ is_expected.to be_success
90
+ expect(subject.body['errorOccurred']).to be_nil
91
+ expect(subject.body['userContext']['conversationCredentials']['sessionToken']).to be_kind_of(String)
92
+ expect(subject.body['userContext']['conversationCredentials']['sessionToken'].length).to be > 0
93
+ expect(api.user_session_token).not_to be_nil
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ describe '#unregister_user' do
101
+ context 'Given a valid cobranded credentials and base_url' do
102
+ context 'Given a user who it logged into the api' do
103
+ context 'When #unregister_user is called the response' do
104
+ subject {
105
+ api.cobranded_login
106
+ api.login_or_register_user "testuser#{rand(100...200)}", 'testpassword143', 'test@test.com'
107
+ expect(api.user_session_token).not_to be_nil
108
+ api.unregister_user
109
+ }
110
+
111
+
112
+ it 'is expected to offer a valid response' do
113
+ is_expected.to be_kind_of(Yodleeicious::Response)
114
+ is_expected.to be_success
115
+ expect(api.user_session_token).to be_nil
116
+ end
117
+
118
+ after { api.unregister_user }
119
+
120
+ end
121
+ end
122
+ end
123
+ end
124
+
125
+ describe 'the yodleeicious login_or_register_user method' do
126
+ before { api.cobranded_login }
127
+
128
+ context 'Given a new user with valid credentials' do
129
+ after { api.unregister_user }
130
+ let (:email) { "testuser#{rand(100...200)}@test.com" }
131
+ let (:password) { "password#{rand(100...200)}" }
132
+
133
+ context 'When login_or_register_user is called' do
134
+ subject { api.login_or_register_user email, password, email }
135
+
136
+ it 'should register the new user and set the user_session_token' do
137
+ expect(subject).to be_success
138
+ expect(subject).to be_kind_of(Yodleeicious::Response)
139
+ expect(api.user_session_token).not_to be_nil
140
+ end
141
+ end
142
+ end
143
+
144
+ context 'Given an existing user with valid credentials' do
145
+ before { api.register_user registered_user[:email], registered_user[:password], registered_user[:email] }
146
+
147
+ context 'When login_or_register_user is called' do
148
+ subject { api.login_or_register_user registered_user[:email], registered_user[:password], registered_user[:email] }
149
+
150
+ it 'should login the user and not register them' do
151
+ expect(subject).to be_success
152
+ expect(subject).to be_kind_of(Yodleeicious::Response)
153
+ expect(api.user_session_token).not_to be_nil
154
+ end
155
+ end
156
+ end
157
+ end
158
+
159
+ describe '#get_site_info' do
160
+ context 'Given a valid cobranded credentials and base_url' do
161
+ before {
162
+ api.cobranded_login
163
+ }
164
+
165
+ context 'When a request for site info is performed the result' do
166
+ subject { api.get_site_info 16441 }
167
+
168
+ it 'is expected to contain login form details' do
169
+ is_expected.not_to be_nil
170
+ is_expected.to be_kind_of(Yodleeicious::Response)
171
+ expect(subject.body['errorOccurred']).to be_nil
172
+ expect(subject.body['loginForms']).not_to be_nil
173
+ expect(subject.body['loginForms']).to be_kind_of(Array)
174
+ expect(subject.body['loginForms'].length).to be > 0
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+
181
+ describe '#get_content_service_info_by_routing_number' do
182
+ context 'Given a valid cobranded credentials and base_url' do
183
+ before { api.cobranded_login }
184
+
185
+ context 'When #get_content_service_info_by_routing_number is called with a valid routing number the result' do
186
+ subject { api.get_content_service_info_by_routing_number 999988181 }
187
+
188
+ it 'is expected to contain valid content services info' do
189
+ is_expected.not_to be_nil
190
+ is_expected.to be_kind_of(Yodleeicious::Response)
191
+ is_expected.to be_success
192
+ expect(subject.body['errorOccurred']).to be_nil
193
+ expect(subject.body['siteId']).to eq(16441)
194
+ expect(subject.body['contentServiceDisplayName']).to eq('Dag Site (US) - Bank')
195
+ end
196
+ end
197
+
198
+ context 'When #get_content_service_info_by_routing_number is called with an invalid routing number' do
199
+ subject { api.get_content_service_info_by_routing_number -23423 }
200
+
201
+ it 'is expected to contain valid error details' do
202
+ is_expected.not_to be_nil
203
+ is_expected.to be_kind_of(Yodleeicious::Response)
204
+ is_expected.to be_fail
205
+ expect(subject.body['errorOccurred']).to be_truthy
206
+ expect(subject.body['exceptionType']).to eq('com.yodlee.core.routingnumberservice.InvalidRoutingNumberException')
207
+ end
208
+ end
209
+ end
210
+ end
211
+
212
+ describe '#get_mfa_response_for_site' do
213
+ context 'Given a valid cobranded credentials and base_url' do
214
+ context 'Given a user who it logged into the api' do
215
+ context 'When #get_mfa_response_for_site is called the response' do
216
+ subject {
217
+ api.cobranded_login
218
+ response = api.login_or_register_user "testuser#{rand(100...200)}", 'testpassword143', 'test@test.com'
219
+ expect(response).to be_success
220
+
221
+ response = api.get_site_login_form(16445)
222
+ expect(response).to be_success
223
+
224
+ login_form = response.body
225
+ login_form['componentList'][0]['fieldValue'] = 'yodlicious1.site16445.1'
226
+ login_form['componentList'][1]['fieldValue'] = 'site16445.1'
227
+
228
+ response = api.add_site_account_and_wait(16445, login_form)
229
+ expect(response).to be_success
230
+
231
+ expect(response.body['siteRefreshInfo']['siteRefreshMode']['refreshMode']).to eq('MFA')
232
+ api.get_mfa_response_for_site response.body['siteAccountId']
233
+ }
234
+
235
+ it 'is expected be a valid response' do
236
+ is_expected.to be_kind_of(Yodleeicious::Response)
237
+ is_expected.to be_success
238
+ expect(subject.body['isMessageAvailable']).not_to be_nil
239
+ end
240
+
241
+ after { api.unregister_user }
242
+ end
243
+ end
244
+ end
245
+ end
246
+
247
+ describe '#get_mfa_response_for_site_and_wait' do
248
+ context 'Given a valid cobranded credentials and base_url' do
249
+ context 'Given a user who it logged into the api' do
250
+ context 'When #get_mfa_response_for_site_and_wait is called the response' do
251
+ subject {
252
+ api.cobranded_login
253
+ response = api.login_or_register_user "testuser#{rand(100...200)}", 'testpassword143', 'test@test.com'
254
+ expect(response).to be_success
255
+
256
+ response = api.get_site_login_form(16445)
257
+ expect(response).to be_success
258
+
259
+ login_form = response.body
260
+ login_form['componentList'][0]['fieldValue'] = 'yodlicious1.site16445.1'
261
+ login_form['componentList'][1]['fieldValue'] = 'site16445.1'
262
+
263
+ response = api.add_site_account(16445, login_form)
264
+ expect(response).to be_success
265
+
266
+ expect(response.body['siteRefreshInfo']['siteRefreshMode']['refreshMode']).to eq('MFA')
267
+ api.get_mfa_response_for_site_and_wait response.body['siteAccountId'], 2
268
+ }
269
+
270
+ it 'is expected be a valid response' do
271
+ is_expected.to be_kind_of(Yodleeicious::Response)
272
+ is_expected.to be_success
273
+ expect(subject.body['isMessageAvailable']).to be_truthy
274
+ expect(subject.body['fieldInfo']).not_to be_nil
275
+ end
276
+
277
+ after { api.unregister_user }
278
+ end
279
+ end
280
+ end
281
+ end
282
+
283
+ describe '#put_mfa_request_for_site' do
284
+ context 'Given a valid cobranded credentials and base_url' do
285
+ context 'Given a user who is logged into the api' do
286
+ context 'Given a user attempting to add a site with Token Based MFA' do
287
+ context 'When #put_mfa_request_for_site is called the response' do
288
+ subject {
289
+ api.cobranded_login
290
+ response = api.login_or_register_user "testuser#{rand(100...200)}", 'testpassword143', 'test@test.com'
291
+
292
+ response = api.get_site_login_form(16445)
293
+ expect(response).to be_success
294
+
295
+ login_form = response.body
296
+
297
+ login_form['componentList'][0]['fieldValue'] = 'yodlicious1.site16445.1'
298
+ login_form['componentList'][1]['fieldValue'] = 'site16445.1'
299
+
300
+ response = api.add_site_account(16445, login_form)
301
+ expect(response).to be_success
302
+
303
+ expect(response.body['siteRefreshInfo']['siteRefreshMode']['refreshMode']).to eq('MFA')
304
+ site_account_id = response.body['siteAccountId']
305
+ response = api.get_mfa_response_for_site_and_wait site_account_id, 2
306
+ expect(response.body['isMessageAvailable']).to be_truthy
307
+
308
+ field_info = response.body['fieldInfo']
309
+ field_info['fieldValue'] = "monkeys"
310
+ api.put_mfa_request_for_site site_account_id, :MFATokenResponse, field_info
311
+ }
312
+
313
+ it 'is expected be a valid response' do
314
+ is_expected.to be_kind_of(Yodleeicious::Response)
315
+ is_expected.to be_success
316
+ expect(subject.body['primitiveObj']).to be_truthy
317
+ end
318
+
319
+ after { api.unregister_user }
320
+ end
321
+ end
322
+
323
+ context 'Given a user attempting to add a site with Security Question and Answer MFA' do
324
+ context 'When #put_mfa_request_for_site is called the response' do
325
+ subject {
326
+ api.cobranded_login
327
+ response = api.login_or_register_user "testuser#{rand(100...200)}", 'testpassword143', 'test@test.com'
328
+
329
+ response = api.get_site_login_form(16486)
330
+ expect(response).to be_success
331
+
332
+ login_form = response.body
333
+ login_form['componentList'][0]['fieldValue'] = 'yodlicious1.site16486.1'
334
+ login_form['componentList'][1]['fieldValue'] = 'site16486.1'
335
+
336
+ response = api.add_site_account(16486, login_form)
337
+ expect(response).to be_success
338
+
339
+ expect(response.body['siteRefreshInfo']['siteRefreshMode']['refreshMode']).to eq('MFA')
340
+ site_account_id = response.body['siteAccountId']
341
+ response = api.get_mfa_response_for_site_and_wait site_account_id, 2
342
+ expect(response.body['isMessageAvailable']).to be_truthy
343
+
344
+ field_info = response.body['fieldInfo']
345
+ field_info['questionAndAnswerValues'][0]['fieldValue'] = 'Texas'
346
+ field_info['questionAndAnswerValues'][1]['fieldValue'] = 'w3schools'
347
+ api.put_mfa_request_for_site site_account_id, :MFAQuesAnsResponse, field_info
348
+ }
349
+
350
+ it 'is expected be a valid response' do
351
+ is_expected.to be_kind_of(Yodleeicious::Response)
352
+ is_expected.to be_success
353
+ expect(subject.body['primitiveObj']).to be_truthy
354
+ end
355
+
356
+ after { api.unregister_user }
357
+ end
358
+ end
359
+
360
+ context 'Given a user attempting to add a site with Captcha MFA' do
361
+ context 'When #put_mfa_request_for_site is called the response' do
362
+ subject {
363
+ api.cobranded_login
364
+ response = api.login_or_register_user "testuser#{rand(100...200)}", 'testpassword143', 'test@test.com'
365
+ expect(response).to be_success
366
+
367
+ response = api.get_site_login_form(18769)
368
+ expect(response).to be_success
369
+
370
+ login_form = response.body
371
+ login_form['componentList'][0]['fieldValue'] = 'yodlicious1.site18769.1'
372
+ login_form['componentList'][1]['fieldValue'] = 'site18769.1'
373
+
374
+ response = api.add_site_account(18769, login_form)
375
+ expect(response).to be_success
376
+
377
+ expect(response.body['siteRefreshInfo']['siteRefreshMode']['refreshMode']).to eq('MFA')
378
+ site_account_id = response.body['siteAccountId']
379
+ response = api.get_mfa_response_for_site_and_wait site_account_id, 2
380
+ expect(response.body['isMessageAvailable']).to be_truthy
381
+
382
+ field_info = response.body['fieldInfo']
383
+ field_info['fieldValue'] = "monkeys"
384
+ api.put_mfa_request_for_site site_account_id, :MFAImageResponse, field_info
385
+ }
386
+
387
+ it 'is expected be a valid response' do
388
+ is_expected.to be_kind_of(Yodleeicious::Response)
389
+ is_expected.to be_success
390
+ expect(subject.body['primitiveObj']).to be_truthy
391
+ end
392
+
393
+ after { api.unregister_user }
394
+ end
395
+ end
396
+ end
397
+ end
398
+ end
399
+
400
+ describe 'the yodlee apis fetching summary data about registered site accounts endpoints' do
401
+ context 'Given a registered user with registered accounts' do
402
+ before {
403
+ api.cobranded_login
404
+ api.user_login "testuser_with_transactions@liftforward.com", 'testpassword143'
405
+ # api.register_user "testuser#{rand(100..999)}", 'testpassword143', 'test@test.com'
406
+ # dag_login_form[:componentList][0][:value] = 'yodlicious.site16441.1'
407
+ # dag_login_form[:componentList][1][:value] = 'site16441.1'
408
+ # api.add_site_account_and_wait(16441, dag_login_form)
409
+ }
410
+
411
+ context 'when getAllSiteAccounts is called the return' do
412
+ subject { api.get_all_site_accounts }
413
+
414
+ it 'is expected to return an array containing 1 siteAccount' do
415
+ # puts JSON.pretty_generate(subject)
416
+ is_expected.to be_success
417
+ expect(subject.body).to be_kind_of(Array)
418
+ expect(subject.body.length).to be > 0
419
+ expect(subject.body[0]['siteAccountId']).not_to be_nil
420
+ expect(subject.body[0]['siteRefreshInfo']['siteRefreshStatus']['siteRefreshStatus']).to eq('REFRESH_COMPLETED')
421
+
422
+ end
423
+ end
424
+
425
+ context 'when getItemSummariesForSite is called the return' do
426
+ subject {
427
+ site_accounts = api.get_all_site_accounts
428
+ # puts site_accounts[0]['siteAccountId']
429
+ # puts JSON.pretty_generate(site_accounts)
430
+ api.get_item_summaries_for_site(site_accounts.body[0]['siteAccountId'])
431
+ }
432
+
433
+ it 'is expected to return an array site summaries' do
434
+ # puts JSON.pretty_generate(subject)
435
+
436
+ is_expected.to be_kind_of(Yodleeicious::Response)
437
+ is_expected.to be_success
438
+ expect(subject.body[0]['itemId']).not_to be_nil
439
+ end
440
+ end
441
+
442
+ context 'when getItemSummaries is called the return' do
443
+ subject { api.get_item_summaries }
444
+
445
+ it 'is expected to return an array of site summaries' do
446
+ # puts JSON.pretty_generate(subject)
447
+
448
+ is_expected.to be_kind_of(Yodleeicious::Response)
449
+ is_expected.to be_success
450
+ expect(subject.body.length).to be > 0
451
+ expect(subject.body[0]['itemId']).not_to be_nil
452
+ end
453
+ end
454
+ end
455
+ end
456
+
457
+ describe 'the yodlee apis fetching user/s transactions' do
458
+ context 'Given a registered user with registered accounts' do
459
+ before {
460
+ api.cobranded_login
461
+ api.login_or_register_user 'testuser_with_transactions@liftforward.com', 'testpassword143', 'testuser_with_transactions@liftforward.com'
462
+ dag_login_form['componentList'][0]['fieldValue'] = 'yodlicious.site16441.1'
463
+ dag_login_form['componentList'][1]['fieldValue'] = 'site16441.1'
464
+ api.add_site_account(16441, dag_login_form)
465
+ }
466
+
467
+ context 'When a transaction search for all transactions is performed the result' do
468
+ subject { api.execute_user_search_request }
469
+
470
+ it 'is expected to return a valid search result' do
471
+ # puts JSON.pretty_generate(subject.body)
472
+
473
+ is_expected.not_to be_nil
474
+ is_expected.to be_kind_of(Yodleeicious::Response)
475
+ is_expected.to be_success
476
+ expect(subject.body['errorOccurred']).to be_nil
477
+ expect(subject.body['searchIdentifier']).not_to be_nil
478
+ expect(subject.body['searchResult']['transactions']).to be_kind_of(Array)
479
+ expect(subject.body['searchResult']['transactions'].length).to be > 0
480
+ end
481
+ end
482
+ end
483
+ end
484
+
485
+ pending 'downloading transaction history'
486
+ pending 'fetching a list of content services'
487
+ pending 'failing to create a new session'
488
+ pending 'failing when running a search for a site'
489
+
490
+ let(:dag_login_form) {
491
+ JSON.parse('{
492
+ "conjunctionOp": {
493
+ "conjuctionOp": 1
494
+ },
495
+ "componentList": [
496
+ {
497
+ "valueIdentifier": "LOGIN1",
498
+ "valueMask": "LOGIN_FIELD",
499
+ "fieldType": {
500
+ "typeName": "IF_LOGIN"
501
+ },
502
+ "size": 20,
503
+ "maxlength": 40,
504
+ "name": "LOGIN1",
505
+ "displayName": "Catalog",
506
+ "isEditable": true,
507
+ "isOptional": false,
508
+ "isEscaped": false,
509
+ "helpText": "150862",
510
+ "isOptionalMFA": false,
511
+ "isMFA": false
512
+ },
513
+ {
514
+ "valueIdentifier": "PASSWORD1",
515
+ "valueMask": "LOGIN_FIELD",
516
+ "fieldType": {
517
+ "typeName": "IF_PASSWORD"
518
+ },
519
+ "size": 20,
520
+ "maxlength": 40,
521
+ "name": "PASSWORD1",
522
+ "displayName": "Password",
523
+ "isEditable": true,
524
+ "isOptional": false,
525
+ "isEscaped": false,
526
+ "helpText": "150863",
527
+ "isOptionalMFA": false,
528
+ "isMFA": false
529
+ }
530
+ ],
531
+ "defaultHelpText": "16103"
532
+ }')
533
+ }
534
+ end
@@ -0,0 +1,22 @@
1
+ if ENV['CODECLIMATE_REPO_TOKEN']
2
+ require 'codeclimate-test-reporter'
3
+ CodeClimate::TestReporter.start
4
+ end
5
+
6
+ unless defined?(SPEC_HELPER_LOADED)
7
+ SPEC_HELPER_LOADED = true
8
+
9
+ require "yodleeicious"
10
+ require 'dotenv'
11
+ Dotenv.load
12
+
13
+ Yodleeicious::Config.logger = Logger.new("log/test.log")
14
+ Yodleeicious::Config.logger.level = Logger::DEBUG
15
+
16
+ RSpec.configure do |config|
17
+
18
+ config.filter_run :focus
19
+ config.run_all_when_everything_filtered = true
20
+
21
+ end
22
+ end
@@ -0,0 +1,65 @@
1
+ require "spec_helper"
2
+ require "yodleeicious/config"
3
+
4
+ describe Yodleeicious::Config do
5
+ describe "#base_url" do
6
+ it "default value is nil" do
7
+ Yodleeicious::Config.base_url = nil
8
+ end
9
+ end
10
+
11
+ describe "#cobranded_username" do
12
+ it "default value is nil" do
13
+ Yodleeicious::Config.cobranded_username = nil
14
+ end
15
+ end
16
+
17
+ describe "#cobranded_password" do
18
+ it "default value is nil" do
19
+ Yodleeicious::Config.cobranded_password = nil
20
+ end
21
+ end
22
+
23
+ describe "#proxy_url" do
24
+ it "default value is nil" do
25
+ Yodleeicious::Config.proxy_url = nil
26
+ end
27
+ end
28
+
29
+ describe "#base_url=" do
30
+ it "can set value" do
31
+ Yodleeicious::Config.base_url = 'http://someurl'
32
+ expect(Yodleeicious::Config.base_url).to eq('http://someurl')
33
+ end
34
+ end
35
+
36
+ describe "#cobranded_username=" do
37
+ it "can set value" do
38
+ Yodleeicious::Config.cobranded_username = 'some username'
39
+ expect(Yodleeicious::Config.cobranded_username).to eq('some username')
40
+ end
41
+ end
42
+
43
+ describe "#cobranded_password=" do
44
+ it "can set value" do
45
+ Yodleeicious::Config.cobranded_password = 'some password'
46
+ expect(Yodleeicious::Config.cobranded_password).to eq('some password')
47
+ end
48
+ end
49
+
50
+ describe "#proxy_url=" do
51
+ it "can set value" do
52
+ Yodleeicious::Config.proxy_url = 'http://someurl'
53
+ expect(Yodleeicious::Config.proxy_url).to eq('http://someurl')
54
+ end
55
+ end
56
+
57
+ describe "#logger="do
58
+ let(:logger) { Logger.new(STDOUT) }
59
+ it "can set value" do
60
+ Yodleeicious::Config.logger = logger
61
+ expect(Yodleeicious::Config.logger).to eq(logger)
62
+ end
63
+ end
64
+
65
+ end