2024-04-29 00:17:15 +02:00
|
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
2016-02-08 18:16:18 +01:00
|
|
|
|
describe Invite do
|
|
|
|
|
describe 'an email can be used for multiple dossier' do
|
|
|
|
|
let(:email1) { 'plop@octo.com' }
|
|
|
|
|
|
|
|
|
|
let!(:dossier1) { create(:dossier) }
|
|
|
|
|
let!(:dossier2) { create(:dossier) }
|
|
|
|
|
|
|
|
|
|
context 'when an email is invite on two dossier' do
|
|
|
|
|
subject do
|
|
|
|
|
create(:invite, email: email1, dossier: dossier1)
|
|
|
|
|
create(:invite, email: email1, dossier: dossier2)
|
|
|
|
|
end
|
|
|
|
|
|
2018-12-24 17:28:20 +01:00
|
|
|
|
it { expect { subject }.to change(Invite, :count).by(2) }
|
2016-02-08 18:16:18 +01:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when an email is invite twice on a dossier' do
|
|
|
|
|
subject do
|
|
|
|
|
create(:invite, email: email1, dossier: dossier1)
|
|
|
|
|
create(:invite, email: email1, dossier: dossier1)
|
|
|
|
|
end
|
|
|
|
|
|
2018-12-24 17:28:20 +01:00
|
|
|
|
it { expect { subject }.to raise_error ActiveRecord::RecordInvalid }
|
2016-02-08 18:16:18 +01:00
|
|
|
|
end
|
2018-02-26 14:51:25 +01:00
|
|
|
|
|
|
|
|
|
context "email validation" do
|
|
|
|
|
let(:invite) { build(:invite, email: email, dossier: dossier1) }
|
|
|
|
|
|
|
|
|
|
context 'when an email is invalid' do
|
|
|
|
|
let(:email) { 'toto.fr' }
|
|
|
|
|
|
|
|
|
|
it do
|
|
|
|
|
expect(invite.save).to be false
|
2024-07-25 12:14:52 +02:00
|
|
|
|
expect(invite.errors.full_messages).to eq(["Le champ « Email » est invalide. Saisir une adresse électronique valide, exemple : adresse@mail.com"])
|
2018-02-26 14:51:25 +01:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when an email is empty' do
|
|
|
|
|
let(:email) { nil }
|
|
|
|
|
|
|
|
|
|
it do
|
|
|
|
|
expect(invite.save).to be false
|
2022-12-20 17:51:36 +01:00
|
|
|
|
expect(invite.errors.full_messages).to eq(["Le champ « Email » doit être rempli"])
|
2018-02-26 14:51:25 +01:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'when an email is valid' do
|
|
|
|
|
let(:email) { 'toto@toto.fr' }
|
|
|
|
|
|
|
|
|
|
it do
|
|
|
|
|
expect(invite.save).to be true
|
|
|
|
|
expect(invite.errors.full_messages).to eq([])
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2016-02-08 18:16:18 +01:00
|
|
|
|
end
|
2018-03-14 18:57:56 +01:00
|
|
|
|
|
2022-10-04 11:41:32 +02:00
|
|
|
|
describe 'association' do
|
|
|
|
|
let!(:invite) { create(:invite, email: "email@totor.com") }
|
|
|
|
|
let!(:target_user_link) { create(:targeted_user_link, target_model: invite, target_context: 'invite') }
|
|
|
|
|
it 'destroy target_user_link' do
|
|
|
|
|
expect { invite.destroy! }.to change { TargetedUserLink.count }.from(1).to(0)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2018-03-14 18:57:56 +01:00
|
|
|
|
describe "#default_scope" do
|
2022-03-09 10:29:16 +01:00
|
|
|
|
let!(:dossier) { create(:dossier, hidden_by_user_at: hidden_by_user_at) }
|
2018-03-14 18:57:56 +01:00
|
|
|
|
let!(:invite) { create(:invite, email: "email@totor.com", dossier: dossier) }
|
|
|
|
|
|
2020-02-05 16:09:03 +01:00
|
|
|
|
context "when dossier is not discarded" do
|
2022-03-09 10:29:16 +01:00
|
|
|
|
let(:hidden_by_user_at) { nil }
|
2018-03-14 18:57:56 +01:00
|
|
|
|
|
|
|
|
|
it { expect(Invite.count).to eq(1) }
|
|
|
|
|
it { expect(Invite.all).to include(invite) }
|
|
|
|
|
end
|
|
|
|
|
|
2020-02-05 16:09:03 +01:00
|
|
|
|
context "when dossier is discarded" do
|
2022-03-09 10:29:16 +01:00
|
|
|
|
let(:hidden_by_user_at) { 1.hour.ago }
|
2018-03-14 18:57:56 +01:00
|
|
|
|
|
|
|
|
|
it { expect(Invite.count).to eq(0) }
|
|
|
|
|
end
|
|
|
|
|
end
|
2017-04-04 15:27:04 +02:00
|
|
|
|
end
|