demarches-normaliennes/spec/models/individual_spec.rb
2024-08-22 09:26:48 +02:00

78 lines
2.5 KiB
Ruby

# frozen_string_literal: true
describe Individual do
it { is_expected.to have_db_column(:gender) }
it { is_expected.to have_db_column(:nom) }
it { is_expected.to have_db_column(:prenom) }
it { is_expected.to belong_to(:dossier).required }
describe "#save" do
let(:individual) { build(:individual) }
subject do
individual.save
individual
end
context "with birthdate" do
before do
individual.birthdate = birthdate_from_user
end
context "and the format is dd/mm/yyy " do
let(:birthdate_from_user) { "12/11/1980" }
it { expect(subject.birthdate).to eq(Date.new(1980, 11, 12)) }
end
context "and the format is ISO" do
let(:birthdate_from_user) { "1980-11-12" }
it { expect(subject.birthdate).to eq(Date.new(1980, 11, 12)) }
end
context "and the format is WTF" do
let(:birthdate_from_user) { "1980 1 12" }
it { expect(subject.birthdate).to be_nil }
end
end
it "schedule index search terms" do
subject.dossier.debounce_index_search_terms_flag.remove
assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do
individual.update(nom: "new name")
end
end
end
describe 'validate_mandant_email' do
let(:user) { create(:user, email: 'mandataire@example.com') }
let(:dossier) { create(:dossier, :for_tiers_with_notification, user: user) }
let(:individual) { dossier.individual }
context 'when validating email' do
it 'is valid when email is different from the mandataire' do
individual.email = 'different@example.com'
expect(individual).to be_valid
end
it 'is invalid when email is the same as the mandataire' do
individual.email = 'mandataire@example.com'
expect(individual).not_to be_valid
expect(individual.errors[:email]).to include(
I18n.t('activerecord.errors.models.individual.attributes.email.must_be_different_from_mandataire')
)
end
it 'is valid when email is not required (notification_method is not email)' do
dossier_without_notification = create(:dossier, :for_tiers_without_notification, user: user)
individual_without_notification = dossier_without_notification.individual
expect(individual_without_notification).to be_valid
expect(individual_without_notification.email).to be_nil
expect(individual_without_notification.notification_method).to eq('no_notification')
end
end
end
end