gitlab-org--gitlab-foss/features/steps/project/fork.rb
Nick Thomas 3ed80a0176 Enforce the fork_project permission in Projects::CreateService
Projects::ForkService delegates to this service almost entirely, but needed
one small change so it would propagate create errors correctly.

CreateService#execute needs significant refactoring; it is now right at the
complexity limit set by Rubocop. I avoided doing so in this commit to keep the
diff as small as possible.

Several tests depend on the insecure behaviour of ForkService, so fi them up at
the same time.
2016-09-27 13:17:56 +01:00

84 lines
2.4 KiB
Ruby

class Spinach::Features::ProjectFork < Spinach::FeatureSteps
include SharedAuthentication
include SharedPaths
include SharedProject
step 'I click link "Fork"' do
expect(page).to have_content "Shop"
click_link "Fork project"
end
step 'I am a member of project "Shop"' do
@project = create(:project, name: "Shop")
@project.team << [@user, :reporter]
end
step 'I should see the forked project page' do
expect(page).to have_content "Forked from"
end
step 'I already have a project named "Shop" in my namespace' do
@my_project = create(:project, name: "Shop", namespace: current_user.namespace)
end
step 'I should see a "Name has already been taken" warning' do
expect(page).to have_content "Name has already been taken"
end
step 'I fork to my namespace' do
page.within '.fork-namespaces' do
click_link current_user.name
end
end
step 'I should see "New merge request"' do
expect(page).to have_content(/new merge request/i)
end
step 'I goto the Merge Requests page' do
page.within '.layout-nav' do
click_link "Merge Requests"
end
end
step 'I click link "New merge request"' do
expect(page).to have_content(/new merge request/i)
click_link "New Merge Request"
end
step 'I should see the new merge request page for my namespace' do
current_path.should have_content(/#{current_user.namespace.name}/i)
end
step 'I visit the forks page of the "Shop" project' do
@project = Project.where(name: 'Shop').last
visit namespace_project_forks_path(@project.namespace, @project)
end
step 'I should see my fork on the list' do
page.within('.projects-list-holder') do
project = @user.fork_of(@project)
expect(page).to have_content("#{project.namespace.human_name} / #{project.name}")
end
end
step 'I make forked repo invalid' do
project = @user.fork_of(@project)
project.path = 'test-crappy-path'
project.save!
end
step 'There is an existent fork of the "Shop" project' do
user = create(:user, name: 'Mike')
@project.team << [user, :reporter]
@forked_project = Projects::ForkService.new(@project, user).execute
end
step 'I should not see the other fork listed' do
expect(page).not_to have_content("#{@forked_project.namespace.human_name} / #{@forked_project.name}")
end
step 'I should see a private fork notice' do
expect(page).to have_content("1 private fork")
end
end