diff --git a/app/models/concerns/algolia_searchable/searchable_podcast_episode.rb b/app/models/concerns/algolia_searchable/searchable_podcast_episode.rb new file mode 100644 index 000000000..1b1cc1d4c --- /dev/null +++ b/app/models/concerns/algolia_searchable/searchable_podcast_episode.rb @@ -0,0 +1,25 @@ +module AlgoliaSearchable + module SearchablePodcastEpisode + extend ActiveSupport::Concern + + included do + include AlgoliaSearch + + algoliasearch(**DEFAULT_ALGOLIA_SETTINGS, if: :published) do + attribute :title, :summary, :path + attribute :podcast_name do + podcast.title + end + attribute :podcast_image do + profile_image_url + end + end + end + + class_methods do + def trigger_sidekiq_worker(record, delete) + AlgoliaSearch::SearchIndexWorker.perform_async(record.class.name, record.id, delete) + end + end + end +end diff --git a/app/models/podcast_episode.rb b/app/models/podcast_episode.rb index 27414504d..1f9641ffe 100644 --- a/app/models/podcast_episode.rb +++ b/app/models/podcast_episode.rb @@ -1,5 +1,6 @@ class PodcastEpisode < ApplicationRecord include PgSearch::Model + include AlgoliaSearchable acts_as_taggable diff --git a/spec/models/podcast_episode_spec.rb b/spec/models/podcast_episode_spec.rb index d741f7f9a..b77c16db1 100644 --- a/spec/models/podcast_episode_spec.rb +++ b/spec/models/podcast_episode_spec.rb @@ -131,4 +131,13 @@ RSpec.describe PodcastEpisode do end end end + + context "when indexing with Algolia", :algolia do + it "triggers indexing on save" do + allow(AlgoliaSearch::SearchIndexWorker).to receive(:perform_async) + create(:podcast_episode) + expect(AlgoliaSearch::SearchIndexWorker).to have_received(:perform_async).with("PodcastEpisode", + kind_of(Integer), false) + end + end end