commit: a8736aab7a27fd09cf30df13400becfe39a15ba1
parent: 71b266377c44ffb23a4e6ea871cfc2d656a8e32b
Author: Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
Date: Thu, 25 May 2017 23:07:38 +0900
Cover TagsController more (#3306)
Diffstat:
1 file changed, 51 insertions(+), 9 deletions(-)
diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb
@@ -4,19 +4,61 @@ RSpec.describe TagsController, type: :controller do
render_views
describe 'GET #show' do
- before do
- Fabricate(:tag, name: 'test')
- end
+ let!(:tag) { Fabricate(:tag, name: 'test') }
+ let!(:local) { Fabricate(:status, tags: [ tag ], text: 'local #test') }
+ let!(:remote) { Fabricate(:status, tags: [ tag ], text: 'remote #test', account: Fabricate(:account, domain: 'remote')) }
+ let!(:late) { Fabricate(:status, tags: [ tag ], text: 'late #test') }
+
+ context 'when tag exists' do
+ it 'returns http success' do
+ get :show, params: { id: 'test', max_id: late.id }
+ expect(response).to have_http_status(:success)
+ end
+
+ it 'renders public layout' do
+ get :show, params: { id: 'test', max_id: late.id }
+ expect(response).to render_template layout: 'public'
+ end
+
+ it 'renders only local statuses if local parameter is specified' do
+ get :show, params: { id: 'test', local: true, max_id: late.id }
+
+ expect(assigns(:tag)).to eq tag
+ statuses = assigns(:statuses).to_a
+ expect(statuses.size).to eq 1
+ expect(statuses[0]).to eq local
+ end
+
+ it 'renders local and remote statuses if local parameter is not specified' do
+ get :show, params: { id: 'test', max_id: late.id }
+
+ expect(assigns(:tag)).to eq tag
+ statuses = assigns(:statuses).to_a
+ expect(statuses.size).to eq 2
+ expect(statuses[0]).to eq remote
+ expect(statuses[1]).to eq local
+ end
+
+ it 'filters statuses by the current account' do
+ user = Fabricate(:user)
+ user.account.block!(remote.account)
+
+ sign_in(user)
+ get :show, params: { id: 'test', max_id: late.id }
- it 'returns http success' do
- get :show, params: { id: 'test' }
- expect(response).to have_http_status(:success)
+ expect(assigns(:tag)).to eq tag
+ statuses = assigns(:statuses).to_a
+ expect(statuses.size).to eq 1
+ expect(statuses[0]).to eq local
+ end
end
- it 'returns http missing for non-existent tag' do
- get :show, params: { id: 'none' }
+ context 'when tag does not exist' do
+ it 'returns http missing for non-existent tag' do
+ get :show, params: { id: 'none' }
- expect(response).to have_http_status(:missing)
+ expect(response).to have_http_status(:missing)
+ end
end
end
end