From e4558010ac28cb80af3457044f82c5ccfa8ff71f Mon Sep 17 00:00:00 2001 From: Semyon Pupkov Date: Sun, 4 Mar 2018 18:53:51 +0100 Subject: Move project fork spinach tests to RSpec https://gitlab.com/gitlab-org/gitlab-ce/issues/23036 --- features/project/fork.feature | 49 ----------------- features/steps/project/fork.rb | 85 ----------------------------- spec/features/projects/fork_spec.rb | 104 ++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 134 deletions(-) delete mode 100644 features/project/fork.feature delete mode 100644 features/steps/project/fork.rb diff --git a/features/project/fork.feature b/features/project/fork.feature deleted file mode 100644 index ca3f2771aa5..00000000000 --- a/features/project/fork.feature +++ /dev/null @@ -1,49 +0,0 @@ -Feature: Project Fork - Background: - Given I sign in as a user - And I am a member of project "Shop" - When I visit project "Shop" page - - Scenario: User fork a project - Given I click link "Fork" - When I fork to my namespace - Then I should see the forked project page - - Scenario: User already has forked the project - Given I already have a project named "Shop" in my namespace - And I click link "Fork" - When I fork to my namespace - Then I should see a "Name has already been taken" warning - - Scenario: Merge request on canonical repo goes to fork merge request page - Given I click link "Fork" - And I fork to my namespace - Then I should see the forked project page - When I visit project "Shop" page - Then I should see "New merge request" - And I goto the Merge Requests page - Then I should see "New merge request" - And I click link "New merge request" - Then I should see the new merge request page for my namespace - - Scenario: Viewing forks of a Project - Given I click link "Fork" - When I fork to my namespace - And I visit the forks page of the "Shop" project - Then I should see my fork on the list - - Scenario: Viewing forks of a Project that has no repo - Given I click link "Fork" - When I fork to my namespace - And I make forked repo invalid - And I visit the forks page of the "Shop" project - Then I should see my fork on the list - - Scenario: Viewing private forks of a Project - Given There is an existent fork of the "Shop" project - And I click link "Fork" - When I fork to my namespace - And I visit the forks page of the "Shop" project - Then I should see my fork on the list - And I should not see the other fork listed - And I should see a private fork notice diff --git a/features/steps/project/fork.rb b/features/steps/project/fork.rb deleted file mode 100644 index 0350e1c2aef..00000000000 --- a/features/steps/project/fork.rb +++ /dev/null @@ -1,85 +0,0 @@ -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" - end - - step 'I am a member of project "Shop"' do - @project = create(:project, :repository, name: "Shop") - @project.add_reporter(@user) - 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, :repository, 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-thumbnail-container' 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 '.nav-sidebar' do - first(:link, "Merge Requests").click - end - end - - step 'I click link "New merge request"' do - page.within '#content-body' do - page.has_link?('New Merge Request') ? click_link("New Merge Request") : click_link('New merge request') - end - 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').first - visit project_forks_path(@project) - end - - step 'I should see my fork on the list' do - page.within('.js-projects-list-holder') do - project = @user.fork_of(@project.reload) - 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.reload) - 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.add_reporter(user) - @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 diff --git a/spec/features/projects/fork_spec.rb b/spec/features/projects/fork_spec.rb index 842840cc04c..1743b1e083f 100644 --- a/spec/features/projects/fork_spec.rb +++ b/spec/features/projects/fork_spec.rb @@ -25,6 +25,110 @@ describe 'Project fork' do expect(page).to have_css('a.disabled', text: 'Fork') end + it 'forks the project' do + visit project_path(project) + + click_link 'Fork' + + page.within '.fork-thumbnail-container' do + click_link user.name + end + + expect(page).to have_content 'Forked from' + + visit project_path(project) + + expect(page).to have_content(/new merge request/i) + + page.within '.nav-sidebar' do + first(:link, 'Merge Requests').click + end + + expect(page).to have_content(/new merge request/i) + + page.within '#content-body' do + click_link('New merge request') + end + + expect(current_path).to have_content(/#{user.namespace.name}/i) + end + + it 'shows the forked project on the list' do + visit project_path(project) + + click_link 'Fork' + + page.within '.fork-thumbnail-container' do + click_link user.name + end + + visit project_forks_path(project) + + forked_project = user.fork_of(project.reload) + + page.within('.js-projects-list-holder') do + expect(page).to have_content("#{forked_project.namespace.human_name} / #{forked_project.name}") + end + + forked_project.update!(path: 'test-crappy-path') + + visit project_forks_path(project) + + page.within('.js-projects-list-holder') do + expect(page).to have_content("#{forked_project.namespace.human_name} / #{forked_project.name}") + end + end + + context 'when the project is private' do + let(:project) { create(:project, :repository) } + let(:another_user) { create(:user, name: 'Mike') } + + before do + project.add_reporter(user) + project.add_reporter(another_user) + end + + it 'renders private forks of the project' do + visit project_path(project) + + another_project_fork = Projects::ForkService.new(project, another_user).execute + + click_link 'Fork' + + page.within '.fork-thumbnail-container' do + click_link user.name + end + + visit project_forks_path(project) + + page.within('.js-projects-list-holder') do + user_project_fork = user.fork_of(project.reload) + expect(page).to have_content("#{user_project_fork.namespace.human_name} / #{user_project_fork.name}") + end + + expect(page).not_to have_content("#{another_project_fork.namespace.human_name} / #{another_project_fork.name}") + expect(page).to have_content("1 private fork") + end + end + + context 'when the user already forked the project' do + before do + create(:project, :repository, name: project.name, namespace: user.namespace) + end + + it 'renders error' do + visit project_path(project) + + click_link 'Fork' + + page.within '.fork-thumbnail-container' do + click_link user.name + end + + expect(page).to have_content "Name has already been taken" + end + end + context 'master in group' do let(:group) { create(:group) } -- cgit v1.2.1