about summary refs log tree commit diff
path: root/spec/controllers/authorize_interactions_controller_spec.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-08-18 03:03:12 +0200
committerGitHub <noreply@github.com>2018-08-18 03:03:12 +0200
commit78fa926ed560e6a9738144bec7e152fa42104139 (patch)
tree77470dc0c731cf32e298a32d618d65f5dc5b3820 /spec/controllers/authorize_interactions_controller_spec.rb
parentbf1bde5d6a8306284a0cce89eb8f492b8c9b7a67 (diff)
Add remote interaction dialog for toots (#8202)
* Add remote interaction dialog for toots

* Change AuthorizeFollow into AuthorizeInteraction, support statuses

* Update brakeman.ignore

* Adjust how interaction buttons are display on public pages

* Fix tests
Diffstat (limited to 'spec/controllers/authorize_interactions_controller_spec.rb')
-rw-r--r--spec/controllers/authorize_interactions_controller_spec.rb111
1 files changed, 111 insertions, 0 deletions
diff --git a/spec/controllers/authorize_interactions_controller_spec.rb b/spec/controllers/authorize_interactions_controller_spec.rb
new file mode 100644
index 000000000..81fd9ceb7
--- /dev/null
+++ b/spec/controllers/authorize_interactions_controller_spec.rb
@@ -0,0 +1,111 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe AuthorizeInteractionsController do
+  render_views
+
+  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(ResolveAccountService).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 resource from url' do
+        account = Account.new
+        service = double
+        allow(ResolveURLService).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(200)
+        expect(assigns(:resource)).to eq account
+      end
+
+      it 'sets resource from acct uri' do
+        account = Account.new
+        service = double
+        allow(ResolveAccountService).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(200)
+        expect(assigns(:resource)).to eq account
+      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) { user.account }
+
+      before do
+        sign_in(user)
+      end
+
+      it 'shows error when account not found' do
+        service = double
+
+        allow(ResolveAccountService).to receive(:new).and_return(service)
+        allow(service).to receive(:call).with('user@hostname').and_return(nil)
+
+        post :create, params: { acct: 'acct:user@hostname' }
+
+        expect(response).to render_template(:error)
+      end
+
+      it 'follows account when found' do
+        target_account = Fabricate(:account)
+        service = double
+
+        allow(ResolveAccountService).to receive(:new).and_return(service)
+        allow(service).to receive(:call).with('user@hostname').and_return(target_account)
+
+        post :create, params: { acct: 'acct:user@hostname' }
+
+        expect(service).to have_received(:call).with('user@hostname')
+        expect(account.following?(target_account)).to be true
+        expect(response).to render_template(:success)
+      end
+    end
+  end
+end