diff --git a/features/project/ff_merge_requests.feature b/features/project/ff_merge_requests.feature new file mode 100644 index 0000000000..38b4ff4b95 --- /dev/null +++ b/features/project/ff_merge_requests.feature @@ -0,0 +1,22 @@ +Feature: Project Ff Merge Requests + Background: + Given I sign in as a user + And I own project "Shop" + And project "Shop" have "Bug NS-05" open merge request with diffs inside + And ff merge enabled + And merge request "Bug NS-05" is mergeable + + Scenario: I do ff-only merge + Given merge request "Bug NS-05" is rebased + When I visit merge request page "Bug NS-05" + Then I should see ff-only merge button + + Scenario: I do rebase before ff-only merge + Given rebase before merge enabled + When I visit merge request page "Bug NS-05" + Then I should see rebase button + + Scenario: I should do rebase before ff-only merge + When I visit merge request page "Bug NS-05" + Then I should not see rebase button + And I should see rebase message diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature index 8ac88e5a37..319531eda7 100644 --- a/features/project/merge_requests.feature +++ b/features/project/merge_requests.feature @@ -269,12 +269,3 @@ Feature: Project Merge Requests And I select "fix" as source Then I see auto-suggested approver And I can add it to approver list - - - Scenario: I should see rebase checkbox - Given project "Shop" have "Bug NS-05" open merge request with diffs inside - And rebase before merge enabled - And merge request "Bug NS-05" is mergeable - And I visit merge request page "Bug NS-05" - And merge request is mergeable - Then I should see rebase checkbox diff --git a/features/steps/project/ff_merge_requests.rb b/features/steps/project/ff_merge_requests.rb new file mode 100644 index 0000000000..2ab299e4cf --- /dev/null +++ b/features/steps/project/ff_merge_requests.rb @@ -0,0 +1,90 @@ +class Spinach::Features::ProjectFfMergeRequests < Spinach::FeatureSteps + include SharedAuthentication + include SharedIssuable + include SharedProject + include SharedNote + include SharedPaths + include SharedMarkdown + include SharedDiffNote + include SharedUser + + step 'project "Shop" have "Bug NS-05" open merge request with diffs inside' do + create(:merge_request_with_diffs, + title: "Bug NS-05", + source_project: project, + target_project: project, + author: project.users.first) + end + + step 'merge request is mergeable' do + expect(page).to have_button 'Accept Merge Request' + end + + step 'I should see ff-only merge button' do + expect(page).to have_content "Fast-forward merge without creating merge commit" + expect(page).to have_button 'Accept Merge Request' + end + + step 'merge request "Bug NS-05" is mergeable' do + merge_request.mark_as_mergeable + end + + step 'I accept this merge request' do + page.within '.mr-state-widget' do + click_button "Accept Merge Request" + end + end + + step 'I should see merged request' do + page.within '.issue-box' do + expect(page).to have_content "Merged" + end + end + + step 'ff merge enabled' do + project = merge_request.target_project + project.merge_requests_ff_only_enabled = true + project.save! + end + + step 'I should not see rebase button' do + expect(page).to_not have_button "Rebase" + end + + step 'I should see rebase button' do + expect(page).to have_button "Rebase" + end + + step 'I should see rebase message' do + expect(page).to have_content "Fast-forward merge is not possible. Branch must be rebased first" + end + + step 'merge request "Bug NS-05" is rebased' do + merge_request.source_branch = 'flatten-dir' + merge_request.target_branch = 'improve/awesome' + merge_request.reload_code + merge_request.save! + end + + step 'rebase before merge enabled' do + project = merge_request.target_project + project.merge_requests_rebase_enabled = true + project.save! + end + + step 'I click on "Email Patches"' do + click_link "Email Patches" + end + + step 'I click on "Plain Diff"' do + click_link "Plain Diff" + end + + step 'I should see a patch diff' do + expect(page).to have_content('diff --git') + end + + def merge_request + @merge_request ||= MergeRequest.find_by!(title: "Bug NS-05") + end +end diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb index 9c622f86c6..929faae99d 100644 --- a/features/steps/project/merge_requests.rb +++ b/features/steps/project/merge_requests.rb @@ -432,16 +432,6 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps end end - step 'rebase before merge enabled' do - project = merge_request.target_project - project.merge_requests_rebase_enabled = true - project.save! - end - - step 'I should see rebase checkbox' do - expect(page).to have_content 'Rebase before merge' - end - step 'I click on "Email Patches"' do click_link "Email Patches" end