Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Kaindl <bkl@use.startmail.com>2014-10-03 12:12:44 +0400
committerBernhard Kaindl <bkl@use.startmail.com>2014-10-03 13:52:29 +0400
commitc44764f523cea756f1f2efdc4db954f4f19df440 (patch)
tree217fa86abf6bcc5b4d5a301a47d93f92c66f0dae /spec/services/projects
parentf74dba8c42ba5466945085bca137cc3a3a39ee87 (diff)
Prepare ForkService to support forking projects to given namespaces
Remove overload of BaseService.initialize, so initialize gains params, which is used to pass the namespace (like e.g. in TransferService). The namespace is checked for permission to create projects in it.
Diffstat (limited to 'spec/services/projects')
-rw-r--r--spec/services/projects/fork_service_spec.rb52
1 files changed, 48 insertions, 4 deletions
diff --git a/spec/services/projects/fork_service_spec.rb b/spec/services/projects/fork_service_spec.rb
index 0edc3a8e807..5c80345c2b3 100644
--- a/spec/services/projects/fork_service_spec.rb
+++ b/spec/services/projects/fork_service_spec.rb
@@ -42,10 +42,54 @@ describe Projects::ForkService do
end
end
- def fork_project(from_project, user, fork_success = true)
- context = Projects::ForkService.new(from_project, user)
- shell = double("gitlab_shell")
- shell.stub(fork_repository: fork_success)
+ describe :fork_to_namespace do
+ before do
+ @group_owner = create(:user)
+ @developer = create(:user)
+ @project = create(:project, creator_id: @group_owner.id,
+ star_count: 777,
+ description: 'Wow, such a cool project!')
+ @group = create(:group)
+ @group.add_user(@group_owner, GroupMember::OWNER)
+ @group.add_user(@developer, GroupMember::DEVELOPER)
+ @opts = { namespace: @group }
+ end
+
+ context 'fork project for group' do
+ it 'group owner successfully forks project into the group' do
+ to_project = fork_project(@project, @group_owner, true, @opts)
+ to_project.owner.should == @group
+ to_project.namespace.should == @group
+ to_project.name.should == @project.name
+ to_project.path.should == @project.path
+ to_project.description.should == @project.description
+ to_project.star_count.should be_zero
+ end
+ end
+
+ context 'fork project for group when user not owner' do
+ it 'group developer should fail to fork project into the group' do
+ to_project = fork_project(@project, @developer, true, @opts)
+ to_project.errors[:namespace].should == ['insufficient access rights']
+ end
+ end
+
+ context 'project already exists in group' do
+ it 'should fail due to validation, not transaction failure' do
+ existing_project = create(:project, name: @project.name,
+ namespace: @group)
+ to_project = fork_project(@project, @group_owner, true, @opts)
+ existing_project.persisted?.should be_true
+ to_project.errors[:base].should == ['Invalid fork destination']
+ to_project.errors[:name].should == ['has already been taken']
+ to_project.errors[:path].should == ['has already been taken']
+ end
+ end
+ end
+
+ def fork_project(from_project, user, fork_success = true, params = {})
+ context = Projects::ForkService.new(from_project, user, params)
+ shell = double('gitlab_shell').stub(fork_repository: fork_success)
context.stub(gitlab_shell: shell)
context.execute
end