diff options
6 files changed, 71 insertions, 215 deletions
diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-forked-merge-requests-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-forked-merge-requests-feature.yml new file mode 100644 index 00000000000..2ac43490c26 --- /dev/null +++ b/changelogs/unreleased/blackst0ne-replace-spinach-project-forked-merge-requests-feature.yml @@ -0,0 +1,5 @@ +--- +title: 'Replace the `project/forked_merge_requests.feature` spinach test with an rspec analog' +merge_request: 18867 +author: '@blackst0ne' +type: other diff --git a/features/project/forked_merge_requests.feature b/features/project/forked_merge_requests.feature deleted file mode 100644 index 9809b0ea0fe..00000000000 --- a/features/project/forked_merge_requests.feature +++ /dev/null @@ -1,51 +0,0 @@ -Feature: Project Forked Merge Requests - Background: - Given I sign in as a user - And I am a member of project "Shop" - And I have a project forked off of "Shop" called "Forked Shop" - - @javascript - Scenario: I submit new unassigned merge request to a forked project - Given I visit project "Forked Shop" merge requests page - And I click link "New Merge Request" - And I fill out a "Merge Request On Forked Project" merge request - And I submit the merge request - Then I should see merge request "Merge Request On Forked Project" - - # TODO: Improve it so it does not fail randomly - # - #@javascript - #Scenario: I can edit a forked merge request - #Given I visit project "Forked Shop" merge requests page - #And I click link "New Merge Request" - #And I fill out a "Merge Request On Forked Project" merge request - #And I submit the merge request - #And I should see merge request "Merge Request On Forked Project" - #And I click link edit "Merge Request On Forked Project" - #Then I see the edit page prefilled for "Merge Request On Forked Project" - #And I update the merge request title - #And I save the merge request - #Then I should see the edited merge request - - Scenario: I cannot submit an invalid merge request - Given I visit project "Forked Shop" merge requests page - And I click link "New Merge Request" - And I fill out an invalid "Merge Request On Forked Project" merge request - Then I should see validation errors - - @javascript - Scenario: Merge request should target fork repository by default - Given I visit project "Forked Shop" merge requests page - And I click link "New Merge Request" - Then the target repository should be the original repository - - @javascript - Scenario: I see the users in the target project for a new merge request - Given I sign in as an admin - And I have a project forked off of "Shop" called "Forked Shop" - Then I visit project "Forked Shop" merge requests page - And I click link "New Merge Request" - And I fill out a "Merge Request On Forked Project" merge request - When I click "Assign to" dropdown" - Then I should see the target project ID in the input selector - And I should see the users from the target project ID diff --git a/features/steps/project/forked_merge_requests.rb b/features/steps/project/forked_merge_requests.rb deleted file mode 100644 index 82b931b2246..00000000000 --- a/features/steps/project/forked_merge_requests.rb +++ /dev/null @@ -1,139 +0,0 @@ -class Spinach::Features::ProjectForkedMergeRequests < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedNote - include SharedPaths - include Select2Helper - include WaitForRequests - include ProjectForksHelper - - step 'I am a member of project "Shop"' do - @project = ::Project.find_by(name: "Shop") - @project ||= create(:project, :repository, name: "Shop") - @project.add_reporter(@user) - end - - step 'I have a project forked off of "Shop" called "Forked Shop"' do - @forked_project = fork_project(@project, @user, - namespace: @user.namespace, - repository: true) - 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 merge request "Merge Request On Forked Project"' do - expect(@project.merge_requests.size).to be >= 1 - @merge_request = @project.merge_requests.last - expect(current_path).to eq project_merge_request_path(@project, @merge_request) - expect(@merge_request.title).to eq "Merge Request On Forked Project" - expect(@merge_request.source_project).to eq @forked_project - expect(@merge_request.source_branch).to eq "fix" - expect(@merge_request.target_branch).to eq "master" - expect(page).to have_content @forked_project.full_path - expect(page).to have_content @project.full_path - expect(page).to have_content @merge_request.source_branch - expect(page).to have_content @merge_request.target_branch - - wait_for_requests - end - - step 'I fill out a "Merge Request On Forked Project" merge request' do - expect(page).to have_content('Source branch') - expect(page).to have_content('Target branch') - - first('.js-source-project').click - first('.dropdown-source-project a', text: @forked_project.full_path) - - first('.js-target-project').click - first('.dropdown-target-project a', text: @project.full_path) - - first('.js-source-branch').click - wait_for_requests - first('.js-source-branch-dropdown .dropdown-content a', text: 'fix').click - - click_button "Compare branches and continue" - - expect(page).to have_css("h3.page-title", text: "New Merge Request") - - page.within 'form#new_merge_request' do - fill_in "merge_request_title", with: "Merge Request On Forked Project" - end - end - - step 'I submit the merge request' do - click_button "Submit merge request" - end - - step 'I update the merge request title' do - fill_in "merge_request_title", with: "An Edited Forked Merge Request" - end - - step 'I save the merge request' do - click_button "Save changes" - end - - step 'I should see the edited merge request' do - expect(page).to have_content "An Edited Forked Merge Request" - expect(@project.merge_requests.size).to be >= 1 - @merge_request = @project.merge_requests.last - expect(current_path).to eq project_merge_request_path(@project, @merge_request) - expect(@merge_request.source_project).to eq @forked_project - expect(@merge_request.source_branch).to eq "fix" - expect(@merge_request.target_branch).to eq "master" - expect(page).to have_content @forked_project.full_path - expect(page).to have_content @project.full_path - expect(page).to have_content @merge_request.source_branch - expect(page).to have_content @merge_request.target_branch - end - - step 'I should see last push widget' do - expect(page).to have_content "You pushed to new_design" - expect(page).to have_link "Create Merge Request" - end - - step 'I click link edit "Merge Request On Forked Project"' do - find("#edit_merge_request").click - end - - step 'I see the edit page prefilled for "Merge Request On Forked Project"' do - expect(current_path).to eq edit_project_merge_request_path(@project, @merge_request) - expect(page).to have_content "Edit merge request #{@merge_request.to_reference}" - expect(find("#merge_request_title").value).to eq "Merge Request On Forked Project" - end - - step 'I fill out an invalid "Merge Request On Forked Project" merge request' do - expect(find_by_id("merge_request_source_project_id", visible: false).value).to eq @forked_project.id.to_s - expect(find_by_id("merge_request_target_project_id", visible: false).value).to eq @project.id.to_s - expect(find_by_id("merge_request_source_branch", visible: false).value).to eq nil - expect(find_by_id("merge_request_target_branch", visible: false).value).to eq "master" - click_button "Compare branches" - end - - step 'I should see validation errors' do - expect(page).to have_content "You must select source and target branch" - end - - step 'the target repository should be the original repository' do - expect(find_by_id("merge_request_target_project_id").value).to eq "#{@project.id}" - end - - step 'I click "Assign to" dropdown"' do - click_button 'Assignee' - end - - step 'I should see the target project ID in the input selector' do - expect(find('.js-assignee-search')["data-project-id"]).to eq "#{@project.id}" - end - - step 'I should see the users from the target project ID' do - page.within '.dropdown-menu-user' do - expect(page).to have_content 'Unassigned' - expect(page).to have_content current_user.name - expect(page).to have_content @project.users.first.name - end - end -end diff --git a/features/steps/shared/authentication.rb b/features/steps/shared/authentication.rb index 27dd391b83d..df1428d8266 100644 --- a/features/steps/shared/authentication.rb +++ b/features/steps/shared/authentication.rb @@ -15,13 +15,6 @@ module SharedAuthentication gitlab_sign_in(create(:user)) end - step 'I sign in as an admin' do - sign_out(@user) if @user - - @user = create(:admin) - sign_in(@user) - end - step 'I should be redirected to sign in page' do expect(current_path).to eq new_user_session_path end diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb index fec57812af5..8f2f5ca26a9 100644 --- a/features/steps/shared/paths.rb +++ b/features/steps/shared/paths.rb @@ -252,10 +252,6 @@ module SharedPaths visit project_path(project) end - step 'I visit project "Forked Shop" merge requests page' do - visit project_merge_requests_path(@forked_project) - end - step 'I visit edit project "Shop" page' do visit edit_project_path(project) end diff --git a/spec/features/projects/merge_requests/user_creates_merge_request_spec.rb b/spec/features/projects/merge_requests/user_creates_merge_request_spec.rb index f285c6c8783..1f21ef7b382 100644 --- a/spec/features/projects/merge_requests/user_creates_merge_request_spec.rb +++ b/spec/features/projects/merge_requests/user_creates_merge_request_spec.rb @@ -1,32 +1,84 @@ -require 'spec_helper' +require "spec_helper" -describe 'User creates a merge request', :js do +describe "User creates a merge request", :js do + include ProjectForksHelper + + let(:title) { "Some feature" } let(:project) { create(:project, :repository) } let(:user) { create(:user) } before do project.add_master(user) sign_in(user) + end + it "creates a merge request" do visit(project_new_merge_request_path(project)) - end - it 'creates a merge request' do - find('.js-source-branch').click - click_link('fix') + find(".js-source-branch").click + click_link("fix") - find('.js-target-branch').click - click_link('feature') + find(".js-target-branch").click + click_link("feature") - click_button('Compare branches') + click_button("Compare branches") - fill_in('merge_request_title', with: 'Wiki Feature') - click_button('Submit merge request') + fill_in("Title", with: title) + click_button("Submit merge request") - page.within('.merge-request') do - expect(page).to have_content('Wiki Feature') + page.within(".merge-request") do + expect(page).to have_content(title) end + end + + context "to a forked project" do + let(:forked_project) { fork_project(project, user, namespace: user.namespace, repository: true) } + + it "creates a merge request" do + visit(project_new_merge_request_path(forked_project)) + + expect(page).to have_content("Source branch").and have_content("Target branch") + expect(find("#merge_request_target_project_id", visible: false).value).to eq(project.id.to_s) + + click_button("Compare branches and continue") + + expect(page).to have_content("You must select source and target branch") + + first(".js-source-project").click + first(".dropdown-source-project a", text: forked_project.full_path) + + first(".js-target-project").click + first(".dropdown-target-project a", text: project.full_path) + + first(".js-source-branch").click - wait_for_requests + wait_for_requests + + source_branch = "fix" + + first(".js-source-branch-dropdown .dropdown-content a", text: source_branch).click + + click_button("Compare branches and continue") + + expect(page).to have_css("h3.page-title", text: "New Merge Request") + + page.within("form#new_merge_request") do + fill_in("Title", with: title) + end + + click_button("Assignee") + + expect(find(".js-assignee-search")["data-project-id"]).to eq(project.id.to_s) + + page.within(".dropdown-menu-user") do + expect(page).to have_content("Unassigned") + .and have_content(user.name) + .and have_content(project.users.first.name) + end + + click_button("Submit merge request") + + expect(page).to have_content(title).and have_content("Request to merge #{user.namespace.name}:#{source_branch} into master") + end end end |