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.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +15 -0
- data/.rspec +4 -0
- data/Gemfile +16 -0
- data/Guardfile +16 -0
- data/LICENSE.txt +22 -0
- data/README.md +176 -0
- data/Rakefile +2 -0
- data/lib/yodlee_wrap/config.rb +14 -0
- data/lib/yodlee_wrap/parameter_translator.rb +27 -0
- data/lib/yodlee_wrap/response.rb +20 -0
- data/lib/yodlee_wrap/version.rb +3 -0
- data/lib/yodlee_wrap/yodlee_api.rb +183 -0
- data/lib/yodlee_wrap.rb +27 -0
- data/log/.gitkeep +0 -0
- data/spec/integration/integration_spec.rb +534 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/unit/yodleeicious/config_spec.rb +65 -0
- data/spec/unit/yodleeicious/parameter_translator_spec.rb +80 -0
- data/spec/unit/yodleeicious/response_spec.rb +61 -0
- data/spec/unit/yodleeicious/yodlee_api_spec.rb +341 -0
- data/todo.md +8 -0
- data/yodlee_wrap.gemspec +31 -0
- data/yodlicious.png +0 -0
- metadata +156 -0
@@ -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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|