diff --git a/app/jobs/dossier_index_search_terms_job.rb b/app/jobs/dossier_index_search_terms_job.rb new file mode 100644 index 000000000..688171472 --- /dev/null +++ b/app/jobs/dossier_index_search_terms_job.rb @@ -0,0 +1,7 @@ +class DossierIndexSearchTermsJob < ApplicationJob + discard_on ActiveRecord::RecordNotFound + + def perform(dossier) + dossier.index_search_terms + end +end diff --git a/app/jobs/dossier_update_search_terms_job.rb b/app/jobs/dossier_update_search_terms_job.rb deleted file mode 100644 index 5de7c61c8..000000000 --- a/app/jobs/dossier_update_search_terms_job.rb +++ /dev/null @@ -1,7 +0,0 @@ -class DossierUpdateSearchTermsJob < ApplicationJob - discard_on ActiveRecord::RecordNotFound - - def perform(dossier) - dossier.update_search_terms - end -end diff --git a/app/models/concerns/dossier_searchable_concern.rb b/app/models/concerns/dossier_searchable_concern.rb index e26344115..78eb5dd02 100644 --- a/app/models/concerns/dossier_searchable_concern.rb +++ b/app/models/concerns/dossier_searchable_concern.rb @@ -4,13 +4,13 @@ module DossierSearchableConcern extend ActiveSupport::Concern included do - after_commit :update_search_terms_later + after_commit :index_search_terms_later SEARCH_TERMS_DEBOUNCE = 30.seconds - kredis_flag :debounce_update_search_terms_flag + kredis_flag :debounce_index_search_terms_flag - def update_search_terms + def index_search_terms DossierPreloader.load_one(self) search_terms = [ @@ -28,11 +28,11 @@ module DossierSearchableConcern self.class.connection.execute(sanitized_sql) end - def update_search_terms_later - return if debounce_update_search_terms_flag.marked? + def index_search_terms_later + return if debounce_index_search_terms_flag.marked? - debounce_update_search_terms_flag.mark(expires_in: SEARCH_TERMS_DEBOUNCE) - DossierUpdateSearchTermsJob.set(wait: SEARCH_TERMS_DEBOUNCE).perform_later(self) + debounce_index_search_terms_flag.mark(expires_in: SEARCH_TERMS_DEBOUNCE) + DossierIndexSearchTermsJob.set(wait: SEARCH_TERMS_DEBOUNCE).perform_later(self) end end end diff --git a/app/models/etablissement.rb b/app/models/etablissement.rb index d57bc08b2..4987c4785 100644 --- a/app/models/etablissement.rb +++ b/app/models/etablissement.rb @@ -17,7 +17,7 @@ class Etablissement < ApplicationRecord fermé: "fermé" }, _prefix: true - after_commit -> { dossier&.debounce_update_search_terms } + after_commit -> { dossier&.index_search_terms_later } def entreprise_raison_sociale read_attribute(:entreprise_raison_sociale).presence || raison_sociale_for_ei diff --git a/app/models/individual.rb b/app/models/individual.rb index 6e52045b4..47e07af22 100644 --- a/app/models/individual.rb +++ b/app/models/individual.rb @@ -17,7 +17,7 @@ class Individual < ApplicationRecord validates :email, presence: true, if: -> { dossier.for_tiers? && self.email? }, on: :update - after_commit -> { dossier.debounce_update_search_terms }, if: -> { nom_previously_changed? || prenom_previously_changed? } + after_commit -> { dossier.index_search_terms_later }, if: -> { nom_previously_changed? || prenom_previously_changed? } GENDER_MALE = "M." GENDER_FEMALE = 'Mme' diff --git a/config/initializers/transition_to_sidekiq.rb b/config/initializers/transition_to_sidekiq.rb index 419385827..a4c8e961a 100644 --- a/config/initializers/transition_to_sidekiq.rb +++ b/config/initializers/transition_to_sidekiq.rb @@ -44,7 +44,7 @@ if Rails.env.production? && SIDEKIQ_ENABLED self.queue_adapter = :sidekiq end - class DossierUpdateSearchTermsJob < ApplicationJob + class DossierIndexSearchTermsJob < ApplicationJob self.queue_adapter = :sidekiq end diff --git a/spec/controllers/recherche_controller_spec.rb b/spec/controllers/recherche_controller_spec.rb index 91bfe25fe..b8d87a0ee 100644 --- a/spec/controllers/recherche_controller_spec.rb +++ b/spec/controllers/recherche_controller_spec.rb @@ -28,7 +28,7 @@ describe RechercheController, type: :controller do dossier_with_expert.champs_private[1].value = "Dossier B is invalid" dossier_with_expert.save! - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) end describe 'GET #index' do diff --git a/spec/jobs/dossier_update_search_terms_job_spec.rb b/spec/jobs/dossier_index_search_terms_job_spec.rb similarity index 92% rename from spec/jobs/dossier_update_search_terms_job_spec.rb rename to spec/jobs/dossier_index_search_terms_job_spec.rb index 3dfda131f..9cb016ec9 100644 --- a/spec/jobs/dossier_update_search_terms_job_spec.rb +++ b/spec/jobs/dossier_index_search_terms_job_spec.rb @@ -1,4 +1,4 @@ -RSpec.describe DossierUpdateSearchTermsJob, type: :job do +RSpec.describe DossierIndexSearchTermsJob, type: :job do let(:dossier) { create(:dossier) } subject(:perform_job) { described_class.perform_now(dossier.reload) } diff --git a/spec/models/concerns/dossier_clone_concern_spec.rb b/spec/models/concerns/dossier_clone_concern_spec.rb index 2763d3bf7..6f182b1c3 100644 --- a/spec/models/concerns/dossier_clone_concern_spec.rb +++ b/spec/models/concerns/dossier_clone_concern_spec.rb @@ -51,7 +51,7 @@ RSpec.describe DossierCloneConcern do it "updates search terms" do subject - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) sql = "SELECT search_terms, private_search_terms FROM dossiers where id = :id" result = Dossier.connection.execute(Dossier.sanitize_sql_array([sql, id: new_dossier.id])).first @@ -338,7 +338,7 @@ RSpec.describe DossierCloneConcern do it { expect { subject }.to change { dossier.reload.champs.size }.by(0) } it { expect { subject }.not_to change { dossier.reload.champs.order(:created_at).reject { _1.stable_id.in?([99, 994]) }.map(&:value) } } - it { expect { subject }.to have_enqueued_job(DossierUpdateSearchTermsJob).with(dossier) } + it { expect { subject }.to have_enqueued_job(DossierIndexSearchTermsJob).with(dossier) } it { expect { subject }.to change { dossier.reload.champs.find { _1.stable_id == 99 }.value }.from('old value').to('new value') } it { expect { subject }.to change { dossier.reload.champs.find { _1.stable_id == 994 }.value }.from('old value').to('new value in repetition') } diff --git a/spec/models/concerns/dossier_searchable_concern_spec.rb b/spec/models/concerns/dossier_searchable_concern_spec.rb index 343f31795..ae9325d7d 100644 --- a/spec/models/concerns/dossier_searchable_concern_spec.rb +++ b/spec/models/concerns/dossier_searchable_concern_spec.rb @@ -2,7 +2,7 @@ describe DossierSearchableConcern do let(:champ_public) { dossier.champs_public.first } let(:champ_private) { dossier.champs_private.first } - describe '#update_search_terms' do + describe '#index_search_terms' do let(:etablissement) { dossier.etablissement } let(:dossier) { create(:dossier, :with_entreprise, user: user) } let(:etablissement) { build(:etablissement, entreprise_nom: 'Dupont', entreprise_prenom: 'Thomas', association_rna: '12345', association_titre: 'asso de test', association_objet: 'tests unitaires') } @@ -20,7 +20,7 @@ describe DossierSearchableConcern do it "update columns" do champ_public.update_attribute(:value, "champ public") champ_private.update_attribute(:value, "champ privé") - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) expect(result["search_terms"]).to eq("#{user.email} champ public #{etablissement.entreprise_siren} #{etablissement.entreprise_numero_tva_intracommunautaire} #{etablissement.entreprise_forme_juridique} #{etablissement.entreprise_forme_juridique_code} #{etablissement.entreprise_nom_commercial} #{etablissement.entreprise_raison_sociale} #{etablissement.entreprise_siret_siege_social} #{etablissement.entreprise_nom} #{etablissement.entreprise_prenom} #{etablissement.association_rna} #{etablissement.association_titre} #{etablissement.association_objet} #{etablissement.siret} #{etablissement.naf} #{etablissement.libelle_naf} #{etablissement.adresse} #{etablissement.code_postal} #{etablissement.localite} #{etablissement.code_insee_localite}") expect(result["private_search_terms"]).to eq('champ privé') @@ -37,21 +37,21 @@ describe DossierSearchableConcern do champs_private_attributes: [{ id: champ_private.id, value: 'nouvelle valeur privee' }] ) - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) expect(result["search_terms"]).to include('nouvelle valeur publique') expect(result["private_search_terms"]).to include('nouvelle valeur privee') end it "debounce jobs" do - assert_enqueued_jobs(1, only: DossierUpdateSearchTermsJob) do + assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do 3.times { dossier.index_search_terms_later } end # wait redis key expiration sleep 1.01.seconds - assert_enqueued_jobs(1, only: DossierUpdateSearchTermsJob) do + assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do dossier.update(champs_public_attributes: [{ id: champ_public.id, value: rand(10).to_s }]) end end diff --git a/spec/models/etablissement_spec.rb b/spec/models/etablissement_spec.rb index 7653c79cd..3b46462f2 100644 --- a/spec/models/etablissement_spec.rb +++ b/spec/models/etablissement_spec.rb @@ -119,7 +119,7 @@ describe Etablissement do let(:etablissement) { create(:etablissement, dossier: build(:dossier)) } it "schedule update search terms" do - assert_enqueued_jobs(1, only: DossierUpdateSearchTermsJob) do + assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do etablissement.update(entreprise_nom: "nom") end end diff --git a/spec/models/individual_spec.rb b/spec/models/individual_spec.rb index a37d1e15b..6f8fb7c6f 100644 --- a/spec/models/individual_spec.rb +++ b/spec/models/individual_spec.rb @@ -36,9 +36,10 @@ describe Individual do end end - it "schedule update search terms" do - assert_enqueued_jobs(1, only: DossierUpdateSearchTermsJob) do - subject + it "schedule index search terms" do + subject.dossier.debounce_index_search_terms_flag.remove + assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do + individual.update(nom: "new name") end end end diff --git a/spec/services/dossier_search_service_spec.rb b/spec/services/dossier_search_service_spec.rb index 0f2baeec0..759f7b60b 100644 --- a/spec/services/dossier_search_service_spec.rb +++ b/spec/services/dossier_search_service_spec.rb @@ -24,7 +24,7 @@ describe DossierSearchService do dossier_3 dossier_archived - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) end let(:procedure_1) { create(:procedure, :published, administrateur: administrateur_1) } @@ -116,7 +116,7 @@ describe DossierSearchService do dossier_2 dossier_3 dossier_archived - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) end let(:liste_dossiers) do diff --git a/spec/system/routing/rules_full_scenario_spec.rb b/spec/system/routing/rules_full_scenario_spec.rb index d72fd0c46..2729a71ce 100644 --- a/spec/system/routing/rules_full_scenario_spec.rb +++ b/spec/system/routing/rules_full_scenario_spec.rb @@ -134,7 +134,7 @@ describe 'The routing with rules', js: true do user_send_dossier(litteraire_user, 'littéraire') user_send_dossier(artistique_user, 'artistique') - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) # the litteraires instructeurs only manage the litteraires dossiers register_instructeur_and_log_in(victor.email) diff --git a/spec/system/users/invite_spec.rb b/spec/system/users/invite_spec.rb index 2d681a49b..15c8a466b 100644 --- a/spec/system/users/invite_spec.rb +++ b/spec/system/users/invite_spec.rb @@ -162,7 +162,7 @@ describe 'Invitations' do before do navigate_to_invited_dossier(invite) visit dossiers_path - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) end it "can search by id and it displays the dossier" do diff --git a/spec/system/users/list_dossiers_spec.rb b/spec/system/users/list_dossiers_spec.rb index 6fc525e04..eaa32c284 100644 --- a/spec/system/users/list_dossiers_spec.rb +++ b/spec/system/users/list_dossiers_spec.rb @@ -268,7 +268,7 @@ describe 'user access to the list of their dossiers', js: true do context 'when it matches multiple dossiers' do let!(:dossier_with_champs) { create(:dossier, :with_populated_champs, :en_construction, user: user) } before do - perform_enqueued_jobs(only: DossierUpdateSearchTermsJob) + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) find('.fr-search-bar .fr-btn').click end