diff --git a/app/controllers/instructeurs/dossiers_controller.rb b/app/controllers/instructeurs/dossiers_controller.rb index 8063e0438..b8a40d673 100644 --- a/app/controllers/instructeurs/dossiers_controller.rb +++ b/app/controllers/instructeurs/dossiers_controller.rb @@ -280,6 +280,7 @@ module Instructeurs end dossier.save(context: :champs_private_value) + dossier.index_search_terms_later respond_to do |format| format.turbo_stream do diff --git a/app/models/concerns/dossier_clone_concern.rb b/app/models/concerns/dossier_clone_concern.rb index 86a135ae7..913af3e45 100644 --- a/app/models/concerns/dossier_clone_concern.rb +++ b/app/models/concerns/dossier_clone_concern.rb @@ -71,6 +71,7 @@ module DossierCloneConcern touch(:last_champ_updated_at) end reload + index_search_terms_later editing_fork.destroy_editing_fork! end @@ -119,6 +120,7 @@ module DossierCloneConcern end end + cloned_dossier.index_search_terms_later if !fork cloned_dossier.reload end diff --git a/app/models/concerns/dossier_searchable_concern.rb b/app/models/concerns/dossier_searchable_concern.rb index 2b52fe668..24457b68b 100644 --- a/app/models/concerns/dossier_searchable_concern.rb +++ b/app/models/concerns/dossier_searchable_concern.rb @@ -4,7 +4,7 @@ module DossierSearchableConcern extend ActiveSupport::Concern included do - after_commit :index_search_terms_later + after_commit :index_search_terms_later, if: -> { previously_new_record? || user_previously_changed? || mandataire_first_name_previously_changed? || mandataire_last_name_previously_changed? } SEARCH_TERMS_DEBOUNCE = 30.seconds diff --git a/app/models/concerns/dossier_state_concern.rb b/app/models/concerns/dossier_state_concern.rb index 1c99ffb65..e90902066 100644 --- a/app/models/concerns/dossier_state_concern.rb +++ b/app/models/concerns/dossier_state_concern.rb @@ -13,6 +13,8 @@ module DossierStateConcern MailTemplatePresenterService.create_commentaire_for_state(self, Dossier.states.fetch(:en_construction)) procedure.compute_dossiers_count + + index_search_terms_later end def after_commit_passer_en_construction diff --git a/spec/controllers/instructeurs/dossiers_controller_spec.rb b/spec/controllers/instructeurs/dossiers_controller_spec.rb index f4f065948..458654a6f 100644 --- a/spec/controllers/instructeurs/dossiers_controller_spec.rb +++ b/spec/controllers/instructeurs/dossiers_controller_spec.rb @@ -1041,6 +1041,7 @@ describe Instructeurs::DossiersController, type: :controller do expect(champ_drop_down_list.value).to eq('other value') expect(dossier.reload.last_champ_private_updated_at).to eq(now) expect(response).to have_http_status(200) + assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) } it 'updates the annotations' do diff --git a/spec/models/concerns/dossier_clone_concern_spec.rb b/spec/models/concerns/dossier_clone_concern_spec.rb index 6f182b1c3..234f4de53 100644 --- a/spec/models/concerns/dossier_clone_concern_spec.rb +++ b/spec/models/concerns/dossier_clone_concern_spec.rb @@ -49,9 +49,15 @@ RSpec.describe DossierCloneConcern do end it "updates search terms" do - subject + # In spec, dossier and flag reference are created just before deep clone, + # which keep the flag reference from the original, pointing to the original id. + # We have to remove the flag reference before the clone + dossier.remove_instance_variable(:@debounce_index_search_terms_flag_kredis_flag) + + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) do + subject + end - 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 @@ -334,6 +340,7 @@ RSpec.describe DossierCloneConcern do end updated_champ.update(value: 'new value') updated_repetition_champ.update(value: 'new value in repetition') + dossier.debounce_index_search_terms_flag.remove end it { expect { subject }.to change { dossier.reload.champs.size }.by(0) } diff --git a/spec/models/concerns/dossier_searchable_concern_spec.rb b/spec/models/concerns/dossier_searchable_concern_spec.rb index 069a6696e..273a2e3fe 100644 --- a/spec/models/concerns/dossier_searchable_concern_spec.rb +++ b/spec/models/concerns/dossier_searchable_concern_spec.rb @@ -29,14 +29,22 @@ describe DossierSearchableConcern do context 'with an update' do before do stub_const("DossierSearchableConcern::SEARCH_TERMS_DEBOUNCE", 1.second) + + # dossier creation trigger a first indexation and flag, + # so we we have to remove this flag + dossier.debounce_index_search_terms_flag.remove end - it "update columns" do + it "update columns en construction" do dossier.update( champs_public_attributes: [{ id: champ_public.id, value: 'nouvelle valeur publique' }], champs_private_attributes: [{ id: champ_private.id, value: 'nouvelle valeur privee' }] ) + assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do + dossier.passer_en_construction + end + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) expect(result["search_terms"]).to include('nouvelle valeur publique') @@ -52,15 +60,21 @@ describe DossierSearchableConcern do sleep 1.01.seconds assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do - dossier.update(champs_public_attributes: [{ id: champ_public.id, value: rand(10).to_s }]) + dossier.index_search_terms_later end end end context 'mandataire' do it "update columns" do - dossier.update(mandataire_first_name: "Chris") + dossier.debounce_index_search_terms_flag.remove + + assert_enqueued_jobs(1, only: DossierIndexSearchTermsJob) do + dossier.update!(mandataire_first_name: "Chris") + end + perform_enqueued_jobs(only: DossierIndexSearchTermsJob) + expect(result["search_terms"]).to include("Chris") end end