Skip to content
Merged
11 changes: 11 additions & 0 deletions app/models/event_procedure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,15 @@ class EventProcedure < ApplicationRecord
validates :room_type, presence: true, if: -> { health_insurance? }
validates :urgency, inclusion: [true, false], if: -> { health_insurance? }
validates :payment, presence: true

validate :unique_user

private

def unique_user
return unless patient.present? && user.present?
return if user == patient.user

errors.add(:base, "The patient must be associated with the same procedure user")
end
end
52 changes: 41 additions & 11 deletions spec/models/event_procedure_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,30 @@

RSpec.describe EventProcedure do
describe "acts_as_paranoid" do
it "soft deletes the record" do
event_procedure = create(:event_procedure)
let(:user) { create(:user) }
let(:patient) { create(:patient, user: user) }
let(:event_procedure) { create(:event_procedure, user: user, patient: patient) }

it "soft deletes the record" do
event_procedure.destroy

expect(event_procedure.deleted_at).to be_present
expect(described_class.with_deleted).to include(event_procedure)
end

it "does not include the record in the default scope" do
event_procedure = create(:event_procedure)

event_procedure.destroy

expect(described_class.all).not_to include(event_procedure)
end

it "includes the record in the default scope when with_deleted is called" do
event_procedure = create(:event_procedure)

event_procedure.destroy

expect(described_class.with_deleted).to include(event_procedure)
end

it "restores a soft deleted record" do
event_procedure = create(:event_procedure)

event_procedure.destroy
event_procedure.recover!

Expand All @@ -54,6 +50,27 @@
it { is_expected.to validate_presence_of(:patient_service_number) }
it { is_expected.to validate_presence_of(:room_type) }
it { is_expected.to validate_presence_of(:payment) }

context "when patient belongs to a different user" do
it "is invalid when has different users" do
user = create(:user)
other_user = create(:user)
patient = create(:patient, user: other_user)

event_procedure = build(:event_procedure, user: user, patient: patient)

expect(event_procedure).not_to be_valid
expect(event_procedure.errors[:base]).to include("The patient must be associated with the same procedure user")
end

it "is valid when has equal user" do
user = create(:user)
patient = create(:patient, user: user)
event_procedure = build(:event_procedure, user: user, patient: patient)

expect(event_procedure).to be_valid
end
end
end

describe ".enumerations" do
Expand All @@ -75,9 +92,14 @@
end

describe "nested attributes for patient" do
let(:user) { create(:user) }

context "when patient_attributes are provided" do
it "creates patient" do
event_procedure = build(:event_procedure, patient_attributes: { id: nil, name: "John Doe" })
event_procedure = build(
:event_procedure, user: user,
patient_attributes: { name: "John Doe", user_id: user.id }
)

expect { event_procedure.save }.to change(Patient, :count).by(1)
expect(event_procedure.patient).to be_persisted
Expand All @@ -99,6 +121,7 @@
context "when procedure_attributes are provided" do
it "creates procedure" do
user = create(:user)
patient = create(:patient, user: user)
procedure_attributes = {
id: nil,
name: "procedure name",
Expand All @@ -108,7 +131,10 @@
custom: true,
user_id: user.id
}
event_procedure = build(:event_procedure, procedure_attributes: procedure_attributes)
event_procedure = build(
:event_procedure, user: user, patient: patient,
procedure_attributes: procedure_attributes
)

expect { event_procedure.save }.to change(Procedure, :count).by(1)
expect(event_procedure.procedure).to be_persisted
Expand Down Expand Up @@ -142,13 +168,17 @@
context "when health_insurance_attributes are provided" do
it "creates health_insurance" do
user = create(:user)
patient = create(:patient, user: user)
health_insurance_attributes = {
id: nil,
name: "health_insurance name",
custom: true,
user_id: user.id
}
event_procedure = build(:event_procedure, health_insurance_attributes: health_insurance_attributes)
event_procedure = build(
:event_procedure, user: user, patient: patient,
health_insurance_attributes: health_insurance_attributes
)

expect { event_procedure.save }.to change(HealthInsurance, :count).by(1)
expect(event_procedure.health_insurance).to be_persisted
Expand Down
Loading