diff options
author | Matt Jankowski <mjankowski@thoughtbot.com> | 2017-04-26 18:19:53 -0400 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-04-27 00:19:53 +0200 |
commit | 0618f09939b7afc607bcd983139b91e056debe4d (patch) | |
tree | e6b362f7f2928a09bf5dd1c387c1737421b0f359 /spec | |
parent | a23eaf720e08db8503c443816e652b3683525e02 (diff) |
Add spec coverage and refactor authorize_follows controller (#2505)
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/authorize_follow_controller_spec.rb | 6 | ||||
-rw-r--r-- | spec/controllers/authorize_follows_controller_spec.rb | 108 |
2 files changed, 108 insertions, 6 deletions
diff --git a/spec/controllers/authorize_follow_controller_spec.rb b/spec/controllers/authorize_follow_controller_spec.rb deleted file mode 100644 index 954efd53e..000000000 --- a/spec/controllers/authorize_follow_controller_spec.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'rails_helper' - -RSpec.describe AuthorizeFollowController, type: :controller do - describe 'GET #new' - describe 'POST #create' -end diff --git a/spec/controllers/authorize_follows_controller_spec.rb b/spec/controllers/authorize_follows_controller_spec.rb new file mode 100644 index 000000000..f65b620cc --- /dev/null +++ b/spec/controllers/authorize_follows_controller_spec.rb @@ -0,0 +1,108 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe AuthorizeFollowsController do + describe 'GET #show' do + describe 'when signed out' do + it 'redirects to sign in page' do + get :show + + expect(response).to redirect_to(new_user_session_path) + end + end + + describe 'when signed in' do + let(:user) { Fabricate(:user) } + let(:account) { Fabricate(:account, user: user) } + + before do + sign_in(user) + end + + it 'renders error without acct param' do + get :show + + expect(response).to render_template(:error) + end + + it 'renders error when account cant be found' do + service = double + allow(FollowRemoteAccountService).to receive(:new).and_return(service) + allow(service).to receive(:call).with('missing@hostname').and_return(nil) + + get :show, params: { acct: 'acct:missing@hostname' } + + expect(response).to render_template(:error) + expect(service).to have_received(:call).with('missing@hostname') + end + + it 'sets account from url' do + account = double + service = double + allow(FetchRemoteAccountService).to receive(:new).and_return(service) + allow(service).to receive(:call).with('http://example.com').and_return(account) + + get :show, params: { acct: 'http://example.com' } + + expect(response).to have_http_status(:success) + expect(service).to have_received(:call).with('http://example.com') + end + + it 'sets account from acct uri' do + account = double + service = double + allow(FollowRemoteAccountService).to receive(:new).and_return(service) + allow(service).to receive(:call).with('found@hostname').and_return(account) + + get :show, params: { acct: 'acct:found@hostname' } + + expect(response).to have_http_status(:success) + expect(service).to have_received(:call).with('found@hostname') + end + end + end + + describe 'POST #create' do + describe 'when signed out' do + it 'redirects to sign in page' do + post :create + + expect(response).to redirect_to(new_user_session_path) + end + end + + describe 'when signed in' do + let(:user) { Fabricate(:user) } + let(:account) { Fabricate(:account, user: user) } + + before do + sign_in(user) + end + + it 'shows error when account not found' do + service = double + allow(FollowService).to receive(:new).and_return(service) + allow(service).to receive(:call).with(account, 'user@hostname').and_return(nil) + + post :create, params: { acct: 'acct:user@hostname' } + + expect(service).to have_received(:call).with(account, 'user@hostname') + expect(response).to render_template(:error) + end + + it 'follows account when found' do + target_account = double(id: '123') + result_account = double(target_account: target_account) + service = double + allow(FollowService).to receive(:new).and_return(service) + allow(service).to receive(:call).with(account, 'user@hostname').and_return(result_account) + + post :create, params: { acct: 'acct:user@hostname' } + + expect(service).to have_received(:call).with(account, 'user@hostname') + expect(response).to redirect_to(web_url('accounts/123')) + end + end + end +end |