Fix RSS feeds not being cachable (#14368)

* Add tests for some cachable responses

This only covers responses that we should have managed to make cachable
so far. It's not the case of all responses that should be cachable in
the end.

* Fix RSS feeds not being cachable
th-downstream
ThibG 4 years ago committed by GitHub
parent 9c90f5347e
commit 7792bab1cd

@ -55,7 +55,7 @@ class ApplicationController < ActionController::Base
end end
def store_current_location def store_current_location
store_location_for(:user, request.url) unless request.format == :json store_location_for(:user, request.url) unless [:json, :rss].include?(request.format&.to_sym)
end end
def require_admin! def require_admin!

@ -5,6 +5,21 @@ RSpec.describe AccountsController, type: :controller do
let(:account) { Fabricate(:user).account } let(:account) { Fabricate(:user).account }
shared_examples 'cachable response' do
it 'does not set cookies' do
expect(response.cookies).to be_empty
expect(response.headers['Set-Cookies']).to be nil
end
it 'does not set sessions' do
expect(session).to be_empty
end
it 'returns public Cache-Control header' do
expect(response.headers['Cache-Control']).to include 'public'
end
end
describe 'GET #show' do describe 'GET #show' do
let(:format) { 'html' } let(:format) { 'html' }
@ -323,9 +338,7 @@ RSpec.describe AccountsController, type: :controller do
expect(response.content_type).to eq 'application/activity+json' expect(response.content_type).to eq 'application/activity+json'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'renders account' do it 'renders account' do
json = body_as_json json = body_as_json
@ -343,9 +356,7 @@ RSpec.describe AccountsController, type: :controller do
expect(response.content_type).to eq 'application/activity+json' expect(response.content_type).to eq 'application/activity+json'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'returns Vary header with Signature' do it 'returns Vary header with Signature' do
expect(response.headers['Vary']).to include 'Signature' expect(response.headers['Vary']).to include 'Signature'
@ -401,9 +412,7 @@ RSpec.describe AccountsController, type: :controller do
expect(response.content_type).to eq 'application/activity+json' expect(response.content_type).to eq 'application/activity+json'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'renders account' do it 'renders account' do
json = body_as_json json = body_as_json
@ -447,9 +456,7 @@ RSpec.describe AccountsController, type: :controller do
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
end end
context do context do

@ -6,6 +6,21 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do
let!(:account) { Fabricate(:account) } let!(:account) { Fabricate(:account) }
let(:remote_account) { nil } let(:remote_account) { nil }
shared_examples 'cachable response' do
it 'does not set cookies' do
expect(response.cookies).to be_empty
expect(response.headers['Set-Cookies']).to be nil
end
it 'does not set sessions' do
expect(session).to be_empty
end
it 'returns public Cache-Control header' do
expect(response.headers['Cache-Control']).to include 'public'
end
end
before do before do
allow(controller).to receive(:signed_request_account).and_return(remote_account) allow(controller).to receive(:signed_request_account).and_return(remote_account)
@ -31,9 +46,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do
expect(response.content_type).to eq 'application/activity+json' expect(response.content_type).to eq 'application/activity+json'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'returns orderedItems with pinned statuses' do it 'returns orderedItems with pinned statuses' do
json = body_as_json json = body_as_json
@ -58,9 +71,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do
expect(response.content_type).to eq 'application/activity+json' expect(response.content_type).to eq 'application/activity+json'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'returns orderedItems with pinned statuses' do it 'returns orderedItems with pinned statuses' do
json = body_as_json json = body_as_json

@ -3,6 +3,21 @@ require 'rails_helper'
RSpec.describe ActivityPub::OutboxesController, type: :controller do RSpec.describe ActivityPub::OutboxesController, type: :controller do
let!(:account) { Fabricate(:account) } let!(:account) { Fabricate(:account) }
shared_examples 'cachable response' do
it 'does not set cookies' do
expect(response.cookies).to be_empty
expect(response.headers['Set-Cookies']).to be nil
end
it 'does not set sessions' do
expect(session).to be_empty
end
it 'returns public Cache-Control header' do
expect(response.headers['Cache-Control']).to include 'public'
end
end
before do before do
Fabricate(:status, account: account, visibility: :public) Fabricate(:status, account: account, visibility: :public)
Fabricate(:status, account: account, visibility: :unlisted) Fabricate(:status, account: account, visibility: :unlisted)
@ -39,9 +54,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do
expect(json[:totalItems]).to eq 4 expect(json[:totalItems]).to eq 4
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
end end
context 'with page requested' do context 'with page requested' do
@ -62,9 +75,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do
expect(json[:orderedItems].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true expect(json[:orderedItems].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
end end
end end

@ -7,6 +7,21 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do
let(:remote_reply_id) { nil } let(:remote_reply_id) { nil }
let(:remote_account) { nil } let(:remote_account) { nil }
shared_examples 'cachable response' do
it 'does not set cookies' do
expect(response.cookies).to be_empty
expect(response.headers['Set-Cookies']).to be nil
end
it 'does not set sessions' do
expect(session).to be_empty
end
it 'returns public Cache-Control header' do
expect(response.headers['Cache-Control']).to include 'public'
end
end
before do before do
allow(controller).to receive(:signed_request_account).and_return(remote_account) allow(controller).to receive(:signed_request_account).and_return(remote_account)
@ -36,9 +51,7 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do
expect(response.content_type).to eq 'application/activity+json' expect(response.content_type).to eq 'application/activity+json'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'returns items with account\'s own replies' do it 'returns items with account\'s own replies' do
json = body_as_json json = body_as_json
@ -87,9 +100,7 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do
expect(response.content_type).to eq 'application/activity+json' expect(response.content_type).to eq 'application/activity+json'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
context 'without only_other_accounts' do context 'without only_other_accounts' do
it 'returns items with account\'s own replies' do it 'returns items with account\'s own replies' do

@ -5,6 +5,21 @@ require 'rails_helper'
describe StatusesController do describe StatusesController do
render_views render_views
shared_examples 'cachable response' do
it 'does not set cookies' do
expect(response.cookies).to be_empty
expect(response.headers['Set-Cookies']).to be nil
end
it 'does not set sessions' do
expect(session).to be_empty
end
it 'returns public Cache-Control header' do
expect(response.headers['Cache-Control']).to include 'public'
end
end
describe 'GET #show' do describe 'GET #show' do
let(:account) { Fabricate(:account) } let(:account) { Fabricate(:account) }
let(:status) { Fabricate(:status, account: account) } let(:status) { Fabricate(:status, account: account) }
@ -80,9 +95,7 @@ describe StatusesController do
expect(response.headers['Vary']).to eq 'Accept' expect(response.headers['Vary']).to eq 'Accept'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'returns Content-Type header' do it 'returns Content-Type header' do
expect(response.headers['Content-Type']).to include 'application/activity+json' expect(response.headers['Content-Type']).to include 'application/activity+json'
@ -470,9 +483,7 @@ describe StatusesController do
expect(response.headers['Vary']).to eq 'Accept' expect(response.headers['Vary']).to eq 'Accept'
end end
it 'returns public Cache-Control header' do it_behaves_like 'cachable response'
expect(response.headers['Cache-Control']).to include 'public'
end
it 'returns Content-Type header' do it 'returns Content-Type header' do
expect(response.headers['Content-Type']).to include 'application/activity+json' expect(response.headers['Content-Type']).to include 'application/activity+json'

Loading…
Cancel
Save