Skip to content

Commit 9bf4dbf

Browse files
committed
Test updates
1 parent b4deb1c commit 9bf4dbf

1 file changed

Lines changed: 26 additions & 35 deletions

File tree

spec/jobs/salesforce/school_sync_job_spec.rb

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,77 +5,68 @@
55
RSpec.describe Salesforce::SchoolSyncJob do
66
subject(:perform_job) { described_class.perform_now(school_id: school.id) }
77

8-
context 'when the job has run' do
9-
let(:school) { create(:school) }
10-
let(:sf_school) { Salesforce::School.find(school.id) }
8+
let(:school) { create(:school) }
9+
let(:sf_school) { instance_double(Salesforce::School) }
10+
let(:synced_attributes) { {} }
11+
12+
before do
13+
allow(Salesforce::School).to receive(:find_or_initialize_by).with(editoruuid__c: school.id).and_return(sf_school)
14+
allow(sf_school).to receive(:attributes=) { |attrs| synced_attributes.merge!(attrs) }
15+
allow(sf_school).to receive(:save!)
16+
end
1117

18+
context 'when the job has run' do
1219
before { perform_job }
1320

14-
it 'syncs the standard mappings' do
15-
described_class::FIELD_MAPPINGS.each do |sf_field, field|
16-
sf_value = sf_school.send(sf_field)
17-
school_value = school.send(field)
18-
column = Salesforce::School.column_for_attribute(sf_field)
19-
ar_type = Salesforce::School.type_for_attribute(sf_field.to_s)
20-
21-
expected = if school_value.is_a?(String) && column.limit
22-
school_value.truncate(column.limit, omission: '…')
23-
else
24-
ar_type.cast(school_value)
25-
end
26-
27-
expect(sf_value).to eq(expected), "Expected #{sf_field} to be #{expected.inspect} but was #{sf_value.inspect}"
21+
it 'syncs all FIELD_MAPPINGS to the correct school values' do
22+
described_class::FIELD_MAPPINGS.each do |sf_field, school_field|
23+
expect(synced_attributes[sf_field]).to eq(school.send(school_field)),
24+
"Expected #{sf_field} to equal school.#{school_field}"
2825
end
2926
end
3027

31-
context 'when address fields are very long' do
32-
let(:max_field_size) { Salesforce::School.column_for_attribute(:addressline1__c).limit }
33-
let(:school) { create(:school, address_line_1: '❌' * (max_field_size + 10)) }
28+
it 'saves the Salesforce record' do
29+
expect(sf_school).to have_received(:save!)
30+
end
31+
32+
context 'when an address field is very long' do
33+
let(:school) { create(:school, address_line_1: '❌' * 300) }
3434

35-
it 'truncates addressline1__c to the max field length' do
36-
expect(sf_school.addressline1__c.size).to be <= max_field_size
35+
it 'truncates addressline1__c' do
36+
expect(synced_attributes[:addressline1__c]).to end_with('…')
37+
expect(synced_attributes[:addressline1__c].length).to be < school.address_line_1.length
3738
end
3839
end
3940

4041
context 'when the school is verified' do
4142
let(:school) { create(:verified_school) }
4243

4344
it 'syncs verifiedat__c' do
44-
expect(sf_school.verifiedat__c).to eq(school.verified_at)
45+
expect(synced_attributes[:verifiedat__c]).to eq(school.verified_at)
4546
end
4647
end
4748

4849
context 'when the school is rejected' do
4950
let(:school) { create(:school, rejected_at: Time.current) }
5051

5152
it 'syncs rejectedat__c' do
52-
expect(sf_school.rejectedat__c).to eq(school.rejected_at)
53+
expect(synced_attributes[:rejectedat__c]).to eq(school.rejected_at)
5354
end
5455
end
5556
end
5657

5758
context 'when the Salesforce school fails to save' do
58-
let(:school) { create(:school) }
59-
let(:sf_school) { instance_double(Salesforce::School) }
60-
61-
before do
62-
allow(Salesforce::School).to receive(:find_or_initialize_by).with(editoruuid__c: school.id).and_return(sf_school)
63-
allow(sf_school).to receive(:attributes=)
64-
allow(sf_school).to receive(:save!).and_raise(ActiveRecord::RecordInvalid)
65-
end
59+
before { allow(sf_school).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) }
6660

6761
it 'raises an error' do
6862
expect { perform_job }.to raise_error ActiveRecord::RecordInvalid
6963
end
7064
end
7165

7266
context 'when SALESFORCE_ENABLED is false' do
73-
let(:school) { create(:school) }
74-
7567
before { stub_const('ENV', ENV.to_h.merge('SALESFORCE_ENABLED' => 'false')) }
7668

7769
it 'discards the job without syncing' do
78-
allow(Salesforce::School).to receive(:find_or_initialize_by)
7970
perform_job
8071
expect(Salesforce::School).not_to have_received(:find_or_initialize_by)
8172
end

0 commit comments

Comments
 (0)