diff --git a/app/jobs/regular/index_user_fields_for_search.rb b/app/jobs/regular/index_user_fields_for_search.rb new file mode 100644 index 00000000000..1a2957dbe1c --- /dev/null +++ b/app/jobs/regular/index_user_fields_for_search.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class Jobs::IndexUserFieldsForSearch < Jobs::Base + def execute(args) + user_field_id = args[:user_field_id] + SearchIndexer.queue_users_reindex( + UserCustomField.where(name: "user_field_#{user_field_id}").pluck(:user_id), + ) + end +end diff --git a/app/models/user_field.rb b/app/models/user_field.rb index 3d492ab28ed..338d757f4b6 100644 --- a/app/models/user_field.rb +++ b/app/models/user_field.rb @@ -20,9 +20,7 @@ class UserField < ActiveRecord::Base end def queue_index_search - SearchIndexer.queue_users_reindex( - UserCustomField.where(name: "user_field_#{self.id}").pluck(:user_id), - ) + Jobs.enqueue(:index_user_fields_for_search, user_field_id: self.id) end private diff --git a/spec/fabricators/user_custom_field_fabricator.rb b/spec/fabricators/user_custom_field_fabricator.rb new file mode 100644 index 00000000000..abcb8910922 --- /dev/null +++ b/spec/fabricators/user_custom_field_fabricator.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +Fabricator(:user_custom_field) do + user + name { Fabricate(:user_field).id } + value { sequence(:value) { |n| "value#{n}" } } +end diff --git a/spec/jobs/index_user_fields_for_search_spec.rb b/spec/jobs/index_user_fields_for_search_spec.rb new file mode 100644 index 00000000000..42f6392f760 --- /dev/null +++ b/spec/jobs/index_user_fields_for_search_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +RSpec.describe Jobs::IndexUserFieldsForSearch do + subject(:job) { described_class.new } + + before do + SearchIndexer.enable + Jobs.run_immediately! + end + + it "triggers a reindex when executed" do + user = Fabricate(:user) + user_field = Fabricate(:user_field) + Fabricate(:user_custom_field, user: user, name: "user_field_#{user_field.id}") + + job.execute(user_field_id: user_field.id) + + expect(user.reload.user_search_data.version).to eq(SearchIndexer::REINDEX_VERSION) + end +end diff --git a/spec/models/user_field_spec.rb b/spec/models/user_field_spec.rb index cf056e5f0b0..9f6a5f80e97 100644 --- a/spec/models/user_field_spec.rb +++ b/spec/models/user_field_spec.rb @@ -30,4 +30,14 @@ RSpec.describe UserField do expect(user_field.description).to eq(link) end + + it "enqueues index user fields job on save" do + user_field = Fabricate(:user_field) + + user_field.update!(description: "tomtom") + + expect( + job_enqueued?(job: Jobs::IndexUserFieldsForSearch, args: { user_field_id: user_field.id }), + ).to eq(true) + end end