diff options
author | Sean McGivern <sean@gitlab.com> | 2016-08-05 12:15:06 +0100 |
---|---|---|
committer | Fatih Acet <acetfatih@gmail.com> | 2016-08-12 23:24:48 +0300 |
commit | ce7eb4e49279ab56cac992b6743fe77cac578b48 (patch) | |
tree | 80f620351a9e2238ef50df8eeccbf1b5acc76c7e /spec/features/merge_requests/conflicts_spec.rb | |
parent | f322c3027442b8f8c4800c19056bcd967be4018b (diff) | |
download | gitlab-ce-ce7eb4e49279ab56cac992b6743fe77cac578b48.tar.gz |
Add more tests for conflicts
Diffstat (limited to 'spec/features/merge_requests/conflicts_spec.rb')
-rw-r--r-- | spec/features/merge_requests/conflicts_spec.rb | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/spec/features/merge_requests/conflicts_spec.rb b/spec/features/merge_requests/conflicts_spec.rb new file mode 100644 index 00000000000..0b39b4dbebb --- /dev/null +++ b/spec/features/merge_requests/conflicts_spec.rb @@ -0,0 +1,68 @@ +require 'spec_helper' + +feature 'Merge request conflict resolution', js: true, feature: true do + include WaitForAjax + + let(:user) { create(:user) } + let(:project) { create(:project) } + + def create_merge_request(source_branch) + create(:merge_request, source_branch: source_branch, target_branch: 'conflict-start', source_project: project) do |mr| + mr.mark_as_unmergeable + end + end + + context 'when a merge request can be resolved in the UI' do + let(:merge_request) { create_merge_request('conflict-resolvable') } + + before do + project.team << [user, :developer] + login_as(user) + + visit namespace_project_merge_request_path(project.namespace, project, merge_request) + end + + it 'shows a link to the conflict resolution page' do + expect(page).to have_link('conflicts', href: /\/conflicts\Z/) + end + + context 'visiting the conflicts resolution page' do + before { click_link('conflicts', href: /\/conflicts\Z/) } + + it 'shows the conflicts' do + expect(find('#conflicts')).to have_content('popen.rb') + end + end + end + + UNRESOLVABLE_CONFLICTS = { + 'conflict-too-large' => 'when the conflicts contain a large file', + 'conflict-binary-file' => 'when the conflicts contain a binary file', + 'conflict-contains-conflict-markers' => 'when the conflicts contain a file with ambiguous conflict markers', + 'conflict-missing-side' => 'when the conflicts contain a file edited in one branch and deleted in another' + } + + UNRESOLVABLE_CONFLICTS.each do |source_branch, description| + context description do + let(:merge_request) { create_merge_request(source_branch) } + + before do + project.team << [user, :developer] + login_as(user) + + visit namespace_project_merge_request_path(project.namespace, project, merge_request) + end + + it 'does not show a link to the conflict resolution page' do + expect(page).not_to have_link('conflicts', href: /\/conflicts\Z/) + end + + it 'shows an error if the conflicts page is visited directly' do + visit current_url + '/conflicts' + wait_for_ajax + + expect(find('#conflicts')).to have_content('Unable to resolve conflicts') + end + end + end +end |