summaryrefslogtreecommitdiff
path: root/spec/controllers/concerns/checks_collaboration_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers/concerns/checks_collaboration_spec.rb')
-rw-r--r--spec/controllers/concerns/checks_collaboration_spec.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/spec/controllers/concerns/checks_collaboration_spec.rb b/spec/controllers/concerns/checks_collaboration_spec.rb
new file mode 100644
index 00000000000..1bd764290ae
--- /dev/null
+++ b/spec/controllers/concerns/checks_collaboration_spec.rb
@@ -0,0 +1,55 @@
+require 'spec_helper'
+
+describe ChecksCollaboration do
+ include ProjectForksHelper
+
+ let(:helper) do
+ fake_class = Class.new(ApplicationController) do
+ include ChecksCollaboration
+ end
+
+ fake_class.new
+ end
+
+ describe '#can_collaborate_with_project?' do
+ let(:user) { create(:user) }
+ let(:project) { create(:project, :public) }
+
+ before do
+ allow(helper).to receive(:current_user).and_return(user)
+ allow(helper).to receive(:can?) do |user, ability, subject|
+ Ability.allowed?(user, ability, subject)
+ end
+ end
+
+ it 'is true if the user can push to the project' do
+ project.add_developer(user)
+
+ expect(helper.can_collaborate_with_project?(project)).to be_truthy
+ end
+
+ it 'is true when the user can push to a branch of the project' do
+ fake_access = double('Gitlab::UserAccess')
+ expect(fake_access).to receive(:can_push_to_branch?).with('a-branch').and_return(true)
+ expect(Gitlab::UserAccess).to receive(:new).with(user, project: project).and_return(fake_access)
+
+ expect(helper.can_collaborate_with_project?(project, ref: 'a-branch')).to be_truthy
+ end
+
+ context 'when the user has forked the project' do
+ before do
+ fork_project(project, user, namespace: user.namespace)
+ end
+
+ it 'is true' do
+ expect(helper.can_collaborate_with_project?(project)).to be_truthy
+ end
+
+ it 'is false when the project is archived' do
+ project.archived = true
+
+ expect(helper.can_collaborate_with_project?(project)).to be_falsy
+ end
+ end
+ end
+end