1 # frozen_string_literal: true
5 RSpec
.describe ActivityPub
::CollectionsController, type
: :controller do
6 let!
(:account) { Fabricate(:account) }
7 let!
(:private_pinned) { Fabricate(:status, account
: account
, text
: 'secret private stuff', visibility
: :private) }
8 let(:remote_account) { nil }
10 shared_examples
'cacheable response' do
11 it
'does not set cookies' do
12 expect(response
.cookies
).to be_empty
13 expect(response
.headers
['Set-Cookies']).to be
nil
16 it
'does not set sessions' do
18 expect(session
).to be_empty
21 it
'returns public Cache-Control header' do
22 expect(response
.headers
['Cache-Control']).to
include 'public'
27 allow(controller
).to
receive(:signed_request_account).and_return(remote_account
)
29 Fabricate(:status_pin, account
: account
)
30 Fabricate(:status_pin, account
: account
)
31 Fabricate(:status_pin, account
: account
, status
: private_pinned
)
32 Fabricate(:status, account
: account
, visibility
: :private)
35 describe
'GET #show' do
36 context
'when id is "featured"' do
37 context
'without signature' do
38 let(:remote_account) { nil }
40 subject(:response) { get
:show, params
: { id
: 'featured', account_username
: account
.username
} }
41 subject(:body) { body_as_json
}
43 it
'returns http success' do
44 expect(response
).to
have_http_status(200)
47 it
'returns application/activity+json
' do
48 expect(response.media_type).to eq 'application
/activity+json
'
51 it_behaves_like 'cacheable response
'
53 it 'returns orderedItems with pinned statuses
' do
54 expect(body[:orderedItems]).to be_an Array
55 expect(body[:orderedItems].size).to eq 3
58 it 'includes URI of
private pinned status
' do
59 expect(body[:orderedItems]).to include(ActivityPub::TagManager.instance.uri_for(private_pinned))
62 it 'does
not include contents of
private pinned status
' do
63 expect(response.body).not_to include(private_pinned.text)
66 context 'when account is permanently suspended
' do
69 account
.deletion_request
.destroy
72 it
'returns http gone' do
73 expect(response
).to
have_http_status(410)
77 context
'when account is temporarily suspended' do
82 it
'returns http forbidden' do
83 expect(response
).to
have_http_status(403)
88 context
'with signature' do
89 let(:remote_account) { Fabricate(:account, domain
: 'example.com') }
93 get
:show, params
: { id
: 'featured', account_username
: account
.username
}
96 it
'returns http success' do
97 expect(response
).to
have_http_status(200)
100 it
'returns application/activity+json
' do
101 expect(response.media_type).to eq 'application
/activity+json
'
104 it_behaves_like 'cacheable response
'
106 it 'returns orderedItems with pinned statuses
' do
108 expect(json[:orderedItems]).to be_an Array
109 expect(json[:orderedItems].size).to eq 3
112 it 'includes URI of
private pinned status
' do
114 expect(json[:orderedItems]).to include(ActivityPub::TagManager.instance.uri_for(private_pinned))
117 it 'does
not include contents of
private pinned status
' do
118 expect(response.body).not_to include(private_pinned.text)
122 context 'in authorized fetch mode
' do
124 allow(controller).to receive(:authorized_fetch_mode?).and_return(true)
127 context 'when signed request account is blocked
' do
129 account.block!(remote_account
)
130 get
:show, params
: { id
: 'featured', account_username
: account
.username
}
133 it
'returns http success' do
134 expect(response
).to
have_http_status(200)
137 it
'returns application/activity+json
' do
138 expect(response.media_type).to eq 'application
/activity+json
'
141 it 'returns
private Cache-Control header
' do
142 expect(response.headers['Cache-Control
']).to include 'private'
145 it 'returns empty orderedItems
' do
147 expect(json[:orderedItems]).to be_an Array
148 expect(json[:orderedItems].size).to eq 0
152 context 'when signed request account is domain blocked
' do
154 account.block_domain!(remote_account
.domain
)
155 get
:show, params
: { id
: 'featured', account_username
: account
.username
}
158 it
'returns http success' do
159 expect(response
).to
have_http_status(200)
162 it
'returns application/activity+json
' do
163 expect(response.media_type).to eq 'application
/activity+json
'
166 it 'returns
private Cache-Control header
' do
167 expect(response.headers['Cache-Control
']).to include 'private'
170 it 'returns empty orderedItems
' do
172 expect(json[:orderedItems]).to be_an Array
173 expect(json[:orderedItems].size).to eq 0
180 context 'when id is
not "featured"' do
181 it 'returns http
not found
' do
182 get :show, params: { id: 'hoge
', account_username: account.username }
183 expect(response).to have_http_status(404)