perf(procedure): description view caching
This commit is contained in:
parent
5d747ba0c2
commit
3b9285a00b
5 changed files with 74 additions and 42 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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?
|
||||||
|
|
|
@ -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
16
spec/support/caching.rb
Normal 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
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue