From 0618f09939b7afc607bcd983139b91e056debe4d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 26 Apr 2017 18:19:53 -0400 Subject: Add spec coverage and refactor authorize_follows controller (#2505) --- .../authorize_follow_controller_spec.rb | 6 -- .../authorize_follows_controller_spec.rb | 108 +++++++++++++++++++++ 2 files changed, 108 insertions(+), 6 deletions(-) delete mode 100644 spec/controllers/authorize_follow_controller_spec.rb create mode 100644 spec/controllers/authorize_follows_controller_spec.rb (limited to 'spec') 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 -- cgit