finicity 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +69 -0
  7. data/Rakefile +10 -0
  8. data/finicity.gemspec +31 -0
  9. data/lib/finicity.rb +42 -0
  10. data/lib/finicity/client.rb +350 -0
  11. data/lib/finicity/configuration.rb +13 -0
  12. data/lib/finicity/errors.rb +62 -0
  13. data/lib/finicity/logger.rb +19 -0
  14. data/lib/finicity/railtie.rb +22 -0
  15. data/lib/finicity/v1.rb +29 -0
  16. data/lib/finicity/v1/request/activate_accounts.rb +73 -0
  17. data/lib/finicity/v1/request/activate_accounts_with_mfa.rb +88 -0
  18. data/lib/finicity/v1/request/add_customer.rb +54 -0
  19. data/lib/finicity/v1/request/delete_customer.rb +45 -0
  20. data/lib/finicity/v1/request/discover_accounts.rb +71 -0
  21. data/lib/finicity/v1/request/discover_accounts_with_mfa.rb +87 -0
  22. data/lib/finicity/v1/request/get_accounts.rb +50 -0
  23. data/lib/finicity/v1/request/get_customers.rb +43 -0
  24. data/lib/finicity/v1/request/get_customers_by_username.rb +52 -0
  25. data/lib/finicity/v1/request/get_institution.rb +45 -0
  26. data/lib/finicity/v1/request/get_institutions.rb +45 -0
  27. data/lib/finicity/v1/request/get_login_form.rb +47 -0
  28. data/lib/finicity/v1/request/get_transactions.rb +60 -0
  29. data/lib/finicity/v1/request/interactive_refresh_account.rb +51 -0
  30. data/lib/finicity/v1/request/interactive_refresh_account_with_mfa.rb +74 -0
  31. data/lib/finicity/v1/request/refresh_accounts.rb +47 -0
  32. data/lib/finicity/v1/response/accounts.rb +75 -0
  33. data/lib/finicity/v1/response/customers.rb +36 -0
  34. data/lib/finicity/v1/response/error.rb +13 -0
  35. data/lib/finicity/v1/response/institutions.rb +38 -0
  36. data/lib/finicity/v1/response/login_form.rb +29 -0
  37. data/lib/finicity/v1/response/mfa.rb +22 -0
  38. data/lib/finicity/v1/response/transactions.rb +28 -0
  39. data/lib/finicity/v2.rb +7 -0
  40. data/lib/finicity/v2/request/partner_authentication.rb +39 -0
  41. data/lib/finicity/v2/response/partner_authentication.rb +12 -0
  42. data/lib/finicity/version.rb +3 -0
  43. data/spec/finicity/client_spec.rb +527 -0
  44. data/spec/finicity/v1/request/activate_accounts_spec.rb +49 -0
  45. data/spec/finicity/v1/request/activate_accounts_with_mfa_spec.rb +64 -0
  46. data/spec/finicity/v1/request/add_customer_spec.rb +37 -0
  47. data/spec/finicity/v1/request/delete_customer_spec.rb +18 -0
  48. data/spec/finicity/v1/request/discover_accounts_spec.rb +42 -0
  49. data/spec/finicity/v1/request/discover_accounts_with_mfa_spec.rb +59 -0
  50. data/spec/finicity/v1/request/get_accounts_spec.rb +18 -0
  51. data/spec/finicity/v1/request/get_customers_by_username_spec.rb +18 -0
  52. data/spec/finicity/v1/request/get_customers_spec.rb +18 -0
  53. data/spec/finicity/v1/request/get_institution_spec.rb +18 -0
  54. data/spec/finicity/v1/request/get_institutions_spec.rb +18 -0
  55. data/spec/finicity/v1/request/get_login_form_spec.rb +18 -0
  56. data/spec/finicity/v1/request/get_transactions_spec.rb +19 -0
  57. data/spec/finicity/v1/request/interactive_refresh_account_spec.rb +19 -0
  58. data/spec/finicity/v1/request/interactive_refresh_account_with_mfa_spec.rb +38 -0
  59. data/spec/finicity/v1/request/refresh_accounts_spec.rb +18 -0
  60. data/spec/finicity/v1/response/accounts_spec.rb +39 -0
  61. data/spec/finicity/v1/response/customers_spec.rb +19 -0
  62. data/spec/finicity/v1/response/error_spec.rb +19 -0
  63. data/spec/finicity/v1/response/institutions_spec.rb +19 -0
  64. data/spec/finicity/v1/response/login_form_spec.rb +31 -0
  65. data/spec/finicity/v1/response/mfa_spec.rb +23 -0
  66. data/spec/finicity/v1/response/transactions_spec.rb +47 -0
  67. data/spec/finicity/v2/request/partner_authentication_spec.rb +21 -0
  68. data/spec/finicity/v2/response/partner_authentication_spec.rb +15 -0
  69. data/spec/spec_helper.rb +36 -0
  70. metadata +265 -0
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::ActivateAccounts do
4
+ let(:account) {
5
+ instance_double(
6
+ ::Finicity::V1::Response::Account,
7
+ :id => 1,
8
+ :number => 1234,
9
+ :name => 'Account 1',
10
+ :type => 'checking'
11
+ )
12
+ }
13
+ let(:accounts) { [account] }
14
+
15
+ subject { described_class.new("token-123", 1, 2, accounts) }
16
+
17
+ describe "#headers" do
18
+ it "has correct headers" do
19
+ subject.headers.should have_key('Finicity-App-Key')
20
+ subject.headers.should have_key('Finicity-App-Token')
21
+ subject.headers.should have_key('Content-Type')
22
+ end
23
+ end
24
+
25
+ describe "#body" do
26
+
27
+ it "forms the correct id" do
28
+ subject.body.should include("<id>1</id>")
29
+ end
30
+
31
+ it "forms the correct number" do
32
+ subject.body.should include("<number>1234</number>")
33
+ end
34
+
35
+ it "forms the correct name" do
36
+ subject.body.should include("<name>Account 1</name>")
37
+ end
38
+
39
+ it "forms the correct type" do
40
+ subject.body.should include("<type>checking</type>")
41
+ end
42
+ end
43
+
44
+ describe "#url" do
45
+ it "has a correct url" do
46
+ subject.url.to_s.should include('customers/1/institutions/2/accounts')
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::ActivateAccountsWithMfa do
4
+ let(:account) {
5
+ instance_double(
6
+ ::Finicity::V1::Response::Account,
7
+ :id => 1,
8
+ :number => 1234,
9
+ :name => 'Account 1',
10
+ :type => 'checking'
11
+ )
12
+ }
13
+ let(:accounts) { [account] }
14
+ let(:mfa_credential) {
15
+ {
16
+ :text => 'What is your birthday?',
17
+ :answer => '1985-01-01'
18
+ }
19
+ }
20
+ let(:mfa_credentials) { [mfa_credential] }
21
+
22
+ subject { described_class.new("token-123", "mfa_session-123", 1, 2, accounts, mfa_credentials) }
23
+
24
+ describe "#headers" do
25
+ it "has correct headers" do
26
+ subject.headers.should have_key('Finicity-App-Key')
27
+ subject.headers.should have_key('Finicity-App-Token')
28
+ subject.headers.should have_key('Content-Type')
29
+ subject.headers.should have_key('MFA-Session')
30
+ end
31
+ end
32
+
33
+ describe "#body" do
34
+ it "forms the correct id" do
35
+ subject.body.should include("<id>1</id>")
36
+ end
37
+
38
+ it "forms the correct number" do
39
+ subject.body.should include("<number>1234</number>")
40
+ end
41
+
42
+ it "forms the correct name" do
43
+ subject.body.should include("<name>Account 1</name>")
44
+ end
45
+
46
+ it "forms the correct type" do
47
+ subject.body.should include("<type>checking</type>")
48
+ end
49
+
50
+ it "forms the mfa text" do
51
+ subject.body.should include("<text>What is your birthday?</text>")
52
+ end
53
+
54
+ it "forms the mfa answer" do
55
+ subject.body.should include("<answer>1985-01-01</answer>")
56
+ end
57
+ end
58
+
59
+ describe "#url" do
60
+ it "has a correct url" do
61
+ subject.url.to_s.should include('customers/1/institutions/2/accounts/mfa')
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::AddCustomer do
4
+ subject { described_class.new("token-123", "USR-123") }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ subject.headers.should have_key('Content-Type')
11
+ end
12
+ end
13
+
14
+ describe "#body" do
15
+ it "includes username" do
16
+ subject.body.should include('<username>USR-123</username>')
17
+ end
18
+
19
+ it "includes email" do
20
+ subject.body.should include('<email>USR-123@mx.com</email>')
21
+ end
22
+
23
+ it "includes firstName" do
24
+ subject.body.should include('<firstName>USR-123</firstName>')
25
+ end
26
+
27
+ it "includes lastName" do
28
+ subject.body.should include('<lastName>USR-123</lastName>')
29
+ end
30
+ end
31
+
32
+ describe "#url" do
33
+ it "has a correct url" do
34
+ subject.url.to_s.should include('customers')
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::DeleteCustomer do
4
+ subject { described_class.new("token-123", 1) }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ end
11
+ end
12
+
13
+ describe "#url" do
14
+ it "has a correct url" do
15
+ subject.url.to_s.should include('customers/1')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::DiscoverAccounts do
4
+ let(:login_credential) {
5
+ {
6
+ :id => '1',
7
+ :name => 'username',
8
+ :value => 'test_user'
9
+ }
10
+ }
11
+ let(:login_credentials) { [login_credential] }
12
+
13
+ subject { described_class.new("token-123", 1, 2, login_credentials) }
14
+
15
+ describe "#headers" do
16
+ it "has correct headers" do
17
+ subject.headers.should have_key('Finicity-App-Key')
18
+ subject.headers.should have_key('Finicity-App-Token')
19
+ subject.headers.should have_key('Content-Type')
20
+ end
21
+ end
22
+
23
+ describe "#body" do
24
+ it "forms the correct id" do
25
+ subject.body.should include("<id>1</id>")
26
+ end
27
+
28
+ it "forms the correct name" do
29
+ subject.body.should include("<name>username</name>")
30
+ end
31
+
32
+ it "forms the correct vale" do
33
+ subject.body.should include("<value>test_user</value>")
34
+ end
35
+ end
36
+
37
+ describe "#url" do
38
+ it "has a correct url" do
39
+ subject.url.to_s.should include('customers/1/institutions/2/accounts')
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::DiscoverAccountsWithMfa do
4
+ let(:login_credential) {
5
+ {
6
+ :id => '1',
7
+ :name => 'username',
8
+ :value => 'test_user'
9
+ }
10
+ }
11
+ let(:mfa_credential) {
12
+ {
13
+ :text => 'What is your birthday?',
14
+ :answer => '1985-01-01'
15
+ }
16
+ }
17
+ let(:login_credentials) { [login_credential] }
18
+ let(:mfa_credentials) { [mfa_credential] }
19
+
20
+ subject { described_class.new("token-123", "mfa_session-123", 1, 2, login_credentials, mfa_credentials) }
21
+
22
+ describe "#headers" do
23
+ it "has correct headers" do
24
+ subject.headers.should have_key('Finicity-App-Key')
25
+ subject.headers.should have_key('Finicity-App-Token')
26
+ subject.headers.should have_key('Content-Type')
27
+ subject.headers.should have_key('MFA-Session')
28
+ end
29
+ end
30
+
31
+ describe "#body" do
32
+
33
+ it "forms the correct id" do
34
+ subject.body.should include("<id>1</id>")
35
+ end
36
+
37
+ it "forms the correct name" do
38
+ subject.body.should include("<name>username</name>")
39
+ end
40
+
41
+ it "forms the correct value" do
42
+ subject.body.should include("<value>test_user</value>")
43
+ end
44
+
45
+ it "forms the mfa question" do
46
+ subject.body.should include("<text>What is your birthday?</text>")
47
+ end
48
+
49
+ it "forms the mfa answer" do
50
+ subject.body.should include("<answer>1985-01-01</answer>")
51
+ end
52
+ end
53
+
54
+ describe "#url" do
55
+ it "has a correct url" do
56
+ subject.url.to_s.should include('customers/1/institutions/2/accounts/mfa')
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::GetAccounts do
4
+ subject { described_class.new("token-123", 1, 2) }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ end
11
+ end
12
+
13
+ describe "#url" do
14
+ it "has a correct url" do
15
+ subject.url.to_s.should include('customers/1/institutions/2/accounts')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::GetCustomersByUsername do
4
+ subject { described_class.new("token-123", "USR-123", 1, 25) }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ end
11
+ end
12
+
13
+ describe "#url" do
14
+ it "has a correct url" do
15
+ subject.url.to_s.should include('customers')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::GetCustomers do
4
+ subject { described_class.new("token-123") }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ end
11
+ end
12
+
13
+ describe "#url" do
14
+ it "has a correct url" do
15
+ subject.url.to_s.should include('customers')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::GetInstitution do
4
+ subject { described_class.new("token-123", 1) }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ end
11
+ end
12
+
13
+ describe "#url" do
14
+ it "has a correct url" do
15
+ subject.url.to_s.should include('institutions/1')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::GetInstitutions do
4
+ subject { described_class.new("token-123", "Chase") }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ end
11
+ end
12
+
13
+ describe "#url" do
14
+ it "has a correct url" do
15
+ subject.url.to_s.should include('institutions')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::GetLoginForm do
4
+ subject { described_class.new("token-123", "institution-123") }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ end
11
+ end
12
+
13
+ describe "#url" do
14
+ it "has a correct url" do
15
+ subject.url.to_s.should include('institution-123')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::GetTransactions do
4
+ subject { described_class.new("token-123", 1, 2, 100, 101) }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ subject.headers.should have_key('Content-Type')
11
+ end
12
+ end
13
+
14
+ describe "#url" do
15
+ it "has a correct url" do
16
+ subject.url.to_s.should include('customers/1/accounts/2/transactions')
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::InteractiveRefreshAccount do
4
+ subject { described_class.new("token-123", 1, 2) }
5
+
6
+ describe "#headers" do
7
+ it "has correct headers" do
8
+ subject.headers.should have_key('Finicity-App-Key')
9
+ subject.headers.should have_key('Finicity-App-Token')
10
+ subject.headers.should have_key('Content-Type')
11
+ end
12
+ end
13
+
14
+ describe "#url" do
15
+ it "has a correct url" do
16
+ subject.url.to_s.should include('customers/1/accounts/2')
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::Finicity::V1::Request::InteractiveRefreshAccountWithMfa do
4
+ let(:mfa_credential) {
5
+ {
6
+ :text => 'What is your birthday?',
7
+ :answer => '1985-01-01'
8
+ }
9
+ }
10
+ let(:mfa_credentials) { [mfa_credential] }
11
+
12
+ subject { described_class.new("token-123", "mfa_session-123", 1, 2, mfa_credentials) }
13
+
14
+ describe "#headers" do
15
+ it "has correct headers" do
16
+ subject.headers.should have_key('Finicity-App-Key')
17
+ subject.headers.should have_key('Finicity-App-Token')
18
+ subject.headers.should have_key('Content-Type')
19
+ subject.headers.should have_key('MFA-Session')
20
+ end
21
+ end
22
+
23
+ describe "#body" do
24
+ it "forms the mfa text" do
25
+ subject.body.should include("<text>What is your birthday?</text>")
26
+ end
27
+
28
+ it "forms the mfa answer" do
29
+ subject.body.should include("<answer>1985-01-01</answer>")
30
+ end
31
+ end
32
+
33
+ describe "#url" do
34
+ it "has a correct url" do
35
+ subject.url.to_s.should include('customers/1/accounts/2/mfa')
36
+ end
37
+ end
38
+ end