Skip to content

Commit 109b3ae

Browse files
committed
fix validation to not allow event_procedure to have patient with different user
1 parent 93ffbae commit 109b3ae

File tree

2 files changed

+52
-11
lines changed

2 files changed

+52
-11
lines changed

app/models/event_procedure.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,15 @@ class EventProcedure < ApplicationRecord
3131
validates :room_type, presence: true, if: -> { health_insurance? }
3232
validates :urgency, inclusion: [true, false], if: -> { health_insurance? }
3333
validates :payment, presence: true
34+
35+
validate :unique_user
36+
37+
private
38+
39+
def unique_user
40+
return unless patient.present? && user.present?
41+
return if user == patient.user
42+
43+
errors.add(:base, "The patient must be associated with the same procedure user")
44+
end
3445
end

spec/models/event_procedure_spec.rb

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,30 @@
44

55
RSpec.describe EventProcedure do
66
describe "acts_as_paranoid" do
7-
it "soft deletes the record" do
8-
event_procedure = create(:event_procedure)
7+
let(:user) { create(:user) }
8+
let(:patient) { create(:patient, user: user) }
9+
let(:event_procedure) { create(:event_procedure, user: user, patient: patient) }
910

11+
it "soft deletes the record" do
1012
event_procedure.destroy
1113

1214
expect(event_procedure.deleted_at).to be_present
1315
expect(described_class.with_deleted).to include(event_procedure)
1416
end
1517

1618
it "does not include the record in the default scope" do
17-
event_procedure = create(:event_procedure)
18-
1919
event_procedure.destroy
2020

2121
expect(described_class.all).not_to include(event_procedure)
2222
end
2323

2424
it "includes the record in the default scope when with_deleted is called" do
25-
event_procedure = create(:event_procedure)
26-
2725
event_procedure.destroy
2826

2927
expect(described_class.with_deleted).to include(event_procedure)
3028
end
3129

3230
it "restores a soft deleted record" do
33-
event_procedure = create(:event_procedure)
34-
3531
event_procedure.destroy
3632
event_procedure.recover!
3733

@@ -54,6 +50,27 @@
5450
it { is_expected.to validate_presence_of(:patient_service_number) }
5551
it { is_expected.to validate_presence_of(:room_type) }
5652
it { is_expected.to validate_presence_of(:payment) }
53+
54+
context "when patient belongs to a different user" do
55+
it "is invalid when has different users" do
56+
user = create(:user)
57+
other_user = create(:user)
58+
patient = create(:patient, user: other_user)
59+
60+
event_procedure = build(:event_procedure, user: user, patient: patient)
61+
62+
expect(event_procedure).not_to be_valid
63+
expect(event_procedure.errors[:base]).to include("The patient must be associated with the same procedure user")
64+
end
65+
66+
it "is valid when has equal user" do
67+
user = create(:user)
68+
patient = create(:patient, user: user)
69+
event_procedure = build(:event_procedure, user: user, patient: patient)
70+
71+
expect(event_procedure).to be_valid
72+
end
73+
end
5774
end
5875

5976
describe ".enumerations" do
@@ -75,9 +92,14 @@
7592
end
7693

7794
describe "nested attributes for patient" do
95+
let(:user) { create(:user) }
96+
7897
context "when patient_attributes are provided" do
7998
it "creates patient" do
80-
event_procedure = build(:event_procedure, patient_attributes: { id: nil, name: "John Doe" })
99+
event_procedure = build(
100+
:event_procedure, user: user,
101+
patient_attributes: { name: "John Doe", user_id: user.id }
102+
)
81103

82104
expect { event_procedure.save }.to change(Patient, :count).by(1)
83105
expect(event_procedure.patient).to be_persisted
@@ -99,6 +121,7 @@
99121
context "when procedure_attributes are provided" do
100122
it "creates procedure" do
101123
user = create(:user)
124+
patient = create(:patient, user: user)
102125
procedure_attributes = {
103126
id: nil,
104127
name: "procedure name",
@@ -108,7 +131,10 @@
108131
custom: true,
109132
user_id: user.id
110133
}
111-
event_procedure = build(:event_procedure, procedure_attributes: procedure_attributes)
134+
event_procedure = build(
135+
:event_procedure, user: user, patient: patient,
136+
procedure_attributes: procedure_attributes
137+
)
112138

113139
expect { event_procedure.save }.to change(Procedure, :count).by(1)
114140
expect(event_procedure.procedure).to be_persisted
@@ -142,13 +168,17 @@
142168
context "when health_insurance_attributes are provided" do
143169
it "creates health_insurance" do
144170
user = create(:user)
171+
patient = create(:patient, user: user)
145172
health_insurance_attributes = {
146173
id: nil,
147174
name: "health_insurance name",
148175
custom: true,
149176
user_id: user.id
150177
}
151-
event_procedure = build(:event_procedure, health_insurance_attributes: health_insurance_attributes)
178+
event_procedure = build(
179+
:event_procedure, user: user, patient: patient,
180+
health_insurance_attributes: health_insurance_attributes
181+
)
152182

153183
expect { event_procedure.save }.to change(HealthInsurance, :count).by(1)
154184
expect(event_procedure.health_insurance).to be_persisted

0 commit comments

Comments
 (0)