summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Sumaran <alfredo@gitlab.com>2016-10-05 07:57:57 -0500
committerAlfredo Sumaran <alfredo@gitlab.com>2016-10-13 14:16:35 -0500
commit54bfe70795e289b86485b2a57d72b6711e4994bd (patch)
tree6cba31fce7354bd6f07daf31f057b6fa233e2589
parentc4142cf9c0c0b217034c60a0a973d2e96b17a428 (diff)
downloadgitlab-ce-54bfe70795e289b86485b2a57d72b6711e4994bd.tar.gz
Add more tests to check conflicts resolution
-rw-r--r--app/assets/javascripts/merge_conflict_data_provider.js.es62
-rw-r--r--app/assets/javascripts/merge_conflicts/merge_conflict_store.js.es64
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb1
-rw-r--r--spec/features/merge_requests/conflicts_spec.rb145
4 files changed, 101 insertions, 51 deletions
diff --git a/app/assets/javascripts/merge_conflict_data_provider.js.es6 b/app/assets/javascripts/merge_conflict_data_provider.js.es6
index 6d1d3f36b33..5877d2f1896 100644
--- a/app/assets/javascripts/merge_conflict_data_provider.js.es6
+++ b/app/assets/javascripts/merge_conflict_data_provider.js.es6
@@ -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++) {
diff --git a/app/assets/javascripts/merge_conflicts/merge_conflict_store.js.es6 b/app/assets/javascripts/merge_conflicts/merge_conflict_store.js.es6
index 83bcc3f51aa..5c5c65f29d4 100644
--- a/app/assets/javascripts/merge_conflicts/merge_conflict_store.js.es6
+++ b/app/assets/javascripts/merge_conflicts/merge_conflict_store.js.es6
@@ -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) {
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index 06b37aa4997..31f43bdc89a 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -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
diff --git a/spec/features/merge_requests/conflicts_spec.rb b/spec/features/merge_requests/conflicts_spec.rb
index 4cecc22aa6c..d258ff52bbb 100644
--- a/spec/features/merge_requests/conflicts_spec.rb
+++ b/spec/features/merge_requests/conflicts_spec.rb
@@ -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)
+ within find('.files-wrapper .diff-file', text: 'files/ruby/regex.rb') do
+ all('button', text: 'Use ours').each do |button|
+ button.click
+ end
+ end
- visit namespace_project_merge_request_path(project.namespace, project, merge_request)
- end
+ click_button 'Commit conflict resolution'
+ wait_for_ajax
- it 'shows a link to the conflict resolution page' do
- expect(page).to have_link('conflicts', href: /\/conflicts\Z/)
- end
+ expect(page).to have_content('All merge conflicts were resolved')
+ merge_request.reload_diff
- context 'visiting the conflicts resolution page' do
- before { click_link('conflicts', href: /\/conflicts\Z/) }
+ click_on 'Changes'
+ wait_for_ajax
- it 'shows the conflicts' do
- begin
- expect(find('#conflicts')).to have_content('popen.rb')
- rescue Capybara::Poltergeist::JavascriptError
- retry
- end
+ 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
- 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
-
- 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
+ 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
- click_on 'Changes'
- wait_for_ajax
+ 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')
- expect(page).to have_content('One morning')
- expect(page).to have_content('Gregor Samsa woke from troubled dreams')
- end
+ 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 'when a merge request can be resolved in the UI' do
- let(:merge_request) { create_merge_request('conflict-contains-conflict-markers') }
-
+ context 'can be resolved in the UI' do
before do
project.team << [user, :developer]
login_as(user)
+ end
- visit namespace_project_merge_request_path(project.namespace, project, merge_request)
+ context 'the conflicts are resolvable' do
+ let(:merge_request) { create_merge_request('conflict-resolvable') }
+
+ 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 'a conflict contain markers' do
- before { click_link('conflicts', href: /\/conflicts\Z/) }
+ 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 'resolves files manually' do
+ 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')