Skip to content

Commit 5b15e86

Browse files
sc-17011 Bypass facility authorization validation for patient reassig… (#5715)
Bypass Facility Authorization Validation for Patient Reassignment **Story card:** [sc-17011](https://app.shortcut.com/simpledotorg/story/17011/bypass-facility-authorization-validation-for-patient-reassignment) ## Because The facility authorization validation was blocking patient reassignment. We need to skip this validation when `skip_facility_authorization: true` is set. ## This addresses Adds a flag to bypass facility authorization validation for patient reassignment. ## Test instructions 1. Create or reassign a patient to any facility. 2. Sync the data — the patient should disappear from the current facility. 3. Go to the assigned facility, sync first, and then verify that the patient appears in the list.
1 parent 3b0b239 commit 5b15e86

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

app/controllers/api/v3/patients_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def unscope_associations
4747
end
4848

4949
def merge_if_valid(single_patient_params)
50-
validator_params = single_patient_params.merge(request_user_id: current_user.id)
50+
validator_params = single_patient_params.merge(request_user_id: current_user.id, skip_facility_authorization: true)
5151
validator = Api::V3::PatientPayloadValidator.new(validator_params)
5252

5353
if validator.check_invalid?

spec/controllers/api/v3/patients_controller_spec.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,34 @@ def create_record_list(n, options = {})
134134
expect(Patient.count).to eq 1
135135
expect(Patient.first.registration_user).to eq request_user
136136
end
137+
138+
context "when skip_facility_authorization is set in merge_if_valid" do
139+
it "allows syncing patients with assigned facility from a different facility group" do
140+
registration_facility_group = create(:facility_group)
141+
assigned_facility_group = create(:facility_group)
142+
143+
registration_facility = create(:facility, facility_group: registration_facility_group)
144+
assigned_facility = create(:facility, facility_group: assigned_facility_group)
145+
146+
patient = build(
147+
:patient,
148+
registration_facility: registration_facility,
149+
assigned_facility: assigned_facility
150+
)
151+
152+
patient_payload = build_patient_payload(patient).merge(
153+
registration_facility_id: registration_facility.id,
154+
assigned_facility_id: assigned_facility.id
155+
)
156+
157+
post(:sync_from_user, params: {patients: [patient_payload]}, as: :json)
158+
159+
expect(response).to have_http_status(200)
160+
expect(Patient.count).to eq 1
161+
expect(Patient.first.registration_facility).to eq registration_facility
162+
expect(Patient.first.assigned_facility).to eq assigned_facility
163+
end
164+
end
137165
end
138166

139167
describe "updates patients" do

spec/validators/api/v3/patient_payload_validator_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,21 @@ def new_patient_payload(attrs = {})
128128
expect(valid_payload.valid?).to be true
129129
expect(invalid_payload.valid?).to be false
130130
end
131+
132+
context "when skip_facility_authorization is true" do
133+
it "skips assigned facility authorization validation" do
134+
invalid_facility_payload = build_patient_payload(patient).deep_merge(
135+
"assigned_facility_id" => invalid_facility.id,
136+
"request_user_id" => user.id,
137+
"skip_facility_authorization" => true
138+
)
139+
payload = Api::V3::PatientPayloadValidator.new(invalid_facility_payload)
140+
payload.validate
141+
142+
expect(payload.valid?).to be true
143+
expect(payload.errors[:assigned_facility_does_not_belong_to_user]).to be_blank
144+
end
145+
end
131146
end
132147

133148
context "when schema validations are disabled" do

0 commit comments

Comments
 (0)