Skip to content

Commit

Permalink
🐛 Skip rendering badges on search_only tenants
Browse files Browse the repository at this point in the history
*Background:* A search_only tenant renders SOLR documents that had home
tenants different than the search_only tenant.  Part of that rendering
includes the underlying Work's collection type.  The SOLR document
stores the `Hyrax::CollectionType`'s ID.

The search_only tenant might have the same ID for
`Hyrax::CollectionType` but it is not the same thing.  Further, the home
tenant might have an ID that is not in the search_only tenant, which
results in an `ActiveRecord::RecordNotFound` error.

Prior to this commit, we always attempted to render the badge.

With this commit, we add some guarding logic to avoid rendering the
badge when we're likely not rendering within the SOLR documents home
tenant.

Related to:

- #951
- samvera/hyku#1815
  • Loading branch information
jeremyf committed Dec 15, 2023
1 parent c756fca commit 88f8a4c
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
19 changes: 19 additions & 0 deletions app/presenters/hyrax/collection_presenter_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,25 @@ def collection_featurable?
user_can_feature_collection? && solr_document.public?
end

##
# OVERRIDE to handle search_only tenant's not having access to the collection type badge from
# the document's home tenant.
#
# @return [String]
#
# @see https://github.com/scientist-softserv/palni-palci/issues/951
# @see https://github.com/samvera/hyku/issues/1815
def collection_type_badge
return "" unless Site.account&.present?
return "" if Site.account.search_only?

super
rescue ActiveRecord::RecordNotFound
# This is a fail-safe if we deleted the underlying Hyrax::CollectionType but have not yet
# cleaned up the SOLR records.
""
end

def display_feature_collection_link?
collection_featurable? && FeaturedCollection.can_create_another? && !collection_featured?
end
Expand Down
52 changes: 52 additions & 0 deletions spec/presenters/hyrax/collection_presenter_decorator_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Hyrax::CollectionPresenter do
describe '#collection_type_badge' do
subject { presenter.collection_type_badge }

# We're decorating an alternate base class so that we don't need the full pre-amble for testing
# our decoration. In other words, let's trust Hyrax::CollectionPresenter's specs for the
# "super" method call.
let(:base_class) do
Class.new do
def collection_type_badge
"<span>"
end
prepend Hyrax::CollectionPresenterDecorator
end
end
let(:presenter) { base_class.new }

before { allow(Site).to receive(:account).and_return(account) }

context 'when the Site.account is nil' do
let(:account) { nil }

it { is_expected.to eq("") }
end

context 'when the Site.account is search_only' do
let(:account) { FactoryBot.build(:account, search_only: true) }

it { is_expected.to eq("") }
end

context 'when the Site.account is NOT search_only' do
let(:account) { FactoryBot.build(:account, search_only: false) }

it { is_expected.to start_with("<span") }
end

context 'super_method' do
subject { Hyrax::CollectionPresenter.instance_method(:collection_type_badge).super_method }

let(:account) { nil }

it 'is Hyrax::CollectionPresenter#collection_type_badge' do
expect(subject.source_location.first).to end_with("app/presenters/hyrax/collection_presenter.rb")
end
end
end
end

0 comments on commit 88f8a4c

Please sign in to comment.