Add more tests to check conflicts resolution
This commit is contained in:
parent
c4142cf9c0
commit
54bfe70795
4 changed files with 102 additions and 52 deletions
|
@ -290,7 +290,7 @@ class MergeConflictDataProvider {
|
|||
isReadyToCommit() {
|
||||
const vi = this.vueInstance;
|
||||
const files = this.vueInstance.conflictsData.files;
|
||||
const hasCommitMessage = $.trim(this.vueInstance.conflictsData.commitMessage).length;
|
||||
const hasCommitMessage = this.vueInstance.conflictsData.commitMessage.trim();
|
||||
let unresolved = 0;
|
||||
|
||||
for (let i = 0, l = files.length; i < l; i++) {
|
||||
|
|
|
@ -321,7 +321,8 @@
|
|||
let numberConflicts = 0;
|
||||
let resolvedConflicts = Object.keys(file.resolutionData).length
|
||||
|
||||
// We only check if
|
||||
// We only check for conflicts type 'text'
|
||||
// since conflicts `text_editor` can´t be resolved in interactive mode
|
||||
if (file.type === CONFLICT_TYPES.TEXT) {
|
||||
for (let j = 0, k = file.sections.length; j < k; j++) {
|
||||
if (file.sections[j].conflict) {
|
||||
|
@ -334,6 +335,7 @@
|
|||
}
|
||||
}
|
||||
} else if (file.resolveMode === EDIT_RESOLVE_MODE) {
|
||||
|
||||
// Unlikely to happen since switching to Edit mode saves content automatically.
|
||||
// Checking anyway in case the save strategy changes in the future
|
||||
if (!file.content) {
|
||||
|
|
|
@ -659,6 +659,7 @@ describe Projects::MergeRequestsController do
|
|||
id: merge_request.iid
|
||||
|
||||
expect(merge_request.reload.title).to eq(merge_request.wipless_title)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET conflict_for_path' do
|
||||
|
|
|
@ -12,74 +12,121 @@ feature 'Merge request conflict resolution', js: true, feature: true do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when a merge request can be resolved in the UI' do
|
||||
let(:merge_request) { create_merge_request('conflict-resolvable') }
|
||||
shared_examples "conflicts are resolved in Interactive mode" do
|
||||
it 'conflicts are resolved in Interactive mode' do
|
||||
within find('.files-wrapper .diff-file', text: 'files/ruby/popen.rb') do
|
||||
click_button 'Use ours'
|
||||
end
|
||||
|
||||
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
|
||||
begin
|
||||
expect(find('#conflicts')).to have_content('popen.rb')
|
||||
rescue Capybara::Poltergeist::JavascriptError
|
||||
retry
|
||||
within find('.files-wrapper .diff-file', text: 'files/ruby/regex.rb') do
|
||||
all('button', text: 'Use ours').each do |button|
|
||||
button.click
|
||||
end
|
||||
end
|
||||
|
||||
context 'when in inline mode' do
|
||||
it 'resolves files manually' do
|
||||
within find('.files-wrapper .diff-file', text: 'files/ruby/popen.rb') do
|
||||
click_button 'Edit inline'
|
||||
wait_for_ajax
|
||||
execute_script('ace.edit($(".files-wrapper .diff-file pre")[0]).setValue("One morning");')
|
||||
end
|
||||
click_button 'Commit conflict resolution'
|
||||
wait_for_ajax
|
||||
|
||||
within find('.files-wrapper .diff-file', text: 'files/ruby/regex.rb') do
|
||||
click_button 'Edit inline'
|
||||
wait_for_ajax
|
||||
execute_script('ace.edit($(".files-wrapper .diff-file pre")[1]).setValue("Gregor Samsa woke from troubled dreams");')
|
||||
end
|
||||
expect(page).to have_content('All merge conflicts were resolved')
|
||||
merge_request.reload_diff
|
||||
|
||||
click_button 'Commit conflict resolution'
|
||||
wait_for_ajax
|
||||
expect(page).to have_content('All merge conflicts were resolved')
|
||||
merge_request.reload_diff
|
||||
click_on 'Changes'
|
||||
wait_for_ajax
|
||||
|
||||
click_on 'Changes'
|
||||
wait_for_ajax
|
||||
within find('.diff-file', text: 'files/ruby/popen.rb') do
|
||||
expect(page).to have_selector('.line_content.new', text: "vars = { 'PWD' => path }")
|
||||
expect(page).to have_selector('.line_content.new', text: "options = { chdir: path }")
|
||||
end
|
||||
|
||||
expect(page).to have_content('One morning')
|
||||
expect(page).to have_content('Gregor Samsa woke from troubled dreams')
|
||||
end
|
||||
within find('.diff-file', text: 'files/ruby/regex.rb') do
|
||||
expect(page).to have_selector('.line_content.new', text: "def username_regexp")
|
||||
expect(page).to have_selector('.line_content.new', text: "def project_name_regexp")
|
||||
expect(page).to have_selector('.line_content.new', text: "def path_regexp")
|
||||
expect(page).to have_selector('.line_content.new', text: "def archive_formats_regexp")
|
||||
expect(page).to have_selector('.line_content.new', text: "def git_reference_regexp")
|
||||
expect(page).to have_selector('.line_content.new', text: "def default_regexp")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a merge request can be resolved in the UI' do
|
||||
let(:merge_request) { create_merge_request('conflict-contains-conflict-markers') }
|
||||
shared_examples "conflicts are resolved in Edit inline mode" do
|
||||
it 'conflicts are resolved in Edit inline mode' do
|
||||
expect(find('#conflicts')).to have_content('popen.rb')
|
||||
|
||||
within find('.files-wrapper .diff-file', text: 'files/ruby/popen.rb') do
|
||||
click_button 'Edit inline'
|
||||
wait_for_ajax
|
||||
execute_script('ace.edit($(".files-wrapper .diff-file pre")[0]).setValue("One morning");')
|
||||
end
|
||||
|
||||
within find('.files-wrapper .diff-file', text: 'files/ruby/regex.rb') do
|
||||
click_button 'Edit inline'
|
||||
wait_for_ajax
|
||||
execute_script('ace.edit($(".files-wrapper .diff-file pre")[1]).setValue("Gregor Samsa woke from troubled dreams");')
|
||||
end
|
||||
|
||||
click_button 'Commit conflict resolution'
|
||||
wait_for_ajax
|
||||
expect(page).to have_content('All merge conflicts were resolved')
|
||||
merge_request.reload_diff
|
||||
|
||||
click_on 'Changes'
|
||||
wait_for_ajax
|
||||
|
||||
expect(page).to have_content('One morning')
|
||||
expect(page).to have_content('Gregor Samsa woke from troubled dreams')
|
||||
end
|
||||
end
|
||||
|
||||
context 'can be resolved in the UI' do
|
||||
before do
|
||||
project.team << [user, :developer]
|
||||
login_as(user)
|
||||
|
||||
visit namespace_project_merge_request_path(project.namespace, project, merge_request)
|
||||
end
|
||||
|
||||
context 'a conflict contain markers' do
|
||||
before { click_link('conflicts', href: /\/conflicts\Z/) }
|
||||
context 'the conflicts are resolvable' do
|
||||
let(:merge_request) { create_merge_request('conflict-resolvable') }
|
||||
|
||||
it 'resolves files manually' do
|
||||
before { visit namespace_project_merge_request_path(project.namespace, project, merge_request) }
|
||||
|
||||
it 'shows a link to the conflict resolution page' do
|
||||
expect(page).to have_link('conflicts', href: /\/conflicts\Z/)
|
||||
end
|
||||
|
||||
context 'in Inline view mode' do
|
||||
before { click_link('conflicts', href: /\/conflicts\Z/) }
|
||||
|
||||
include_examples "conflicts are resolved in Interactive mode"
|
||||
include_examples "conflicts are resolved in Edit inline mode"
|
||||
end
|
||||
|
||||
context 'in Parallel view mode' do
|
||||
before do
|
||||
click_link('conflicts', href: /\/conflicts\Z/)
|
||||
click_button 'Side-by-side'
|
||||
end
|
||||
|
||||
include_examples "conflicts are resolved in Interactive mode"
|
||||
include_examples "conflicts are resolved in Edit inline mode"
|
||||
end
|
||||
end
|
||||
|
||||
context 'the conflict contain markers' do
|
||||
let(:merge_request) { create_merge_request('conflict-contains-conflict-markers') }
|
||||
|
||||
before do
|
||||
visit namespace_project_merge_request_path(project.namespace, project, merge_request)
|
||||
click_link('conflicts', href: /\/conflicts\Z/)
|
||||
end
|
||||
|
||||
it 'conflicts can not be resolved in Interactive mode' do
|
||||
within find('.files-wrapper .diff-file', text: 'files/markdown/ruby-style-guide.md') do
|
||||
expect(page).not_to have_content 'Interactive mode'
|
||||
expect(page).not_to have_content 'Edit inline'
|
||||
end
|
||||
end
|
||||
|
||||
it 'conflicts are resolved in Edit inline mode' do
|
||||
within find('.files-wrapper .diff-file', text: 'files/markdown/ruby-style-guide.md') do
|
||||
wait_for_ajax
|
||||
execute_script('ace.edit($(".files-wrapper .diff-file pre")[0]).setValue("Gregor Samsa woke from troubled dreams");')
|
||||
|
@ -94,7 +141,7 @@ feature 'Merge request conflict resolution', js: true, feature: true do
|
|||
|
||||
click_on 'Changes'
|
||||
wait_for_ajax
|
||||
find('.nothing-here-block', visible: true).click
|
||||
find('.click-to-expand').click
|
||||
wait_for_ajax
|
||||
|
||||
expect(page).to have_content('Gregor Samsa woke from troubled dreams')
|
||||
|
|
Loading…
Reference in a new issue