end
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
def require_admin!
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
let(:format) { 'html' }
expect(response.content_type).to eq 'application/activity+json'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'renders account' do
json = body_as_json
expect(response.content_type).to eq 'application/activity+json'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'returns Vary header with Signature' do
expect(response.headers['Vary']).to include 'Signature'
expect(response.content_type).to eq 'application/activity+json'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'renders account' do
json = body_as_json
expect(response).to have_http_status(200)
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
end
context do
let!(:account) { Fabricate(:account) }
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
allow(controller).to receive(:signed_request_account).and_return(remote_account)
expect(response.content_type).to eq 'application/activity+json'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'returns orderedItems with pinned statuses' do
json = body_as_json
expect(response.content_type).to eq 'application/activity+json'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'returns orderedItems with pinned statuses' do
json = body_as_json
RSpec.describe ActivityPub::OutboxesController, type: :controller do
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
Fabricate(:status, account: account, visibility: :public)
Fabricate(:status, account: account, visibility: :unlisted)
expect(json[:totalItems]).to eq 4
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
end
context 'with page requested' do
expect(json[:orderedItems].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
end
end
let(:remote_reply_id) { 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
allow(controller).to receive(:signed_request_account).and_return(remote_account)
expect(response.content_type).to eq 'application/activity+json'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'returns items with account\'s own replies' do
json = body_as_json
expect(response.content_type).to eq 'application/activity+json'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
context 'without only_other_accounts' do
it 'returns items with account\'s own replies' do
describe StatusesController do
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
let(:account) { Fabricate(:account) }
let(:status) { Fabricate(:status, account: account) }
expect(response.headers['Vary']).to eq 'Accept'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'returns Content-Type header' do
expect(response.headers['Content-Type']).to include 'application/activity+json'
expect(response.headers['Vary']).to eq 'Accept'
end
- it 'returns public Cache-Control header' do
- expect(response.headers['Cache-Control']).to include 'public'
- end
+ it_behaves_like 'cachable response'
it 'returns Content-Type header' do
expect(response.headers['Content-Type']).to include 'application/activity+json'