Skip to content

Commit 64751e3

Browse files
committed
Update vaccination record to nhs immunisations api
Jira-Issue: MAV-1012
1 parent 35c51ea commit 64751e3

2 files changed

Lines changed: 88 additions & 18 deletions

File tree

app/jobs/sync_vaccination_record_to_nhs_job.rb

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,30 @@
33
class SyncVaccinationRecordToNHSJob < ApplicationJob
44
queue_as :immunisation_api
55

6+
retry_on Faraday::ServerError, wait: :polynomially_longer
7+
68
def perform(vaccination_record)
7-
if vaccination_record.nhs_immunisations_api_synced_at.present?
8-
Rails.logger.info(
9-
"Vaccination record already synced: #{vaccination_record.id}"
10-
)
11-
return
9+
if vaccination_record.not_administered?
10+
# TODO: This will be a delete
11+
raise "Vaccination record is not administered: #{vaccination_record.id}"
12+
end
13+
14+
if vaccination_record.discarded?
15+
# TODO: This will be a delete
16+
raise "Vaccination record is discarded: #{vaccination_record.id}"
1217
end
1318

14-
NHS::ImmunisationsAPI.record_immunisation(vaccination_record)
19+
last_synced_at = vaccination_record.nhs_immunisations_api_synced_at
20+
if last_synced_at.present?
21+
if last_synced_at > vaccination_record.updated_at
22+
Rails.logger.info(
23+
"Vaccination record already synced: #{vaccination_record.id}"
24+
)
25+
else
26+
NHS::ImmunisationsAPI.update_immunisation(vaccination_record)
27+
end
28+
else
29+
NHS::ImmunisationsAPI.record_immunisation(vaccination_record)
30+
end
1531
end
1632
end

spec/jobs/sync_vaccination_record_to_nhs_job_spec.rb

Lines changed: 66 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
describe SyncVaccinationRecordToNHSJob, type: :job do
44
subject(:perform_now) { described_class.perform_now(vaccination_record) }
55

6-
before { allow(NHS::ImmunisationsAPI).to receive(:record_immunisation) }
6+
before do
7+
allow(NHS::ImmunisationsAPI).to receive(:record_immunisation)
8+
allow(NHS::ImmunisationsAPI).to receive(:update_immunisation)
9+
end
710

11+
let(:nhs_immunisations_api_synced_at) { nil }
812
let(:vaccination_record) do
9-
instance_double(
10-
VaccinationRecord,
11-
id: "123",
12-
nhs_immunisations_api_synced_at: nil
13-
)
13+
create(:vaccination_record, id: 123, nhs_immunisations_api_synced_at:)
1414
end
1515

1616
it "sends the vaccination record to the NHS Immunisations API" do
@@ -21,14 +21,20 @@
2121
)
2222
end
2323

24-
context "when the vaccination record has already been synced" do
25-
let(:vaccination_record) do
26-
instance_double(
27-
VaccinationRecord,
28-
id: "123",
29-
nhs_immunisations_api_synced_at: Time.current
24+
context "when the vaccination record has been synced before" do
25+
let(:nhs_immunisations_api_synced_at) { 1.second.ago }
26+
27+
it "updates the vaccination record with the NHS Immunisations API" do
28+
perform_now
29+
30+
expect(NHS::ImmunisationsAPI).to have_received(:update_immunisation).with(
31+
vaccination_record
3032
)
3133
end
34+
end
35+
36+
context "when the vaccination record is already in-sync" do
37+
let(:nhs_immunisations_api_synced_at) { 1.second.from_now }
3238

3339
it "does not send the vaccination record to the NHS Immunisations API" do
3440
perform_now
@@ -46,4 +52,52 @@
4652
)
4753
end
4854
end
55+
56+
context "when the vaccination record has been discarded" do
57+
let(:vaccination_record) do
58+
create(:vaccination_record, :discarded, id: 123)
59+
end
60+
61+
it "does not send the vaccination record to the NHS Immunisations API" do
62+
begin
63+
perform_now
64+
rescue StandardError
65+
nil
66+
end
67+
68+
expect(NHS::ImmunisationsAPI).not_to have_received(:record_immunisation)
69+
end
70+
71+
it "raises an error" do
72+
expect { perform_now }.to raise_error(
73+
"Vaccination record is discarded: #{vaccination_record.id}"
74+
)
75+
end
76+
end
77+
78+
VaccinationRecord.defined_enums["outcome"].each_key do |outcome|
79+
next if outcome == "administered"
80+
81+
context "when the vaccination record outcome is #{outcome}" do
82+
let(:vaccination_record) do
83+
create(:vaccination_record, id: 123, outcome:)
84+
end
85+
86+
it "does not send the vaccination record to the NHS Immunisations API" do
87+
begin
88+
perform_now
89+
rescue StandardError
90+
nil
91+
end
92+
93+
expect(NHS::ImmunisationsAPI).not_to have_received(:record_immunisation)
94+
end
95+
96+
it "raises an error" do
97+
expect { perform_now }.to raise_error(
98+
"Vaccination record is not administered: #{vaccination_record.id}"
99+
)
100+
end
101+
end
102+
end
49103
end

0 commit comments

Comments
 (0)