expert can only revoke avis claimed by him/her

This commit is contained in:
Christophe Robillard 2020-07-16 20:42:50 +02:00
parent 3ea34834a7
commit 52e8f32e19
5 changed files with 66 additions and 11 deletions

View file

@ -132,25 +132,72 @@ RSpec.describe Avis, type: :model do
end
end
describe ".revoke!" do
describe ".revoke_by!" do
let(:claimant) { create(:instructeur) }
context "when no answer" do
let(:avis) { create(:avis) }
let(:avis) { create(:avis, claimant: claimant) }
it "supprime l'avis" do
avis.revoke!
avis.revoke_by!(claimant)
expect(avis).to be_destroyed
expect(Avis.count).to eq 0
end
end
context "with answer" do
let(:avis) { create(:avis, :with_answer) }
let(:avis) { create(:avis, :with_answer, claimant: claimant) }
it "revoque l'avis" do
avis.revoke!
avis.revoke_by!(claimant)
expect(avis).not_to be_destroyed
expect(avis).to be_revoked
end
end
context "by an instructeur who can't revoke" do
let(:avis) { create(:avis, :with_answer, claimant: claimant) }
let(:expert) { create(:instructeur) }
it "doesn't revoke avis and returns false" do
result = avis.revoke_by!(expert)
expect(result).to be_falsey
expect(avis).not_to be_destroyed
expect(avis).not_to be_revoked
end
end
end
describe "revokable_by?" do
let(:instructeur) { create(:instructeur) }
let(:instructeurs) { [instructeur] }
let(:procedure) { create(:procedure, :published, instructeurs: instructeurs) }
let(:dossier) { create(:dossier, :en_instruction, procedure: procedure) }
let(:claimant_expert) { create(:instructeur) }
let(:expert) { create(:instructeur) }
let(:another_expert) { create(:instructeur) }
context "when avis claimed by an expert" do
let(:avis) { create(:avis, dossier: dossier, claimant: claimant_expert, instructeur: expert) }
let(:another_avis) { create(:avis, dossier: dossier, claimant: instructeur, instructeur: another_expert) }
it "is revokable by this expert or any instructeurs of the dossier" do
expect(avis.revokable_by?(claimant_expert)).to be_truthy
expect(avis.revokable_by?(another_expert)).to be_falsy
expect(avis.revokable_by?(instructeur)).to be_truthy
end
end
context "when avis claimed by an instructeur" do
let(:avis) { create(:avis, dossier: dossier, claimant: instructeur, instructeur: expert) }
let(:another_avis) { create(:avis, dossier: dossier, claimant: expert, instructeur: another_expert) }
let(:another_instructeur) { create(:instructeur) }
let(:instructeurs) { [instructeur, another_instructeur] }
it "is revokable by any instructeur of the dossier, not by an expert" do
expect(avis.revokable_by?(instructeur)).to be_truthy
expect(avis.revokable_by?(another_expert)).to be_falsy
expect(avis.revokable_by?(another_instructeur)).to be_truthy
end
end
end
end