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 cachablegh/stable
parent
bcf85b5208
commit
f55dd193f9
|
@ -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'
|
||||||
|
|
Reference in New Issue