perf(procedure): description view caching

This commit is contained in:
Colin Darie 2023-11-24 14:40:05 +01:00
parent 5d747ba0c2
commit 3b9285a00b
No known key found for this signature in database
GPG key ID: 8C76CADD40253590
5 changed files with 74 additions and 42 deletions

View file

@ -25,8 +25,6 @@ module Users
@preview_dossiers = @dossiers.take(3) @preview_dossiers = @dossiers.take(3)
end end
@usual_traitement_time = @procedure.stats_usual_traitement_time
render 'commencer/show' render 'commencer/show'
end end

View file

@ -24,53 +24,54 @@
- unless @no_description - unless @no_description
.fr-accordions-group.fr-mb-3w .fr-accordions-group.fr-mb-3w
%section.fr-accordion - cache [procedure, "description"] do
%h2.fr-accordion__title
%button.fr-accordion__btn{ "aria-controls" => "accordion-114", "aria-expanded" => "true" }
= t('activerecord.attributes.procedure.description')
#accordion-114.fr-collapse
= h render SimpleFormatComponent.new(procedure.description, allow_a: true)
- if procedure.description_target_audience.present?
%section.fr-accordion %section.fr-accordion
%h2.fr-accordion__title %h2.fr-accordion__title
%button.fr-accordion__btn{ "aria-controls" => "accordion-115", "aria-expanded" => "false" } %button.fr-accordion__btn{ "aria-controls" => "accordion-114", "aria-expanded" => "true" }
= t('activerecord.attributes.procedure.description_target_audience') = t('activerecord.attributes.procedure.description')
#accordion-115.fr-collapse #accordion-114.fr-collapse
= h render SimpleFormatComponent.new(procedure.description_target_audience, allow_a: true) = h render SimpleFormatComponent.new(procedure.description, allow_a: true)
- if procedure.description_pj.present? - if procedure.description_target_audience.present?
%section.fr-accordion.pieces_jointes %section.fr-accordion
%h2.fr-accordion__title %h2.fr-accordion__title
%button.fr-accordion__btn{ "aria-controls" => "accordion-116", "aria-expanded" => "false" } %button.fr-accordion__btn{ "aria-controls" => "accordion-115", "aria-expanded" => "false" }
= t('shared.procedure_description.pieces_jointes') = t('activerecord.attributes.procedure.description_target_audience')
#accordion-116.fr-collapse #accordion-115.fr-collapse
= h render SimpleFormatComponent.new(procedure.description_pj, allow_a: true) = h render SimpleFormatComponent.new(procedure.description_target_audience, allow_a: true)
- elsif procedure.pieces_jointes_list? - if procedure.description_pj.present?
%section.fr-accordion.pieces_jointes %section.fr-accordion.pieces_jointes
%h2.fr-accordion__title %h2.fr-accordion__title
%button.fr-accordion__btn{ "aria-controls" => "accordion-116", "aria-expanded" => "false" } %button.fr-accordion__btn{ "aria-controls" => "accordion-116", "aria-expanded" => "false" }
= t('shared.procedure_description.pieces_jointes') = t('shared.procedure_description.pieces_jointes')
#accordion-116.fr-collapse #accordion-116.fr-collapse
- if procedure.pieces_jointes_list_without_conditionnal.present? = h render SimpleFormatComponent.new(procedure.description_pj, allow_a: true)
%ul
= render partial: "shared/procedure_pieces_jointes_list", collection: procedure.pieces_jointes_list_without_conditionnal, as: :pj
- if procedure.pieces_jointes_list_with_conditionnal.present? - elsif procedure.pieces_jointes_list?
%h3.fr-text--sm.fr-mb-0.fr-mt-2w %section.fr-accordion.pieces_jointes
= t('shared.procedure_description.pieces_jointes_conditionnal_list_title') %h2.fr-accordion__title
%ul %button.fr-accordion__btn{ "aria-controls" => "accordion-116", "aria-expanded" => "false" }
= render partial: "shared/procedure_pieces_jointes_list", collection: procedure.pieces_jointes_list_with_conditionnal, as: :pj = t('shared.procedure_description.pieces_jointes')
#accordion-116.fr-collapse
- if procedure.pieces_jointes_list_without_conditionnal.present?
%ul
= render partial: "shared/procedure_pieces_jointes_list", collection: procedure.pieces_jointes_list_without_conditionnal, as: :pj
- if @usual_traitement_time.present? - if procedure.pieces_jointes_list_with_conditionnal.present?
%h3.fr-text--sm.fr-mb-0.fr-mt-2w
= t('shared.procedure_description.pieces_jointes_conditionnal_list_title')
%ul
= render partial: "shared/procedure_pieces_jointes_list", collection: procedure.pieces_jointes_list_with_conditionnal, as: :pj
- if procedure.stats_usual_traitement_time
%section.fr-accordion %section.fr-accordion
%h2.fr-accordion__title %h2.fr-accordion__title
%button.fr-accordion__btn{ "aria-controls" => "accordion-117", "aria-expanded" => "false" } %button.fr-accordion__btn{ "aria-controls" => "accordion-117", "aria-expanded" => "false" }
= t('shared.procedure_description.usual_traitement_time_title') = t('shared.procedure_description.usual_traitement_time_title')
#accordion-117.fr-collapse #accordion-117.fr-collapse
= t('shared.procedure_description.usual_traitement_time_detail_html', traitement_time: distance_of_time_in_words(@usual_traitement_time), percentile: ProcedureStatsConcern::USUAL_TRAITEMENT_TIME_PERCENTILE, days: ProcedureStatsConcern::NB_DAYS_RECENT_DOSSIERS, href: statistiques_path(procedure.path) ) = t('shared.procedure_description.usual_traitement_time_detail_html', traitement_time: distance_of_time_in_words(procedure.stats_usual_traitement_time), percentile: ProcedureStatsConcern::USUAL_TRAITEMENT_TIME_PERCENTILE, days: ProcedureStatsConcern::NB_DAYS_RECENT_DOSSIERS, href: statistiques_path(procedure.path) )
- if procedure.persisted? && procedure.estimated_duration_visible? - if procedure.persisted? && procedure.estimated_duration_visible?

View file

@ -770,12 +770,9 @@ describe ProcedureRevision do
end end
end end
describe 'caching behavior' do describe 'caching behavior', caching: true do
let(:procedure) { create(:procedure, :published, types_de_champ_public: types_de_champ_public) } let(:procedure) { create(:procedure, :published, types_de_champ_public: types_de_champ_public) }
before { Rails.cache = ActiveSupport::Cache::MemoryStore.new }
after { Rails.cache = ActiveSupport::Cache::NullStore.new }
context 'when a type de champ belonging to a draft revision is updated' do context 'when a type de champ belonging to a draft revision is updated' do
let(:draft_revision) { procedure.draft_revision } let(:draft_revision) { procedure.draft_revision }

16
spec/support/caching.rb Normal file
View file

@ -0,0 +1,16 @@
RSpec.configure do |config|
config.around(:all, :caching) do |example|
caching_was = ActionController::Base.perform_caching
cache_store_was = Rails.cache
Rails.cache = ActiveSupport::Cache::MemoryStore.new
ActionController::Base.perform_caching = true
ActionController::Base.cache_store = Rails.cache
example.run
ensure
Rails.cache = cache_store_was
ActionController::Base.perform_caching = caching_was
ActionController::Base.cache_store = Rails.cache
end
end

View file

@ -48,7 +48,9 @@ describe 'shared/_procedure_description', type: :view do
end end
context 'when procedure has usual_traitement_time' do context 'when procedure has usual_traitement_time' do
before { assign(:usual_traitement_time, 1.day) } before do
allow(procedure).to receive(:stats_usual_traitement_time).and_return(1.day)
end
it 'shows a usual traitement text' do it 'shows a usual traitement text' do
subject subject
@ -105,4 +107,22 @@ describe 'shared/_procedure_description', type: :view do
end end
end end
end end
context 'caching', caching: true do
it "works" do
expect(procedure).to receive(:pieces_jointes_list?).once
2.times { render partial: 'shared/procedure_description', locals: { procedure: } }
end
it 'cache_key depends of revision' do
render partial: 'shared/procedure_description', locals: { procedure: }
expect(rendered).not_to have_text('new pj')
procedure.draft_revision.add_type_de_champ(type_champ: :piece_justificative, libelle: 'new pj')
procedure.publish_revision!
render partial: 'shared/procedure_description', locals: { procedure: }
expect(rendered).to have_text('new pj')
end
end
end end