From 6dd535eb8d4c34309f56f5f9eebf1947cafd3b81 Mon Sep 17 00:00:00 2001 From: Chris Colvard Date: Thu, 3 Feb 2022 14:19:17 -0500 Subject: [PATCH] Ensure Failure doesn't fail to return --- .rubocop_fixme.yml | 1 + lib/hyrax/transactions/steps/save_access_control.rb | 4 ++-- .../transactions/steps/save_access_control_spec.rb | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.rubocop_fixme.yml b/.rubocop_fixme.yml index 06063becef..4ef63b9fb4 100644 --- a/.rubocop_fixme.yml +++ b/.rubocop_fixme.yml @@ -115,6 +115,7 @@ RSpec/AnyInstance: - 'spec/controllers/hyrax/stats_controller_spec.rb' - 'spec/controllers/hyrax/users_controller_spec.rb' - 'spec/hyrax/transactions/steps/delete_access_control_spec.rb' + - 'spec/hyrax/transactions/steps/save_access_control_spec.rb' - 'spec/jobs/content_restored_version_event_job_spec.rb' - 'spec/jobs/file_set_attached_event_job_spec.rb' - 'spec/jobs/hyrax/grant_edit_to_members_job_spec.rb' diff --git a/lib/hyrax/transactions/steps/save_access_control.rb b/lib/hyrax/transactions/steps/save_access_control.rb index 12042dc754..92bad7ec2b 100644 --- a/lib/hyrax/transactions/steps/save_access_control.rb +++ b/lib/hyrax/transactions/steps/save_access_control.rb @@ -18,8 +18,8 @@ class SaveAccessControl # @return [Dry::Monads::Result] def call(obj) return Success(obj) unless obj.respond_to?(:permission_manager) - obj.permission_manager&.acl&.save || - (return Failure[:failed_to_save_acl, acl]) + acl = obj.permission_manager&.acl + acl&.save || (return Failure[:failed_to_save_acl, acl]) Success(obj) end diff --git a/spec/hyrax/transactions/steps/save_access_control_spec.rb b/spec/hyrax/transactions/steps/save_access_control_spec.rb index 4d32583a63..4fc988791b 100644 --- a/spec/hyrax/transactions/steps/save_access_control_spec.rb +++ b/spec/hyrax/transactions/steps/save_access_control_spec.rb @@ -20,6 +20,17 @@ .to change { Hyrax::AccessControlList.new(resource: work).permissions } .to contain_exactly(have_attributes(mode: :read, agent: user.user_key)) end + + context 'when it fails to update' do + before { allow_any_instance_of(Hyrax::AccessControlList).to receive(:save).and_return(false) } + + it 'returns a Failure' do + result = step.call(work) + + expect(result).to be_failure + expect(result.failure).to contain_exactly(Symbol, Hyrax::AccessControlList) + end + end end context 'when the resource has no permission_manager' do