From 0d2c68d546cb58760a9d30a41b1454b02c462ad8 Mon Sep 17 00:00:00 2001 From: Toon Claes Date: Fri, 20 Jan 2017 22:41:03 +0100 Subject: [PATCH] Deduplicate tests for Merge Request buttons Use shared examples to test the presence of the Merge Request button on the various pages. --- .../branches/merge_request_buttons_spec.rb | 62 ------------- .../commits/merge_request_button_spec.rb | 62 ------------- .../compare/merge_request_button_spec.rb | 62 ------------- .../projects/merge_request_button_spec.rb | 86 +++++++++++++++++++ 4 files changed, 86 insertions(+), 186 deletions(-) delete mode 100644 spec/features/projects/branches/merge_request_buttons_spec.rb delete mode 100644 spec/features/projects/commits/merge_request_button_spec.rb delete mode 100644 spec/features/projects/compare/merge_request_button_spec.rb create mode 100644 spec/features/projects/merge_request_button_spec.rb diff --git a/spec/features/projects/branches/merge_request_buttons_spec.rb b/spec/features/projects/branches/merge_request_buttons_spec.rb deleted file mode 100644 index 6864113fcb4..00000000000 --- a/spec/features/projects/branches/merge_request_buttons_spec.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'spec_helper' - -feature 'Merge Request buttons on branches page', feature: true do - let(:user) { create(:user) } - let(:project) { create(:project) } - - context 'not logged in' do - it 'does not show merge request buttons' do - visit namespace_project_branches_path(project.namespace, project) - - expect(page).to have_no_link('Merge Request') - end - end - - context 'logged in a developer' do - before do - login_as(user) - project.team << [user, :developer] - end - - it 'shows merge request buttons' do - href = new_namespace_project_merge_request_path(project.namespace, - project, - merge_request: { source_branch: 'feature', - target_branch: 'master' }) - - visit namespace_project_branches_path(project.namespace, project) - - expect(page).to have_link('Merge Request', href: href) - end - end - - context 'logged in as non-member' do - before do - login_as(user) - end - - it 'does not show merge request buttons' do - visit namespace_project_branches_path(project.namespace, project) - - expect(page).to have_no_link('Merge Request') - end - - context 'on own fork of project' do - let(:forked_project) do - create(:project, forked_from_project: project) - end - let(:user) { forked_project.owner } - - it 'shows merge request buttons' do - href = new_namespace_project_merge_request_path(forked_project.namespace, - forked_project, - merge_request: { source_branch: 'feature', - target_branch: 'master' }) - - visit namespace_project_branches_path(forked_project.namespace, forked_project) - - expect(page).to have_link('Merge Request', href: href) - end - end - end -end diff --git a/spec/features/projects/commits/merge_request_button_spec.rb b/spec/features/projects/commits/merge_request_button_spec.rb deleted file mode 100644 index c986d087eba..00000000000 --- a/spec/features/projects/commits/merge_request_button_spec.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'spec_helper' - -feature 'Merge Request button on commits page', feature: true do - let(:user) { create(:user) } - let(:project) { create(:project) } - - context 'not logged in' do - it 'does not show Create Merge Request button' do - visit namespace_project_commits_path(project.namespace, project, 'feature') - - expect(page).to have_no_link('Create Merge Request') - end - end - - context 'logged in a developer' do - before do - login_as(user) - project.team << [user, :developer] - end - - it 'shows Create Merge Request button' do - href = new_namespace_project_merge_request_path(project.namespace, - project, - merge_request: { source_branch: 'feature', - target_branch: 'master' }) - - visit namespace_project_commits_path(project.namespace, project, 'feature') - - expect(page).to have_link('Create Merge Request', href: href) - end - end - - context 'logged in as non-member' do - before do - login_as(user) - end - - it 'does not show Create Merge Request button' do - visit namespace_project_commits_path(project.namespace, project, 'feature') - - expect(page).to have_no_link('Create Merge Request') - end - - context 'on own fork of project' do - let(:forked_project) do - create(:project, forked_from_project: project) - end - let(:user) { forked_project.owner } - - it 'shows Create Merge Request button' do - href = new_namespace_project_merge_request_path(forked_project.namespace, - forked_project, - merge_request: { source_branch: 'feature', - target_branch: 'master' }) - - visit namespace_project_commits_path(forked_project.namespace, forked_project, 'feature') - - expect(page).to have_link('Create Merge Request', href: href) - end - end - end -end diff --git a/spec/features/projects/compare/merge_request_button_spec.rb b/spec/features/projects/compare/merge_request_button_spec.rb deleted file mode 100644 index 2b49c394759..00000000000 --- a/spec/features/projects/compare/merge_request_button_spec.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'spec_helper' - -feature 'Merge Request button on commits page', feature: true do - let(:user) { create(:user) } - let(:project) { create(:project) } - - context 'not logged in' do - it 'does not show Create Merge Request button' do - visit namespace_project_compare_path(project.namespace, project, from: 'master', to: 'feature') - - expect(page).to have_no_link('Create Merge Request') - end - end - - context 'logged in a developer' do - before do - login_as(user) - project.team << [user, :developer] - end - - it 'shows Create Merge Request button' do - href = new_namespace_project_merge_request_path(project.namespace, - project, - merge_request: { source_branch: 'feature', - target_branch: 'master' }) - - visit namespace_project_compare_path(project.namespace, project, from: 'master', to: 'feature') - - expect(page).to have_link('Create Merge Request', href: href) - end - end - - context 'logged in as non-member' do - before do - login_as(user) - end - - it 'does not show Create Merge Request button' do - visit namespace_project_compare_path(project.namespace, project, from: 'master', to: 'feature') - - expect(page).to have_no_link('Create Merge Request') - end - - context 'on own fork of project' do - let(:forked_project) do - create(:project, forked_from_project: project) - end - let(:user) { forked_project.owner } - - it 'shows Create Merge Request button' do - href = new_namespace_project_merge_request_path(forked_project.namespace, - forked_project, - merge_request: { source_branch: 'feature', - target_branch: 'master' }) - - visit namespace_project_compare_path(forked_project.namespace, forked_project, from: 'master', to: 'feature') - - expect(page).to have_link('Create Merge Request', href: href) - end - end - end -end diff --git a/spec/features/projects/merge_request_button_spec.rb b/spec/features/projects/merge_request_button_spec.rb new file mode 100644 index 00000000000..177038f9a4c --- /dev/null +++ b/spec/features/projects/merge_request_button_spec.rb @@ -0,0 +1,86 @@ +require 'spec_helper' + +feature 'Merge Request button', feature: true do + shared_examples 'Merge Request button only shown when allowed' do + let(:user) { create(:user) } + let(:project) { create(:project) } + let(:forked_project) { create(:project, forked_from_project: project) } + + context 'not logged in' do + it 'does not show Create Merge Request button' do + visit url + + expect(page).not_to have_link(label) + end + end + + context 'logged in as developer' do + before do + login_as(user) + project.team << [user, :developer] + end + + it 'shows Create Merge Request button' do + href = new_namespace_project_merge_request_path(project.namespace, + project, + merge_request: { source_branch: 'feature', + target_branch: 'master' }) + + visit url + + expect(page).to have_link(label, href: href) + end + end + + context 'logged in as non-member' do + before do + login_as(user) + end + + it 'does not show Create Merge Request button' do + visit url + + expect(page).not_to have_link(label) + end + + context 'on own fork of project' do + let(:user) { forked_project.owner } + + it 'shows Create Merge Request button' do + href = new_namespace_project_merge_request_path(forked_project.namespace, + forked_project, + merge_request: { source_branch: 'feature', + target_branch: 'master' }) + + visit fork_url + + expect(page).to have_link(label, href: href) + end + end + end + end + + context 'on branches page' do + it_behaves_like 'Merge Request button only shown when allowed' do + let(:label) { 'Merge Request' } + let(:url) { namespace_project_branches_path(project.namespace, project) } + let(:fork_url) { namespace_project_branches_path(forked_project.namespace, forked_project) } + end + end + + context 'on compare page' do + it_behaves_like 'Merge Request button only shown when allowed' do + let(:label) { 'Create Merge Request' } + let(:url) { namespace_project_compare_path(project.namespace, project, from: 'master', to: 'feature') } + let(:fork_url) { namespace_project_compare_path(forked_project.namespace, forked_project, from: 'master', to: 'feature') } + end + end + + context 'on commits page' do + it_behaves_like 'Merge Request button only shown when allowed' do + let(:label) { 'Create Merge Request' } + let(:url) { namespace_project_commits_path(project.namespace, project, 'feature') } + let(:fork_url) { namespace_project_commits_path(forked_project.namespace, forked_project, 'feature') } + end + end +end