From ab615c67594da26f43b5d2a68720b0870bc16c5d Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Thu, 15 Aug 2019 11:07:58 +0500 Subject: [PATCH] Check person relationship --- app/interactors/accept_as_supporter.rb | 5 ++++ spec/interactors/accept_as_supporter_spec.rb | 30 ++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/app/interactors/accept_as_supporter.rb b/app/interactors/accept_as_supporter.rb index b93cbeb..aa04fc6 100644 --- a/app/interactors/accept_as_supporter.rb +++ b/app/interactors/accept_as_supporter.rb @@ -4,6 +4,7 @@ class AcceptAsSupporter include Interactor around :wrap_into_transaction + before :validate_person before :validate_account after :reload_records @@ -28,6 +29,10 @@ private context.person.reload end + def validate_person + context.fail! unless context.person.current_relationship.nil? + end + def validate_account context.fail! unless context.initiator_account.can_initiate_relationship? \ context.regional_office diff --git a/spec/interactors/accept_as_supporter_spec.rb b/spec/interactors/accept_as_supporter_spec.rb index 728ca40..8f1dde6 100644 --- a/spec/interactors/accept_as_supporter_spec.rb +++ b/spec/interactors/accept_as_supporter_spec.rb @@ -37,6 +37,36 @@ RSpec.describe AcceptAsSupporter do ) end + context 'when person is a supporter' do + let!(:person) { create :supporter_person } + + specify { expect(subject).to be_failure } + + specify do + expect { subject }.not_to change(Relationship, :count) + end + end + + context 'when person is a member' do + let!(:person) { create :member_person } + + specify { expect(subject).to be_failure } + + specify do + expect { subject }.not_to change(Relationship, :count) + end + end + + context 'when person is excluded' do + let!(:person) { create :excluded_person } + + specify { expect(subject).to be_failure } + + specify do + expect { subject }.not_to change(Relationship, :count) + end + end + context 'when initiator is a federal secretary' do let!(:initiator_account) { create :personal_account }