mas-rad_core 0.0.79 → 0.0.80
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/adviser.rb +11 -3
- data/app/models/firm.rb +6 -2
- data/lib/mas/rad_core/version.rb +1 -1
- data/spec/dummy/log/test.log +0 -0
- data/spec/factories/adviser.rb +1 -1
- data/spec/factories/firm.rb +11 -10
- data/spec/models/adviser_spec.rb +28 -9
- data/spec/models/firm_factory_spec.rb +12 -31
- data/spec/models/firm_spec.rb +59 -7
- data/spec/models/principal_spec.rb +1 -1
- data/spec/serializers/firm_serializer_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 439f2ddeb557336ca2337cfbf574b802cb70d4bb
|
4
|
+
data.tar.gz: e3bbba73a760d498ffaa5ac78cc9fb7a41bd2e3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c65f5254b56b84ef07cc0482a0fc63a5ae55a6e7fbcc63fcb11af08ae64a946e045c174cb59d851787fb31e9af6757dd33f160e4c1a4e1da9a885b49f303f7c1
|
7
|
+
data.tar.gz: 0cbbb811bb47b2e00fec9b4d7292ba386c31cfba517c80974636d0bbd7180351e7df8113aabfb8af46d1f33ff8be8dc0a908da301fd8fea01b38a10b21c27440
|
data/app/models/adviser.rb
CHANGED
@@ -31,9 +31,9 @@ class Adviser < ActiveRecord::Base
|
|
31
31
|
|
32
32
|
validate :match_reference_number
|
33
33
|
|
34
|
+
after_save :flag_changes_for_after_commit
|
34
35
|
after_commit :geocode_and_reindex_firm
|
35
|
-
after_commit :reindex_old_firm
|
36
|
-
|
36
|
+
after_commit :reindex_old_firm
|
37
37
|
scope :sorted_by_name, -> { order(:name) }
|
38
38
|
|
39
39
|
def self.on_firms_with_fca_number(fca_number)
|
@@ -63,6 +63,13 @@ class Adviser < ActiveRecord::Base
|
|
63
63
|
|
64
64
|
private
|
65
65
|
|
66
|
+
# All record of what changed is gone by the time we get to the after_commit
|
67
|
+
# hooks. So we cannot use #firm_id_changed? at that point. To work around
|
68
|
+
# this we flag any important changes here to be actioned later.
|
69
|
+
def flag_changes_for_after_commit
|
70
|
+
@old_firm_id = firm_id_change.first if firm_id_changed?
|
71
|
+
end
|
72
|
+
|
66
73
|
def geocode_and_reindex_firm
|
67
74
|
if destroyed?
|
68
75
|
firm.geocode_and_reindex
|
@@ -72,7 +79,8 @@ class Adviser < ActiveRecord::Base
|
|
72
79
|
end
|
73
80
|
|
74
81
|
def reindex_old_firm
|
75
|
-
IndexFirmJob.perform_later(Firm.find(
|
82
|
+
IndexFirmJob.perform_later(Firm.find(@old_firm_id)) if @old_firm_id.present?
|
83
|
+
@old_firm_id = nil
|
76
84
|
end
|
77
85
|
|
78
86
|
def upcase_postcode
|
data/app/models/firm.rb
CHANGED
@@ -109,7 +109,7 @@ class Firm < ActiveRecord::Base
|
|
109
109
|
validates :investment_sizes,
|
110
110
|
length: { minimum: 1 }
|
111
111
|
|
112
|
-
|
112
|
+
after_commit :publish_to_elastic_search, unless: :destroyed?
|
113
113
|
after_commit :delete_elastic_search_entry, if: :destroyed?
|
114
114
|
|
115
115
|
def publish_to_elastic_search
|
@@ -195,7 +195,11 @@ class Firm < ActiveRecord::Base
|
|
195
195
|
end
|
196
196
|
|
197
197
|
def publishable?
|
198
|
-
main_office.present?
|
198
|
+
valid? && main_office.present? && !missing_advisers?
|
199
|
+
end
|
200
|
+
|
201
|
+
def missing_advisers?
|
202
|
+
(primary_advice_method == :local) && advisers.empty?
|
199
203
|
end
|
200
204
|
|
201
205
|
private
|
data/lib/mas/rad_core/version.rb
CHANGED
data/spec/dummy/log/test.log
CHANGED
Binary file
|
data/spec/factories/adviser.rb
CHANGED
@@ -12,7 +12,7 @@ FactoryGirl.define do
|
|
12
12
|
travel_distance '650'
|
13
13
|
latitude { Faker::Address.latitude.to_f.round(6) }
|
14
14
|
longitude { Faker::Address.longitude.to_f.round(6) }
|
15
|
-
firm
|
15
|
+
firm factory: :firm_without_advisers
|
16
16
|
|
17
17
|
after(:build) do |a, evaluator|
|
18
18
|
if a.reference_number? && evaluator.create_linked_lookup_advisor
|
data/spec/factories/firm.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
FactoryGirl.define do
|
2
2
|
sequence(:registered_name) { |n| "Financial Advice #{n} Ltd." }
|
3
3
|
|
4
|
-
factory :firm, aliases: [:publishable_firm] do
|
4
|
+
factory :firm, aliases: [:publishable_firm, :onboarded_firm] do
|
5
5
|
fca_number
|
6
6
|
registered_name
|
7
7
|
email_address { Faker::Internet.email }
|
@@ -34,24 +34,27 @@ FactoryGirl.define do
|
|
34
34
|
firm.reload
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
transient do
|
38
38
|
advisers_count 1
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
after(:create) do |firm, evaluator|
|
42
|
+
create_list(:adviser, evaluator.advisers_count, firm: firm)
|
43
|
+
end
|
42
44
|
|
43
45
|
factory :trading_name, aliases: [:subsidiary] do
|
44
46
|
parent factory: Firm
|
45
47
|
end
|
46
48
|
|
47
49
|
factory :firm_with_advisers, traits: [:with_advisers]
|
50
|
+
factory :firm_without_advisers, traits: [:without_advisers]
|
48
51
|
factory :firm_with_offices, traits: [:with_offices]
|
49
52
|
factory :firm_with_principal, traits: [:with_principal]
|
50
53
|
factory :firm_with_no_business_split, traits: [:with_no_business_split]
|
51
54
|
factory :firm_with_remote_advice, traits: [:with_remote_advice]
|
52
55
|
factory :firm_with_subsidiaries, traits: [:with_trading_names]
|
53
56
|
factory :firm_with_trading_names, traits: [:with_trading_names]
|
54
|
-
factory :invalid_firm, traits: [:invalid]
|
57
|
+
factory :invalid_firm, traits: [:invalid], aliases: [:not_onboarded_firm]
|
55
58
|
|
56
59
|
trait :invalid do
|
57
60
|
email_address nil
|
@@ -67,13 +70,11 @@ FactoryGirl.define do
|
|
67
70
|
end
|
68
71
|
|
69
72
|
trait :with_advisers do
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
+
advisers_count 3
|
74
|
+
end
|
73
75
|
|
74
|
-
|
75
|
-
|
76
|
-
end
|
76
|
+
trait :without_advisers do
|
77
|
+
advisers_count 0
|
77
78
|
end
|
78
79
|
|
79
80
|
trait :with_principal do
|
data/spec/models/adviser_spec.rb
CHANGED
@@ -154,6 +154,23 @@ RSpec.describe Adviser do
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
|
+
describe 'after_save :flag_changes_for_after_commit' do
|
158
|
+
let(:original_firm) { create(:firm) }
|
159
|
+
let(:receiving_firm) { create(:firm) }
|
160
|
+
subject { create(:adviser, firm: original_firm) }
|
161
|
+
|
162
|
+
before do
|
163
|
+
subject.firm = receiving_firm
|
164
|
+
subject.save!
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'when the firm has changed' do
|
168
|
+
it 'stores the original firm id so it can be reindexed in an after_commit hook' do
|
169
|
+
expect(subject.old_firm_id).to eq(original_firm.id)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
157
174
|
describe 'after_commit :reindex_old_firm' do
|
158
175
|
let(:original_firm) { create(:firm) }
|
159
176
|
let(:receiving_firm) { create(:firm) }
|
@@ -165,19 +182,19 @@ RSpec.describe Adviser do
|
|
165
182
|
end
|
166
183
|
|
167
184
|
context 'when the firm has changed' do
|
168
|
-
it 'triggers reindexing of the
|
185
|
+
it 'triggers reindexing of the adviser and new firm' do
|
186
|
+
expect(GeocodeAdviserJob).to receive(:perform_later).with(subject)
|
169
187
|
subject.firm = receiving_firm
|
170
188
|
save_with_commit_callback(subject)
|
171
|
-
expect(queue_contains_a_job_for(IndexFirmJob)).to be_truthy
|
172
189
|
end
|
173
190
|
|
174
|
-
it '
|
191
|
+
it 'triggers reindexing of the original firm (once)' do
|
192
|
+
expect(IndexFirmJob).to receive(:perform_later).once().with(original_firm)
|
175
193
|
subject.firm = receiving_firm
|
176
194
|
save_with_commit_callback(subject)
|
177
195
|
|
178
|
-
|
196
|
+
# Trigger a second time
|
179
197
|
subject.run_callbacks(:commit)
|
180
|
-
expect(queue_contains_a_job_for(IndexFirmJob)).to be_falsey
|
181
198
|
end
|
182
199
|
end
|
183
200
|
end
|
@@ -229,10 +246,12 @@ RSpec.describe Adviser do
|
|
229
246
|
|
230
247
|
describe '#on_firms_with_fca_number' do
|
231
248
|
it 'returns advisers on firm and its trading names' do
|
232
|
-
firm = FactoryGirl.create(:
|
233
|
-
trading_name = FactoryGirl.create(:trading_name,
|
234
|
-
|
235
|
-
|
249
|
+
firm = FactoryGirl.create(:firm_with_advisers, advisers_count: 1)
|
250
|
+
trading_name = FactoryGirl.create(:trading_name,
|
251
|
+
:with_advisers,
|
252
|
+
advisers_count: 1,
|
253
|
+
fca_number: firm.fca_number)
|
254
|
+
advisers = [firm.advisers.first, trading_name.advisers.first]
|
236
255
|
|
237
256
|
returned_advisers = Adviser.on_firms_with_fca_number(firm.fca_number)
|
238
257
|
expect(returned_advisers.length).to eq(2)
|
@@ -23,13 +23,13 @@ RSpec.describe 'Firm factory' do
|
|
23
23
|
specify 'associations' do
|
24
24
|
expect(subject.principal).not_to be_present
|
25
25
|
expect(subject).to have(1).offices
|
26
|
-
expect(subject).to have(
|
26
|
+
expect(subject).to have(1).advisers
|
27
27
|
expect(subject).to have(:no).trading_names
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
describe 'factory :
|
32
|
-
let(:factory) { :
|
31
|
+
describe 'factory :firm_with_advisers' do
|
32
|
+
let(:factory) { :firm_with_advisers }
|
33
33
|
|
34
34
|
specify 'expected status' do
|
35
35
|
expect(subject).to be_persisted
|
@@ -42,37 +42,18 @@ RSpec.describe 'Firm factory' do
|
|
42
42
|
specify 'associations' do
|
43
43
|
expect(subject.principal).not_to be_present
|
44
44
|
expect(subject).to have(1).offices
|
45
|
-
expect(subject).to have(
|
46
|
-
expect(subject).to have(:no).trading_names
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe 'factory :not_onboarded_firm' do
|
51
|
-
let(:factory) { :not_onboarded_firm }
|
52
|
-
|
53
|
-
specify 'expected status' do
|
54
|
-
expect(subject).not_to be_persisted
|
55
|
-
expect(subject).not_to be_valid
|
56
|
-
expect(subject).not_to be_publishable
|
57
|
-
expect(subject).not_to be_trading_name
|
58
|
-
expect(subject.primary_advice_method).to be(:local)
|
59
|
-
end
|
60
|
-
|
61
|
-
specify 'associations' do
|
62
|
-
expect(subject.principal).not_to be_present
|
63
|
-
expect(subject).to have(:no).offices
|
64
|
-
expect(subject).to have(:no).advisers
|
45
|
+
expect(subject).to have(3).advisers
|
65
46
|
expect(subject).to have(:no).trading_names
|
66
47
|
end
|
67
48
|
end
|
68
49
|
|
69
|
-
describe 'factory :
|
70
|
-
let(:factory) { :
|
50
|
+
describe 'factory :firm_without_advisers' do
|
51
|
+
let(:factory) { :firm_without_advisers }
|
71
52
|
|
72
53
|
specify 'expected status' do
|
73
54
|
expect(subject).to be_persisted
|
74
55
|
expect(subject).to be_valid
|
75
|
-
expect(subject).
|
56
|
+
expect(subject).not_to be_publishable
|
76
57
|
expect(subject).not_to be_trading_name
|
77
58
|
expect(subject.primary_advice_method).to be(:local)
|
78
59
|
end
|
@@ -80,7 +61,7 @@ RSpec.describe 'Firm factory' do
|
|
80
61
|
specify 'associations' do
|
81
62
|
expect(subject.principal).not_to be_present
|
82
63
|
expect(subject).to have(1).offices
|
83
|
-
expect(subject).to have(
|
64
|
+
expect(subject).to have(0).advisers
|
84
65
|
expect(subject).to have(:no).trading_names
|
85
66
|
end
|
86
67
|
end
|
@@ -99,7 +80,7 @@ RSpec.describe 'Firm factory' do
|
|
99
80
|
specify 'associations' do
|
100
81
|
expect(subject.principal).not_to be_present
|
101
82
|
expect(subject).to have(3).offices
|
102
|
-
expect(subject).to have(
|
83
|
+
expect(subject).to have(1).advisers
|
103
84
|
expect(subject).to have(:no).trading_names
|
104
85
|
end
|
105
86
|
end
|
@@ -118,7 +99,7 @@ RSpec.describe 'Firm factory' do
|
|
118
99
|
specify 'associations' do
|
119
100
|
expect(subject.principal).not_to be_present
|
120
101
|
expect(subject).to have(1).offices
|
121
|
-
expect(subject).to have(
|
102
|
+
expect(subject).to have(1).advisers
|
122
103
|
|
123
104
|
expect(subject).to have(3).trading_names
|
124
105
|
expect(subject.trading_names).to all(have_attributes(fca_number: subject.fca_number))
|
@@ -146,7 +127,7 @@ RSpec.describe 'Firm factory' do
|
|
146
127
|
# expect(subject.principal.firm).to eq(subject)
|
147
128
|
|
148
129
|
expect(subject).to have(1).offices
|
149
|
-
expect(subject).to have(
|
130
|
+
expect(subject).to have(1).advisers
|
150
131
|
expect(subject).to have(:no).trading_names
|
151
132
|
end
|
152
133
|
end
|
@@ -165,7 +146,7 @@ RSpec.describe 'Firm factory' do
|
|
165
146
|
specify 'associations' do
|
166
147
|
expect(subject.principal).not_to be_present
|
167
148
|
expect(subject).to have(1).offices
|
168
|
-
expect(subject).to have(
|
149
|
+
expect(subject).to have(1).advisers
|
169
150
|
expect(subject).to have(:no).trading_names
|
170
151
|
end
|
171
152
|
end
|
data/spec/models/firm_spec.rb
CHANGED
@@ -117,16 +117,65 @@ RSpec.describe Firm do
|
|
117
117
|
end
|
118
118
|
|
119
119
|
describe '#publishable?' do
|
120
|
-
|
120
|
+
let(:firm) { FactoryGirl.create(:firm) }
|
121
|
+
subject { firm.publishable? }
|
122
|
+
|
123
|
+
context 'when the firm is valid, has a main office and is not missing advisers' do
|
124
|
+
it { is_expected.to be_truthy }
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'when the firm is not valid' do
|
128
|
+
let(:firm) do
|
129
|
+
FactoryGirl.create(:firm).tap do |f|
|
130
|
+
f.email_address = nil
|
131
|
+
f.save(validate: false)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
it { is_expected.to be_falsey }
|
136
|
+
end
|
121
137
|
|
122
138
|
context 'when the firm has no main office' do
|
123
|
-
let(:
|
124
|
-
|
139
|
+
let(:firm) { FactoryGirl.create(:firm, offices_count: 0) }
|
140
|
+
|
141
|
+
it { is_expected.to be_falsey }
|
125
142
|
end
|
126
143
|
|
127
|
-
context 'when the firm
|
128
|
-
|
129
|
-
|
144
|
+
context 'when the firm is missing advisers' do
|
145
|
+
before { allow(firm).to receive(:missing_advisers?).and_return(true) }
|
146
|
+
|
147
|
+
it { is_expected.to be_falsey }
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
describe '#missing_advisers?' do
|
152
|
+
let(:factory) { :firm }
|
153
|
+
subject { FactoryGirl.create(factory, advisers_count: advisers_count).missing_advisers? }
|
154
|
+
|
155
|
+
context 'when the firm offers face-to-face advice' do
|
156
|
+
context 'when the firm has advisers' do
|
157
|
+
let(:advisers_count) { 1 }
|
158
|
+
it { is_expected.to be_falsey }
|
159
|
+
end
|
160
|
+
|
161
|
+
context 'when the firm has no advisers' do
|
162
|
+
let(:advisers_count) { 0 }
|
163
|
+
it { is_expected.to be_truthy }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'when the firm offers remote advice' do
|
168
|
+
let(:factory) { :firm_with_remote_advice }
|
169
|
+
|
170
|
+
context 'when the firm has advisers' do
|
171
|
+
let(:advisers_count) { 1 }
|
172
|
+
it { is_expected.to be_falsey }
|
173
|
+
end
|
174
|
+
|
175
|
+
context 'when the firm has no advisers' do
|
176
|
+
let(:advisers_count) { 0 }
|
177
|
+
it { is_expected.to be_falsey }
|
178
|
+
end
|
130
179
|
end
|
131
180
|
end
|
132
181
|
|
@@ -395,6 +444,7 @@ RSpec.describe Firm do
|
|
395
444
|
it 'the firm is published' do
|
396
445
|
allow(IndexFirmJob).to receive(:perform_later)
|
397
446
|
firm = create :firm
|
447
|
+
firm.run_callbacks(:commit)
|
398
448
|
expect(IndexFirmJob).to have_received(:perform_later).with(firm)
|
399
449
|
end
|
400
450
|
end
|
@@ -404,6 +454,7 @@ RSpec.describe Firm do
|
|
404
454
|
firm = create :firm
|
405
455
|
allow(IndexFirmJob).to receive(:perform_later)
|
406
456
|
firm.update_attributes(email_address: 'bill@example.com')
|
457
|
+
firm.run_callbacks(:commit)
|
407
458
|
expect(IndexFirmJob).to have_received(:perform_later).with(firm)
|
408
459
|
end
|
409
460
|
end
|
@@ -476,8 +527,9 @@ RSpec.describe Firm do
|
|
476
527
|
firm.run_callbacks(:commit)
|
477
528
|
end
|
478
529
|
|
479
|
-
it 'does not trigger geocoding of the firm' do
|
530
|
+
it 'does not trigger geocoding/reindexing of the firm' do
|
480
531
|
expect(GeocodeFirmJob).not_to receive(:perform_later)
|
532
|
+
expect(IndexFirmJob).not_to receive(:perform_later)
|
481
533
|
adviser = firm.advisers.first
|
482
534
|
office = firm.offices.first
|
483
535
|
firm.destroy
|
@@ -325,7 +325,7 @@ RSpec.describe Principal do
|
|
325
325
|
|
326
326
|
context 'when principal has a parent firm and a trading name' do
|
327
327
|
let(:parent_firm) { principal.firm }
|
328
|
-
let!(:trading_name) { create(:
|
328
|
+
let!(:trading_name) { create(:firm_without_advisers, registered_name: 'cabbage', parent_id: parent_firm.id, fca_number: principal.fca_number) }
|
329
329
|
|
330
330
|
before :each do
|
331
331
|
parent_firm.update_column(:email_address, 'acme@example.com')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mas-rad_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.80
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Lovell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|