From 9a77ebd5ac6c6f3c71119c3ebd061051a21c3665 Mon Sep 17 00:00:00 2001 From: Chris Colvard Date: Thu, 3 Feb 2022 13:59:24 -0500 Subject: [PATCH] Remove collection from index when deleted event published --- .../listeners/metadata_index_listener.rb | 11 +++++++++ .../listeners/metadata_index_listener_spec.rb | 23 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/app/services/hyrax/listeners/metadata_index_listener.rb b/app/services/hyrax/listeners/metadata_index_listener.rb index 2c967fc7e5..cb72c4e99e 100644 --- a/app/services/hyrax/listeners/metadata_index_listener.rb +++ b/app/services/hyrax/listeners/metadata_index_listener.rb @@ -72,6 +72,17 @@ def on_object_deleted(event) Hyrax.index_adapter.delete(resource: event[:object]) end + ## + # Remove the resource from the index. + # + # Called when 'collection.deleted' event is published + # @param [Dry::Events::Event] event + # @return [void] + def on_collection_deleted(event) + return unless resource?(event.payload[:collection]) + Hyrax.index_adapter.delete(resource: event[:collection]) + end + private def resource?(resource) diff --git a/spec/services/hyrax/listeners/metadata_index_listener_spec.rb b/spec/services/hyrax/listeners/metadata_index_listener_spec.rb index b70a7a311c..229f2ba699 100644 --- a/spec/services/hyrax/listeners/metadata_index_listener_spec.rb +++ b/spec/services/hyrax/listeners/metadata_index_listener_spec.rb @@ -92,6 +92,29 @@ end end + describe '#on_collection_deleted' do + let(:event_type) { :on_collection_deleted } + let(:resource) { FactoryBot.valkyrie_create(:hyrax_collection) } + let(:data) { { collection: resource } } + + it 'reindexes the collection on the configured adapter' do + expect(Hyrax.logger).not_to receive(:info).with(skipping_message) + expect { listener.on_collection_deleted(event) } + .to change { fake_adapter.deleted_resources } + .to contain_exactly(resource) + end + + context 'when it gets a non-resource as payload' do + let(:resource) { ActiveFedora::Base.new } + + it 'returns as a no-op' do + expect(Hyrax.logger).to receive(:info).with(skipping_message) + expect { listener.on_collection_deleted(event) } + .not_to change { fake_adapter.deleted_resources } + end + end + end + describe '#on_collection_metadata_updated' do let(:event_type) { :on_collection_metadata_updated } let(:data) { { collection: resource } }