finapps 5.3.0 → 6.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ba6fe462a4a44f6516aaec7bd31adb52ceffa7e7adabff632ec00d866e684f7
4
- data.tar.gz: 792139e441b48b337df42d97973dbf4529d01d7317eb4249c8f868aaffbb1680
3
+ metadata.gz: 287e012502599f7781e37f492a27d67c956fa2f4d94073163302f3c429da4d42
4
+ data.tar.gz: f7da81b6008ac880f6d028c3dc209945e65641f979d5c9d3d98580ab3deb7713
5
5
  SHA512:
6
- metadata.gz: 6babd0b0fd8d3a567c9f5197673f2a3b7770128c2c688053777af68e02584a456de2f653b7df3eedf66b4f811a8a23da56e38fbe7f781c04bfcb1d22a8020624
7
- data.tar.gz: 17549ec59b21bf9f5a995d25ea87df1068d7067d7f8814dd214ef7521c7b1687d2ece6e78764d0df14a19e473fb8b3f6023f1e3546003aafbaf38d4ff1c35b23
6
+ metadata.gz: f87c89de3b7915c3ecc54300cc31060b3ce39da36c860e4a539832e302e1576a560c31247925351a0eb798e32563a65f2358d265760c3078940e1f4e7c2aa88d
7
+ data.tar.gz: 6a8ac80500a6f696817efff46e1fd39a79feb6823ae4ab9693a2b588166bcf175ebcdede16d491b4410fd015d0e4519d45e81acc98e2f9f8b7adfbd85f63193f
@@ -10,38 +10,32 @@ on:
10
10
  - ".github/**"
11
11
  - ".VERSION"
12
12
  jobs:
13
- tests:
13
+ test:
14
14
  if: "!contains(github.event.head_commit.message, 'skip ci')"
15
- runs-on: ubuntu-latest
16
-
17
15
  strategy:
18
- fail-fast: true
19
-
16
+ fail-fast: false
17
+ matrix:
18
+ os: [ubuntu-latest]
19
+ ruby: [2.6, 2.7, '3.0']
20
+ runs-on: ${{ matrix.os }}
20
21
  steps:
21
22
  - name: Checkout source code
22
- uses: actions/checkout@v2
23
+ uses: actions/checkout@v2.3.4
23
24
 
24
- - name: Install required ruby
25
+ - name: Install required ruby version
25
26
  uses: ruby/setup-ruby@v1
26
-
27
- - name: Setup cache key and directory for gems cache
28
- uses: actions/cache@v2
29
27
  with:
30
- path: vendor/bundle
31
- key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
32
- restore-keys: |
33
- ${{ runner.os }}-gems-
28
+ bundler-cache: true # runs 'bundle install' and caches gems
34
29
 
35
- - name: Bundle install
30
+ - name: Run rspec with coverage
36
31
  run: |
37
- bundle config path vendor/bundle
38
- bundle config set jobs 4
39
- bundle config set retry 3
40
- bundle install
32
+ COVERAGE=true bundle exec rspec
41
33
 
42
34
  - name: Run rubocop
43
- run: |
35
+ run: |
44
36
  bundle exec rubocop --parallel
45
37
 
46
- - name: Run tests
47
- run: bundle exec rspec
38
+ - name: Run Skunk on Project
39
+ run: |
40
+ gem install skunk
41
+ skunk lib/
@@ -11,7 +11,7 @@ jobs:
11
11
 
12
12
  steps:
13
13
  - name: Checkout source code
14
- uses: actions/checkout@v2
14
+ uses: actions/checkout@v2.3.4
15
15
  with:
16
16
  persist-credentials: false
17
17
  fetch-depth: 0 # otherwise, you will fail to push refs to dest repo
@@ -7,8 +7,17 @@ jobs:
7
7
  label:
8
8
  runs-on: ubuntu-latest
9
9
  steps:
10
- - uses: mheap/github-action-required-labels@v1
10
+ - uses: mheap/github-action-required-labels@v1.1.2
11
11
  with:
12
- mode: exactly
12
+ mode: minimum
13
13
  count: 1
14
- labels: "bug, change, enhancement"
14
+ #
15
+ # Releases will group changes under Added/Fixed/Changed sub-headers
16
+ # based on labels and follwing these rules:
17
+ #
18
+ # Added: enhancement
19
+ # Fixed: bug
20
+ # Changed: maintenance, change, dependencies (used by Dependabot)
21
+ # Ignore: skip-changelog
22
+ #
23
+ labels: "enhancement, bug, maintenance, change, dependencies, skip-changelog"
data/.rubocop.yml CHANGED
@@ -47,6 +47,7 @@ Metrics/ClassLength:
47
47
  Exclude:
48
48
  - app/controllers/orders_controller.rb
49
49
  - app/models/order.rb
50
+ - spec/support/fake_api.rb
50
51
  Metrics/BlockLength:
51
52
  IgnoredMethods: ['describe', 'context']
52
53
  Exclude:
data/README.md CHANGED
@@ -4,9 +4,6 @@ FinApps Ruby-Client
4
4
 
5
5
  [![Gem Version](https://img.shields.io/gem/v/finapps.svg)](https://rubygems.org/gems/finapps)
6
6
  ![Main](https://github.com/finapps/ruby-client/workflows/Main/badge.svg)
7
- [![Build Status](https://travis-ci.org/finapps/ruby-client.svg?branch=master)](https://travis-ci.org/finapps/ruby-client)
8
- [![Code Climate](https://codeclimate.com/github/finapps/ruby-client/badges/gpa.svg)](https://codeclimate.com/github/finapps/ruby-client)
9
- [![Test Coverage](https://codeclimate.com/github/finapps/ruby-client/badges/coverage.svg)](https://codeclimate.com/github/finapps/ruby-client/coverage)
10
7
  [![License](http://img.shields.io/:license-mit-blue.svg?style=flat-square)](http://finapps.mit-license.org)
11
8
 
12
9
 
data/finapps.gemspec CHANGED
@@ -20,20 +20,18 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = Dir['spec/**/*.rb']
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_runtime_dependency 'finapps_core', '~> 5.0', '>= 5.0.15'
23
+ spec.add_runtime_dependency 'finapps_core', '~> 6.0', '>= 6.0.0'
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 2.0', '>= 2.0.2'
26
- spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0', '>= 1.0.9'
27
- spec.add_development_dependency 'guard', '~> 2.16', '>= 2.16.1'
28
- spec.add_development_dependency 'guard-rspec', '~> 4.7', '>= 4.7.3'
25
+ spec.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.16'
29
26
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
30
27
  spec.add_development_dependency 'rspec', '~> 3.10', '>= 3.10.0'
31
- spec.add_development_dependency 'rubocop', '~> 1.9', '>= 1.9.1'
32
28
  spec.add_development_dependency 'rubocop-performance', '~> 1.9', '>= 1.9.2'
33
29
  spec.add_development_dependency 'rubocop-rake', '~> 0.5', '>= 0.5.1'
34
- spec.add_development_dependency 'rubocop-rspec', '~> 2.2', '>= 2.2.0'
30
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.4', '>= 2.4.0'
31
+ spec.add_development_dependency 'simplecov', '~> 0.21', '>= 0.21.2'
32
+ spec.add_development_dependency 'simplecov-console', '~> 0.9'
35
33
  spec.add_development_dependency 'sinatra', '~> 2.1', '>= 2.1.0'
36
- spec.add_development_dependency 'webmock', '~> 3.11', '>= 3.11.2'
34
+ spec.add_development_dependency 'webmock', '~> 3.12', '>= 3.12.2'
37
35
 
38
36
  spec.extra_rdoc_files = %w[README.md LICENSE.txt]
39
37
  spec.rdoc_options = %w[--line-numbers --inline-source --title finapps-ruby --main README.md]
data/lib/finapps.rb CHANGED
@@ -14,6 +14,7 @@ require 'finapps/rest/order_statuses'
14
14
  require 'finapps/rest/order_notifications'
15
15
  require 'finapps/rest/password_resets'
16
16
  require 'finapps/rest/operators'
17
+ require 'finapps/rest/operator_login_tokens'
17
18
  require 'finapps/rest/operators_password_resets'
18
19
  require 'finapps/rest/products'
19
20
  require 'finapps/rest/order_assignments'
@@ -24,6 +24,7 @@ module FinApps
24
24
  order_statuses
25
25
  order_tokens
26
26
  operators
27
+ operator_login_tokens
27
28
  operators_password_resets
28
29
  password_resets
29
30
  plaid_webhooks
@@ -56,7 +56,7 @@ module FinApps
56
56
  def search_query(term)
57
57
  query = with_space_search(term).concat(name_search(term))
58
58
  {
59
- "$or": query
59
+ '$or': query
60
60
  }
61
61
  end
62
62
 
@@ -75,28 +75,28 @@ module FinApps
75
75
  return {} unless term
76
76
 
77
77
  query = with_space_search(term).concat(name_search(term))
78
- {"$or": query}
78
+ {'$or': query}
79
79
  end
80
80
 
81
81
  def name_search(term)
82
82
  search_arr = []
83
83
  if /\s/.match?(term)
84
84
  term.split.each do |t|
85
- search_arr.append("applicant.first_name": t)
86
- search_arr.append("applicant.last_name": t)
85
+ search_arr.append('applicant.first_name': t)
86
+ search_arr.append('applicant.last_name': t)
87
87
  end
88
88
  end
89
89
  search_arr
90
90
  end
91
91
 
92
92
  def with_space_search(term)
93
- [{"applicant.email": term},
94
- {"applicant.first_name": term},
95
- {"applicant.last_name": term},
96
- {"applicant.external_id": term},
93
+ [{'applicant.email': term},
94
+ {'applicant.first_name': term},
95
+ {'applicant.last_name': term},
96
+ {'applicant.external_id': term},
97
97
  {
98
98
  reference_no: {
99
- "$regex": "^#{term}", "$options": 'i'
99
+ '$regex': "^#{term}", '$options': 'i'
100
100
  }
101
101
  }]
102
102
  end
@@ -9,7 +9,7 @@ module FinApps
9
9
 
10
10
  path =
11
11
  "consumers/#{ERB::Util.url_encode(consumer_id)}/"\
12
- "documents/#{ERB::Util.url_encode(doc_id)}?thumbnail=#{thumbnail}"
12
+ "documents/#{ERB::Util.url_encode(doc_id)}?thumbnail=#{thumbnail}"
13
13
  super(nil, path)
14
14
  end
15
15
 
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FinApps
4
+ module REST
5
+ class OperatorLoginTokens < FinAppsCore::REST::Resources
6
+ def create(params)
7
+ not_blank(params, :params)
8
+ super params, 'login/operators/token'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -69,7 +69,7 @@ module FinApps
69
69
 
70
70
  def role_query(role)
71
71
  if role.is_a?(Array)
72
- {role: {"$in": role.map(&:to_i)}}
72
+ {role: {'$in': role.map(&:to_i)}}
73
73
  else
74
74
  {role: role.to_i}
75
75
  end
@@ -66,28 +66,28 @@ module FinApps
66
66
  return {} unless term
67
67
 
68
68
  query = search_query_object(term).concat(consumer_name_query(term))
69
- {"$or": query}
69
+ {'$or': query}
70
70
  end
71
71
 
72
72
  def consumer_name_query(term)
73
73
  search_arr = []
74
74
  if /\s/.match?(term)
75
75
  term.split.each do |t|
76
- search_arr.append("applicant.first_name": t)
77
- search_arr.append("applicant.last_name": t)
76
+ search_arr.append('applicant.first_name': t)
77
+ search_arr.append('applicant.last_name': t)
78
78
  end
79
79
  end
80
80
  search_arr
81
81
  end
82
82
 
83
83
  def search_query_object(term)
84
- [{public_id: {"$regex": "^#{term}", "$options": 'i'}},
85
- {"assignment.last_name": term},
86
- {"applicant.first_name": term},
87
- {"applicant.last_name": term},
84
+ [{public_id: {'$regex': "^#{term}", '$options': 'i'}},
85
+ {'assignment.last_name': term},
86
+ {'applicant.first_name': term},
87
+ {'applicant.last_name': term},
88
88
  {
89
- "requestor.reference_no": {
90
- "$regex": "^#{term}", "$options": 'i'
89
+ 'requestor.reference_no': {
90
+ '$regex': "^#{term}", '$options': 'i'
91
91
  }
92
92
  }]
93
93
  end
@@ -95,7 +95,7 @@ module FinApps
95
95
  def status_query(status)
96
96
  if status
97
97
  if status.is_a?(Array)
98
- {status: {"$in": status.map(&:to_i)}}
98
+ {status: {'$in': status.map(&:to_i)}}
99
99
  else
100
100
  {status: status.to_i}
101
101
  end
@@ -107,7 +107,7 @@ module FinApps
107
107
  def assignment_query(assignment)
108
108
  # translate "" to null assignment
109
109
  if assignment
110
- {"assignment.operator_id": assignment.empty? ? nil : assignment}
110
+ {'assignment.operator_id': assignment.empty? ? nil : assignment}
111
111
  else
112
112
  {}
113
113
  end
@@ -124,9 +124,9 @@ module FinApps
124
124
  def relation_query(relation, search_term)
125
125
  if !search_term && !nil_or_empty?(relation)
126
126
  {
127
- "$or": [
128
- {public_id: {"$in": relation}},
129
- {original_order_id: {"$in": relation}}
127
+ '$or': [
128
+ {public_id: {'$in': relation}},
129
+ {original_order_id: {'$in': relation}}
130
130
  ]
131
131
  }
132
132
  else
@@ -14,6 +14,11 @@ module FinApps
14
14
  super(nil, path)
15
15
  end
16
16
 
17
+ def tenant_schemas
18
+ path = 'schemas'
19
+ send_request path, :get
20
+ end
21
+
17
22
  def last(consumer_id)
18
23
  not_blank(consumer_id, :consumer_id)
19
24
 
@@ -57,13 +62,13 @@ module FinApps
57
62
  return {} unless term
58
63
 
59
64
  query = search_query_object(term)
60
- {"$or": query}
65
+ {'$or': query}
61
66
  end
62
67
 
63
68
  def search_query_object(term)
64
69
  [
65
- {"consumer.public_id": term},
66
- {"consumer.email": term}
70
+ {'consumer.public_id': term},
71
+ {'consumer.email': term}
67
72
  ]
68
73
  end
69
74
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FinApps
4
- VERSION = '5.3.0'
4
+ VERSION = '6.1.0'
5
5
  end
@@ -46,7 +46,7 @@ RSpec.describe FinApps::REST::AlertDefinitions do
46
46
  list
47
47
  url =
48
48
  "#{versioned_api_path}/portfolio/alerts/definitions?page=2&requested=25&" \
49
- 'sort=-created_date'
49
+ 'sort=-created_date'
50
50
  expect(WebMock).to have_requested(:get, url)
51
51
  end
52
52
  end
@@ -53,7 +53,7 @@ RSpec.describe FinApps::REST::AlertOccurrences do
53
53
  list
54
54
  url =
55
55
  "#{versioned_api_path}/portfolio/alerts/occurrences?" \
56
- 'filter=%7B%22portfolio_id%22:%22valid_id%22%7D&page=2&requested=25&sort=-created_date'
56
+ 'filter=%7B%22portfolio_id%22:%22valid_id%22%7D&page=2&requested=25&sort=-created_date'
57
57
  expect(WebMock).to have_requested(:get, url)
58
58
  end
59
59
  end
@@ -56,7 +56,7 @@ RSpec.describe FinApps::REST::ConsumersPortfolios do
56
56
  list
57
57
  url =
58
58
  "#{versioned_api_path}/consumers/#{id}/portfolios?page=2&" \
59
- 'requested=25&sort=-created_date'
59
+ 'requested=25&sort=-created_date'
60
60
  expect(WebMock).to have_requested(:get, url)
61
61
  end
62
62
  end
@@ -119,11 +119,11 @@ RSpec.describe FinApps::REST::Consumers do
119
119
  it 'builds query and sends proper request' do
120
120
  list
121
121
  filter = '{"$or":['\
122
- '{"external_id":"term"},'\
123
- '{"email":"term"},'\
124
- '{"first_name":"term"},'\
125
- '{"last_name":"term"}'\
126
- ']}'
122
+ '{"external_id":"term"},'\
123
+ '{"email":"term"},'\
124
+ '{"first_name":"term"},'\
125
+ '{"last_name":"term"}'\
126
+ ']}'
127
127
  query = "?filter=#{filter}&page=2&requested=25&sort=date_created"
128
128
  url = "#{versioned_api_path}/consumers#{query}"
129
129
  expect(WebMock).to have_requested(:get, url)
@@ -142,15 +142,15 @@ RSpec.describe FinApps::REST::Consumers do
142
142
  it 'treats space as start of a new query for first and last name' do
143
143
  list
144
144
  filter = '{"$or":['\
145
- '{"external_id":"Two terms"},'\
146
- '{"email":"Two terms"},'\
147
- '{"first_name":"Two terms"},'\
148
- '{"last_name":"Two terms"},'\
149
- '{"first_name":"Two"},'\
150
- '{"last_name":"Two"},'\
151
- '{"first_name":"terms"},'\
152
- '{"last_name":"terms"}'\
153
- ']}'
145
+ '{"external_id":"Two terms"},'\
146
+ '{"email":"Two terms"},'\
147
+ '{"first_name":"Two terms"},'\
148
+ '{"last_name":"Two terms"},'\
149
+ '{"first_name":"Two"},'\
150
+ '{"last_name":"Two"},'\
151
+ '{"first_name":"terms"},'\
152
+ '{"last_name":"terms"}'\
153
+ ']}'
154
154
  query = "?filter=#{filter}&page=2&requested=25&sort=date_created"
155
155
  url = "#{versioned_api_path}/consumers#{query}"
156
156
  expect(WebMock).to have_requested(:get, url)
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helpers/client'
4
+
5
+ RSpec.describe FinApps::REST::OperatorLoginTokens do
6
+ context 'when initialized with valid FinApps::Client object' do
7
+ include SpecHelpers::Client
8
+ subject(:operator_login_tokens) { described_class.new(client) }
9
+
10
+ describe '#create' do
11
+ let(:results) { create[0] }
12
+ let(:error_messages) { create[1] }
13
+
14
+ context 'when missing params' do
15
+ let(:create) { subject.create(nil) }
16
+
17
+ error = FinAppsCore::MissingArgumentsError
18
+ it { expect { create }.to raise_error(error) }
19
+ end
20
+
21
+ context 'when invalid params are provided' do
22
+ let(:create) { subject.create(params: 'invalid') }
23
+
24
+ it { expect { create }.not_to raise_error }
25
+ it('results is nil') { expect(results).to be_nil }
26
+
27
+ it('error messages array is populated') do
28
+ expect(error_messages.first.downcase).to eq('invalid request body')
29
+ end
30
+ end
31
+
32
+ context 'when valid params are provided' do
33
+ let(:create) { subject.create(params: 'valid') }
34
+
35
+ it { expect { create }.not_to raise_error }
36
+ it('returns an array') { expect(create).to be_a(Array) }
37
+ it { expect(results).to have_key(:public_id) }
38
+ it { expect(results).to have_key(:role) }
39
+ it('returns no error messages') { expect(error_messages).to be_empty }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -61,7 +61,7 @@ RSpec.describe FinApps::REST::Operators do
61
61
  list
62
62
  url =
63
63
  "#{versioned_api_path}/operators?filter=%7B%22last_name%22:%22term%22," \
64
- '%22role%22:2%7D&page=2&requested=25&sort=date_created'
64
+ '%22role%22:2%7D&page=2&requested=25&sort=date_created'
65
65
  expect(WebMock).to have_requested(:get, url)
66
66
  end
67
67
  end
@@ -133,13 +133,13 @@ RSpec.describe FinApps::REST::Orders do
133
133
  it 'builds query and sends proper request' do
134
134
  list
135
135
  url = "#{versioned_api_path}/orders?"\
136
- 'filter=%7B%22$or%22:%5B%7B%22public_id%22:%7B%22$regex%22:%22%5E'\
137
- 'term%22,%22$options%22:%22i%22%7D%7D,%7B%22assignment.last_name%22:%22'\
138
- 'term%22%7D,%7B%22applicant.first_name%22:%22term%22%7D,%7B%22'\
139
- 'applicant.last_name%22:%22term%22%7D,%7B%22requestor.reference_no'\
140
- '%22:%7B%22$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D%5D,%22'\
141
- 'status%22:%7B%22$in%22:%5B1,7%5D%7D,%22assignment.operator_id%22:%22'\
142
- 'valid_operator%22,%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=status'
136
+ 'filter=%7B%22$or%22:%5B%7B%22public_id%22:%7B%22$regex%22:%22%5E'\
137
+ 'term%22,%22$options%22:%22i%22%7D%7D,%7B%22assignment.last_name%22:%22'\
138
+ 'term%22%7D,%7B%22applicant.first_name%22:%22term%22%7D,%7B%22'\
139
+ 'applicant.last_name%22:%22term%22%7D,%7B%22requestor.reference_no'\
140
+ '%22:%7B%22$regex%22:%22%5Eterm%22,%22$options%22:%22i%22%7D%7D%5D,%22'\
141
+ 'status%22:%7B%22$in%22:%5B1,7%5D%7D,%22assignment.operator_id%22:%22'\
142
+ 'valid_operator%22,%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=status'
143
143
  expect(WebMock).to have_requested(:get, url)
144
144
  end
145
145
 
@@ -147,12 +147,12 @@ RSpec.describe FinApps::REST::Orders do
147
147
  params[:searchTerm] = nil
148
148
  list
149
149
  url = "#{versioned_api_path}/orders?"\
150
- 'filter=%7B%22status%22:%7B%22$in%22:%5B1,7%5D%7D,' \
151
- '%22assignment.operator_id%22:%22valid_operator%22,'\
152
- '%22consumer_id%22:%22valid_consumer_id%22,' \
153
- '%22$or%22:%5B%7B%22public_id%22:%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D,'\
154
- '%7B%22original_order_id%22:%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D%5D%7D&'\
155
- 'page=2&requested=25&sort=status'
150
+ 'filter=%7B%22status%22:%7B%22$in%22:%5B1,7%5D%7D,' \
151
+ '%22assignment.operator_id%22:%22valid_operator%22,'\
152
+ '%22consumer_id%22:%22valid_consumer_id%22,' \
153
+ '%22$or%22:%5B%7B%22public_id%22:%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D,'\
154
+ '%7B%22original_order_id%22:%7B%22$in%22:%5B%22valid_order_id%22%5D%7D%7D%5D%7D&'\
155
+ 'page=2&requested=25&sort=status'
156
156
  expect(WebMock).to have_requested(:get, url)
157
157
  end
158
158
 
@@ -160,16 +160,16 @@ RSpec.describe FinApps::REST::Orders do
160
160
  params[:searchTerm] = 'Spacing Out'
161
161
  list
162
162
  url = "#{versioned_api_path}/orders?"\
163
- 'filter=%7B%22$or%22:%5B%7B%22public_id%22:%7B%22$regex%22:%22%5E'\
164
- 'Spacing%20Out%22,%22$options%22:%22i%22%7D%7D,%7B%22assignment.last_name'\
165
- '%22:%22Spacing%20Out%22%7D,%7B%22applicant.first_name%22:%22'\
166
- 'Spacing%20Out%22%7D,%7B%22applicant.last_name%22:%22Spacing%20Out'\
167
- '%22%7D,%7B%22requestor.reference_no%22:%7B%22$regex%22:%22%5ESpacing%20Out'\
168
- '%22,%22$options%22:%22i%22%7D%7D,%7B%22applicant.first_name%22:%22Spacing'\
169
- '%22%7D,%7B%22applicant.last_name%22:%22Spacing%22%7D,%7B%22applicant.first_name'\
170
- '%22:%22Out%22%7D,%7B%22applicant.last_name%22:%22Out%22%7D%5D,%22status'\
171
- '%22:%7B%22$in%22:%5B1,7%5D%7D,%22assignment.operator_id%22:%22valid_operator'\
172
- '%22,%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=status'
163
+ 'filter=%7B%22$or%22:%5B%7B%22public_id%22:%7B%22$regex%22:%22%5E'\
164
+ 'Spacing%20Out%22,%22$options%22:%22i%22%7D%7D,%7B%22assignment.last_name'\
165
+ '%22:%22Spacing%20Out%22%7D,%7B%22applicant.first_name%22:%22'\
166
+ 'Spacing%20Out%22%7D,%7B%22applicant.last_name%22:%22Spacing%20Out'\
167
+ '%22%7D,%7B%22requestor.reference_no%22:%7B%22$regex%22:%22%5ESpacing%20Out'\
168
+ '%22,%22$options%22:%22i%22%7D%7D,%7B%22applicant.first_name%22:%22Spacing'\
169
+ '%22%7D,%7B%22applicant.last_name%22:%22Spacing%22%7D,%7B%22applicant.first_name'\
170
+ '%22:%22Out%22%7D,%7B%22applicant.last_name%22:%22Out%22%7D%5D,%22status'\
171
+ '%22:%7B%22$in%22:%5B1,7%5D%7D,%22assignment.operator_id%22:%22valid_operator'\
172
+ '%22,%22consumer_id%22:%22valid_consumer_id%22%7D&page=2&requested=25&sort=status'
173
173
  expect(WebMock).to have_requested(:get, url)
174
174
  end
175
175
 
@@ -177,7 +177,7 @@ RSpec.describe FinApps::REST::Orders do
177
177
  described_class.new(client).list(assignment: '')
178
178
 
179
179
  url = "#{versioned_api_path}/orders?"\
180
- 'filter=%7B%22assignment.operator_id%22:null%7D'
180
+ 'filter=%7B%22assignment.operator_id%22:null%7D'
181
181
  expect(WebMock).to have_requested(:get, url)
182
182
  end
183
183
  end
@@ -46,7 +46,7 @@ RSpec.describe FinApps::REST::PortfolioReports do
46
46
  list
47
47
  url =
48
48
  "#{versioned_api_path}/portfolio/reports?page=2&requested=25&" \
49
- 'sort=-created_date'
49
+ 'sort=-created_date'
50
50
  expect(WebMock).to have_requested(:get, url)
51
51
  end
52
52
  end
@@ -56,7 +56,7 @@ RSpec.describe FinApps::REST::PortfoliosAvailableConsumers do
56
56
  list
57
57
  url =
58
58
  "#{versioned_api_path}/portfolios/#{id}/consumers/available?page=2&" \
59
- 'requested=25&sort=-created_date'
59
+ 'requested=25&sort=-created_date'
60
60
  expect(WebMock).to have_requested(:get, url)
61
61
  end
62
62
  end
@@ -56,7 +56,7 @@ RSpec.describe FinApps::REST::PortfoliosConsumers do
56
56
  list
57
57
  url =
58
58
  "#{versioned_api_path}/portfolios/#{portfolio_id}/consumers?page=2&" \
59
- 'requested=25&sort=-created_date'
59
+ 'requested=25&sort=-created_date'
60
60
  expect(WebMock).to have_requested(:get, url)
61
61
  end
62
62
  end
@@ -76,6 +76,23 @@ RSpec.describe FinApps::REST::Screenings do
76
76
  end
77
77
  end
78
78
 
79
+ describe '#tenant_schemas' do
80
+ subject(:tenant_schemas) { described_class.new(client).tenant_schemas }
81
+
82
+ it_behaves_like 'an API request'
83
+ it_behaves_like 'a successful request'
84
+ it 'performs a get and returns the response' do
85
+ expect(results[0]).to have_key(:external_url)
86
+ end
87
+
88
+ it 'sends proper request' do
89
+ tenant_schemas
90
+ url = "#{versioned_api_path}/schemas"
91
+
92
+ expect(WebMock).to have_requested(:get, url)
93
+ end
94
+ end
95
+
79
96
  describe '#show' do
80
97
  subject(:show) { described_class.new(client).show(id) }
81
98
 
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- if ENV['CODECLIMATE_REPO_TOKEN']
4
- # require 'codeclimate-test-reporter'
5
- # CodeClimate::TestReporter.start
3
+ if ENV['COVERAGE'] == 'true'
6
4
  require 'simplecov'
7
- SimpleCov.start
5
+ require 'simplecov-console'
6
+
7
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ SimpleCov::Formatter::Console,
10
+ ]
11
+
12
+ SimpleCov.start do
13
+ track_files 'lib/**/*.rb'
14
+ end
15
+
16
+ puts "Using SimpleCov v#{SimpleCov::VERSION}"
8
17
  end
9
18
 
10
19
  require 'bundler/setup'
@@ -358,6 +358,17 @@ module Fake
358
358
  end
359
359
  end
360
360
 
361
+ # operators login tokens
362
+ post("/#{version}/login/operators/token") do
363
+ request.body.rewind
364
+ request_payload = JSON.parse request.body.read
365
+ if request_payload['params'] == 'valid'
366
+ json_response 200, 'operator_login_token.json'
367
+ else
368
+ json_response 400, 'invalid_request_body.json'
369
+ end
370
+ end
371
+
361
372
  # session
362
373
  post("/#{version}/login") do
363
374
  request.body.rewind
@@ -0,0 +1,18 @@
1
+ {
2
+ "auth0_id": "string",
3
+ "date_created": "2021-07-16T19:14:23Z",
4
+ "date_modified": "2021-07-16T19:14:23Z",
5
+ "email": "string",
6
+ "external_id": "string",
7
+ "first_name": "string",
8
+ "last_name": "string",
9
+ "locked": true,
10
+ "memo": "string",
11
+ "phone": "string",
12
+ "phone_country_code": "string",
13
+ "public_id": "string",
14
+ "role": 0,
15
+ "status": 0,
16
+ "tenant_id": "string",
17
+ "token": "string"
18
+ }
@@ -0,0 +1,8 @@
1
+ [
2
+ {
3
+ "id": "6058c9e67d4ee100015d55e2",
4
+ "name": "Florida Family Medicaid Eligibility",
5
+ "description": "Screens applicants for Potential Family Medicaid Eligibility in the State of Florida.",
6
+ "external_url": ""
7
+ }
8
+ ]
@@ -13,8 +13,12 @@ module Fake
13
13
  create_routes base, resource
14
14
  end
15
15
 
16
+ # rubocop:disable Metrics/MethodLength
16
17
  def list_routes(base, resource)
17
18
  base.get(resource) { json_response 200, 'screening_list.json' }
19
+ base.get(resource.gsub('screenings', 'schemas')) do
20
+ json_response 200, 'screenings/tenant_schemas.json'
21
+ end
18
22
  base.get("#{resource}/:consumer_id/consumer") do
19
23
  if params[:consumer_id] == 'invalid_consumer_id'
20
24
  json_response 404, 'session_not_found.json'
@@ -23,6 +27,7 @@ module Fake
23
27
  end
24
28
  end
25
29
  end
30
+ # rubocop:enable Metrics/MethodLength
26
31
 
27
32
  def resume_routes(base, resource)
28
33
  base.get("#{resource}/:session_id/resume") do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: finapps
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erich Quintero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-25 00:00:00.000000000 Z
11
+ date: 2021-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: finapps_core
@@ -16,100 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: '6.0'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 5.0.15
22
+ version: 6.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '5.0'
29
+ version: '6.0'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 5.0.15
32
+ version: 6.0.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '2.0'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 2.0.2
43
- type: :development
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '2.0'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 2.0.2
53
- - !ruby/object:Gem::Dependency
54
- name: codeclimate-test-reporter
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '1.0'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 1.0.9
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '1.0'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 1.0.9
73
- - !ruby/object:Gem::Dependency
74
- name: guard
75
- requirement: !ruby/object:Gem::Requirement
76
- requirements:
77
- - - "~>"
78
- - !ruby/object:Gem::Version
79
- version: '2.16'
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 2.16.1
83
- type: :development
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '2.16'
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: 2.16.1
93
- - !ruby/object:Gem::Dependency
94
- name: guard-rspec
95
- requirement: !ruby/object:Gem::Requirement
96
- requirements:
97
- - - "~>"
98
- - !ruby/object:Gem::Version
99
- version: '4.7'
39
+ version: '2.2'
100
40
  - - ">="
101
41
  - !ruby/object:Gem::Version
102
- version: 4.7.3
42
+ version: 2.2.16
103
43
  type: :development
104
44
  prerelease: false
105
45
  version_requirements: !ruby/object:Gem::Requirement
106
46
  requirements:
107
47
  - - "~>"
108
48
  - !ruby/object:Gem::Version
109
- version: '4.7'
49
+ version: '2.2'
110
50
  - - ">="
111
51
  - !ruby/object:Gem::Version
112
- version: 4.7.3
52
+ version: 2.2.16
113
53
  - !ruby/object:Gem::Dependency
114
54
  name: rake
115
55
  requirement: !ruby/object:Gem::Requirement
@@ -151,7 +91,7 @@ dependencies:
151
91
  - !ruby/object:Gem::Version
152
92
  version: 3.10.0
153
93
  - !ruby/object:Gem::Dependency
154
- name: rubocop
94
+ name: rubocop-performance
155
95
  requirement: !ruby/object:Gem::Requirement
156
96
  requirements:
157
97
  - - "~>"
@@ -159,7 +99,7 @@ dependencies:
159
99
  version: '1.9'
160
100
  - - ">="
161
101
  - !ruby/object:Gem::Version
162
- version: 1.9.1
102
+ version: 1.9.2
163
103
  type: :development
164
104
  prerelease: false
165
105
  version_requirements: !ruby/object:Gem::Requirement
@@ -169,67 +109,81 @@ dependencies:
169
109
  version: '1.9'
170
110
  - - ">="
171
111
  - !ruby/object:Gem::Version
172
- version: 1.9.1
112
+ version: 1.9.2
173
113
  - !ruby/object:Gem::Dependency
174
- name: rubocop-performance
114
+ name: rubocop-rake
175
115
  requirement: !ruby/object:Gem::Requirement
176
116
  requirements:
177
117
  - - "~>"
178
118
  - !ruby/object:Gem::Version
179
- version: '1.9'
119
+ version: '0.5'
180
120
  - - ">="
181
121
  - !ruby/object:Gem::Version
182
- version: 1.9.2
122
+ version: 0.5.1
183
123
  type: :development
184
124
  prerelease: false
185
125
  version_requirements: !ruby/object:Gem::Requirement
186
126
  requirements:
187
127
  - - "~>"
188
128
  - !ruby/object:Gem::Version
189
- version: '1.9'
129
+ version: '0.5'
190
130
  - - ">="
191
131
  - !ruby/object:Gem::Version
192
- version: 1.9.2
132
+ version: 0.5.1
193
133
  - !ruby/object:Gem::Dependency
194
- name: rubocop-rake
134
+ name: rubocop-rspec
195
135
  requirement: !ruby/object:Gem::Requirement
196
136
  requirements:
197
137
  - - "~>"
198
138
  - !ruby/object:Gem::Version
199
- version: '0.5'
139
+ version: '2.4'
200
140
  - - ">="
201
141
  - !ruby/object:Gem::Version
202
- version: 0.5.1
142
+ version: 2.4.0
203
143
  type: :development
204
144
  prerelease: false
205
145
  version_requirements: !ruby/object:Gem::Requirement
206
146
  requirements:
207
147
  - - "~>"
208
148
  - !ruby/object:Gem::Version
209
- version: '0.5'
149
+ version: '2.4'
210
150
  - - ">="
211
151
  - !ruby/object:Gem::Version
212
- version: 0.5.1
152
+ version: 2.4.0
213
153
  - !ruby/object:Gem::Dependency
214
- name: rubocop-rspec
154
+ name: simplecov
215
155
  requirement: !ruby/object:Gem::Requirement
216
156
  requirements:
217
157
  - - "~>"
218
158
  - !ruby/object:Gem::Version
219
- version: '2.2'
159
+ version: '0.21'
220
160
  - - ">="
221
161
  - !ruby/object:Gem::Version
222
- version: 2.2.0
162
+ version: 0.21.2
223
163
  type: :development
224
164
  prerelease: false
225
165
  version_requirements: !ruby/object:Gem::Requirement
226
166
  requirements:
227
167
  - - "~>"
228
168
  - !ruby/object:Gem::Version
229
- version: '2.2'
169
+ version: '0.21'
230
170
  - - ">="
231
171
  - !ruby/object:Gem::Version
232
- version: 2.2.0
172
+ version: 0.21.2
173
+ - !ruby/object:Gem::Dependency
174
+ name: simplecov-console
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '0.9'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.9'
233
187
  - !ruby/object:Gem::Dependency
234
188
  name: sinatra
235
189
  requirement: !ruby/object:Gem::Requirement
@@ -256,20 +210,20 @@ dependencies:
256
210
  requirements:
257
211
  - - "~>"
258
212
  - !ruby/object:Gem::Version
259
- version: '3.11'
213
+ version: '3.12'
260
214
  - - ">="
261
215
  - !ruby/object:Gem::Version
262
- version: 3.11.2
216
+ version: 3.12.2
263
217
  type: :development
264
218
  prerelease: false
265
219
  version_requirements: !ruby/object:Gem::Requirement
266
220
  requirements:
267
221
  - - "~>"
268
222
  - !ruby/object:Gem::Version
269
- version: '3.11'
223
+ version: '3.12'
270
224
  - - ">="
271
225
  - !ruby/object:Gem::Version
272
- version: 3.11.2
226
+ version: 3.12.2
273
227
  description: A simple library for communicating with the FinApps REST API.
274
228
  email:
275
229
  - erich@financialapps.com
@@ -314,6 +268,7 @@ files:
314
268
  - lib/finapps/rest/documents_upload_types.rb
315
269
  - lib/finapps/rest/documents_uploads.rb
316
270
  - lib/finapps/rest/esign_templates.rb
271
+ - lib/finapps/rest/operator_login_tokens.rb
317
272
  - lib/finapps/rest/operators.rb
318
273
  - lib/finapps/rest/operators_password_resets.rb
319
274
  - lib/finapps/rest/order_assignments.rb
@@ -359,6 +314,7 @@ files:
359
314
  - spec/rest/documents_upload_types_spec.rb
360
315
  - spec/rest/documents_uploads_spec.rb
361
316
  - spec/rest/esign_templates_spec.rb
317
+ - spec/rest/operators_login_tokens_spec.rb
362
318
  - spec/rest/operators_password_resets_spec.rb
363
319
  - spec/rest/operators_spec.rb
364
320
  - spec/rest/order_assignments_spec.rb
@@ -414,6 +370,7 @@ files:
414
370
  - spec/support/fixtures/operator.json
415
371
  - spec/support/fixtures/operator_forgot_password.json
416
372
  - spec/support/fixtures/operator_list.json
373
+ - spec/support/fixtures/operator_login_token.json
417
374
  - spec/support/fixtures/order.json
418
375
  - spec/support/fixtures/order_refresh.json
419
376
  - spec/support/fixtures/order_report.json
@@ -447,6 +404,7 @@ files:
447
404
  - spec/support/fixtures/screening_list.json
448
405
  - spec/support/fixtures/screenings/last_session.json
449
406
  - spec/support/fixtures/screenings/session_not_found_with_id.json
407
+ - spec/support/fixtures/screenings/tenant_schemas.json
450
408
  - spec/support/fixtures/session_not_found.json
451
409
  - spec/support/fixtures/sign_url.json
452
410
  - spec/support/fixtures/signed_document.pdf
@@ -496,51 +454,52 @@ signing_key:
496
454
  specification_version: 4
497
455
  summary: FinApps REST API ruby client.
498
456
  test_files:
499
- - spec/spec_helpers/client.rb
500
457
  - spec/support/documents_uploads_routes.rb
501
458
  - spec/support/screenings_routes.rb
502
459
  - spec/support/fake_api.rb
460
+ - spec/utils/query_builder_spec.rb
461
+ - spec/spec_helpers/client.rb
503
462
  - spec/spec_helper.rb
504
- - spec/rest/tenant_settings_spec.rb
505
- - spec/rest/verix/verix_documents_spec.rb
506
- - spec/rest/verix/verix_records_spec.rb
463
+ - spec/rest/order_reports_spec.rb
464
+ - spec/rest/api_request.rb
465
+ - spec/rest/operators_login_tokens_spec.rb
466
+ - spec/rest/tenant_app_settings_spec.rb
467
+ - spec/rest/products_spec.rb
468
+ - spec/rest/orders_spec.rb
469
+ - spec/rest/esign_templates_spec.rb
470
+ - spec/rest/sessions_spec.rb
471
+ - spec/rest/order_assignments_spec.rb
472
+ - spec/rest/documents_orders_spec.rb
473
+ - spec/rest/order_tokens_spec.rb
474
+ - spec/rest/order_notifications_spec.rb
475
+ - spec/rest/order_refreshes_spec.rb
476
+ - spec/rest/plaid/plaid_accounts_spec.rb
477
+ - spec/rest/plaid/plaid_institution_logos_spec.rb
478
+ - spec/rest/plaid/plaid_account_permissions_spec.rb
479
+ - spec/rest/plaid/plaid_consumer_institutions_spec.rb
480
+ - spec/rest/plaid/plaid_webhooks_spec.rb
507
481
  - spec/rest/verix/verix_pdf_documents_spec.rb
508
482
  - spec/rest/verix/verix_metadata_spec.rb
509
- - spec/rest/sessions_spec.rb
510
- - spec/rest/operators_spec.rb
483
+ - spec/rest/verix/verix_records_spec.rb
484
+ - spec/rest/verix/verix_documents_spec.rb
485
+ - spec/rest/portfolios_alerts_spec.rb
486
+ - spec/rest/operators_password_resets_spec.rb
511
487
  - spec/rest/portfolio_reports_spec.rb
512
- - spec/rest/portfolios_consumers_spec.rb
513
- - spec/rest/documents_orders_spec.rb
514
- - spec/rest/documents_upload_types_spec.rb
515
- - spec/rest/version_spec.rb
516
- - spec/rest/orders_spec.rb
488
+ - spec/rest/alert_definitions_spec.rb
489
+ - spec/rest/consumers_spec.rb
490
+ - spec/rest/tenant_settings_spec.rb
491
+ - spec/rest/signed_documents_downloads_spec.rb
517
492
  - spec/rest/consumers_portfolios_spec.rb
518
- - spec/rest/portfolios_spec.rb
493
+ - spec/rest/documents_upload_types_spec.rb
519
494
  - spec/rest/documents_orders_notifications_spec.rb
520
- - spec/rest/portfolios_alerts_spec.rb
521
- - spec/rest/screenings_spec.rb
522
- - spec/rest/order_reports_spec.rb
523
- - spec/rest/order_refreshes_spec.rb
495
+ - spec/rest/version_spec.rb
524
496
  - spec/rest/documents_uploads_spec.rb
497
+ - spec/rest/client_spec.rb
498
+ - spec/rest/portfolios_consumers_spec.rb
499
+ - spec/rest/portfolios_spec.rb
525
500
  - spec/rest/order_statuses_spec.rb
526
- - spec/rest/products_spec.rb
527
- - spec/rest/order_assignments_spec.rb
528
- - spec/rest/signed_documents_downloads_spec.rb
529
- - spec/rest/order_tokens_spec.rb
530
- - spec/rest/api_request.rb
531
- - spec/rest/portfolios_available_consumers_spec.rb
532
- - spec/rest/alert_definitions_spec.rb
533
- - spec/rest/consumers_spec.rb
534
501
  - spec/rest/alert_occurrences_spec.rb
502
+ - spec/rest/screenings_spec.rb
503
+ - spec/rest/operators_spec.rb
535
504
  - spec/rest/password_resets_spec.rb
536
- - spec/rest/operators_password_resets_spec.rb
537
- - spec/rest/plaid/plaid_account_permissions_spec.rb
538
- - spec/rest/plaid/plaid_webhooks_spec.rb
539
- - spec/rest/plaid/plaid_consumer_institutions_spec.rb
540
- - spec/rest/plaid/plaid_accounts_spec.rb
541
- - spec/rest/plaid/plaid_institution_logos_spec.rb
542
- - spec/rest/esign_templates_spec.rb
543
- - spec/rest/tenant_app_settings_spec.rb
544
- - spec/rest/client_spec.rb
545
- - spec/rest/order_notifications_spec.rb
546
- - spec/utils/query_builder_spec.rb
505
+ - spec/rest/portfolios_available_consumers_spec.rb