about summary refs log tree commit diff
path: root/spec/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers')
-rw-r--r--spec/controllers/authorize_follow_controller_spec.rb6
-rw-r--r--spec/controllers/authorize_follows_controller_spec.rb108
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