From 5782823ece34f2163526238e6a04b257bd4e872d Mon Sep 17 00:00:00 2001 From: Jonathan Greenberg Date: Thu, 30 Jun 2022 07:26:10 -0400 Subject: [PATCH] Change set_cache_headers to before_action - should be done before rendering to save server resources when fresh_when renders head 304 - adds spec to confirm that pages#show does not get called once cached --- app/controllers/pages_controller.rb | 3 +-- app/controllers/programs_controller.rb | 3 +-- app/controllers/schedule_controller.rb | 5 ++--- app/controllers/sponsors_controller.rb | 3 +-- spec/features/website/page_viewing_spec.rb | 9 +++++++++ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 3caf11039..62ba74156 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -1,8 +1,7 @@ class PagesController < ApplicationController before_action :require_website, only: :show before_action :require_page, only: :show - - after_action :set_cache_headers, only: :show + before_action :set_cache_headers, only: :show def current_styleguide end diff --git a/app/controllers/programs_controller.rb b/app/controllers/programs_controller.rb index 073425e09..d44de4254 100644 --- a/app/controllers/programs_controller.rb +++ b/app/controllers/programs_controller.rb @@ -1,7 +1,6 @@ class ProgramsController < ApplicationController before_action :require_website - - after_action :set_cache_headers, only: :show + before_action :set_cache_headers, only: :show def show @program_sessions = current_website.event.program_sessions.live diff --git a/app/controllers/schedule_controller.rb b/app/controllers/schedule_controller.rb index 544d4fcd7..829ae3ae1 100644 --- a/app/controllers/schedule_controller.rb +++ b/app/controllers/schedule_controller.rb @@ -1,8 +1,7 @@ class ScheduleController < ApplicationController include WebsiteScheduleHelper before_action :require_event - - after_action :set_cache_headers, only: :show + before_action :set_cache_headers, only: :show decorates_assigned :schedule, with: Staff::TimeSlotDecorator @@ -10,4 +9,4 @@ def show @schedule = current_event.time_slots.grid_order.includes(:room, program_session: { proposal: {speakers: :user}}) render layout: "themes/#{current_website.theme}" end -end \ No newline at end of file +end diff --git a/app/controllers/sponsors_controller.rb b/app/controllers/sponsors_controller.rb index f1cc60ca4..623c4aa2e 100644 --- a/app/controllers/sponsors_controller.rb +++ b/app/controllers/sponsors_controller.rb @@ -1,7 +1,6 @@ class SponsorsController < ApplicationController before_action :require_website - - after_action :set_cache_headers, only: :show + before_action :set_cache_headers, only: :show def show @sponsors_by_tier = Sponsor.published.order_by_tier.group_by(&:tier) diff --git a/spec/features/website/page_viewing_spec.rb b/spec/features/website/page_viewing_spec.rb index 03db818f1..fbb2177d0 100644 --- a/spec/features/website/page_viewing_spec.rb +++ b/spec/features/website/page_viewing_spec.rb @@ -59,4 +59,13 @@ visit landing_path(slug: website.event.slug) expect(page).to have_content("Page Not Found") end + + scenario 'Public views a cached page twice and gets 304 without rendering', :caching, :js do + website.update(caching: :automatic) + create(:page, published_body: 'Home Content', landing: true) + + expect_any_instance_of(PagesController).to receive(:show).once.and_call_original + visit landing_path(slug: website.event.slug) + visit landing_path(slug: website.event.slug) + end end