diff options
author | Igor <idrozdov@gitlab.com> | 2019-05-28 07:12:29 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-05-28 07:12:29 +0000 |
commit | c92db3db71dc261d547bb08873fdafeff9be98dc (patch) | |
tree | f39670dd29b85f3cfba4232c0e272de7504da4ba /spec/services/suggestions | |
parent | 6da066c16d5db1e41444448816419b156ebf579b (diff) | |
download | gitlab-ce-c92db3db71dc261d547bb08873fdafeff9be98dc.tar.gz |
Fix removing empty lines via suggestions
Before this fix, a suggestion which just removes
an empty line wasn't appliable
Diffstat (limited to 'spec/services/suggestions')
-rw-r--r-- | spec/services/suggestions/apply_service_spec.rb | 68 | ||||
-rw-r--r-- | spec/services/suggestions/create_service_spec.rb | 20 |
2 files changed, 81 insertions, 7 deletions
diff --git a/spec/services/suggestions/apply_service_spec.rb b/spec/services/suggestions/apply_service_spec.rb index 7732767137c..bdbcb0fdb07 100644 --- a/spec/services/suggestions/apply_service_spec.rb +++ b/spec/services/suggestions/apply_service_spec.rb @@ -5,6 +5,16 @@ require 'spec_helper' describe Suggestions::ApplyService do include ProjectForksHelper + def build_position(args = {}) + default_args = { old_path: "files/ruby/popen.rb", + new_path: "files/ruby/popen.rb", + old_line: nil, + new_line: 9, + diff_refs: merge_request.diff_refs } + + Gitlab::Diff::Position.new(default_args.merge(args)) + end + shared_examples 'successfully creates commit and updates suggestion' do def apply(suggestion) result = subject.execute(suggestion) @@ -43,13 +53,7 @@ describe Suggestions::ApplyService do let(:project) { create(:project, :repository) } let(:user) { create(:user, :commit_email) } - let(:position) do - Gitlab::Diff::Position.new(old_path: "files/ruby/popen.rb", - new_path: "files/ruby/popen.rb", - old_line: nil, - new_line: 9, - diff_refs: merge_request.diff_refs) - end + let(:position) { build_position } let(:diff_note) do create(:diff_note_on_merge_request, noteable: merge_request, position: position, project: project) @@ -333,6 +337,56 @@ describe Suggestions::ApplyService do it_behaves_like 'successfully creates commit and updates suggestion' end + + context 'remove an empty line suggestion' do + let(:expected_content) do + <<~CONTENT + require 'fileutils' + require 'open3' + + module Popen + extend self + + def popen(cmd, path=nil) + unless cmd.is_a?(Array) + raise RuntimeError, "System commands must be given as an array of strings" + end + + path ||= Dir.pwd + vars = { + "PWD" => path + } + + options = { + chdir: path + } + + unless File.directory?(path) + FileUtils.mkdir_p(path) + end + + @cmd_output = "" + @cmd_status = 0 + + Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr| + @cmd_output << stdout.read + @cmd_output << stderr.read + @cmd_status = wait_thr.value.exitstatus + end + + return @cmd_output, @cmd_status + end + end + CONTENT + end + + let(:position) { build_position(new_line: 13) } + let(:suggestion) do + create(:suggestion, :content_from_repo, note: diff_note, to_content: "") + end + + it_behaves_like 'successfully creates commit and updates suggestion' + end end context 'fork-project' do diff --git a/spec/services/suggestions/create_service_spec.rb b/spec/services/suggestions/create_service_spec.rb index ce4990a34a4..ccd44e615a8 100644 --- a/spec/services/suggestions/create_service_spec.rb +++ b/spec/services/suggestions/create_service_spec.rb @@ -151,6 +151,26 @@ describe Suggestions::CreateService do subject.execute end end + + context 'when a patch removes an empty line' do + let(:markdown) do + <<-MARKDOWN.strip_heredoc + ```suggestion + ``` + MARKDOWN + end + let(:position) { build_position(new_line: 13) } + + it 'creates an appliable suggestion' do + subject.execute + + suggestion = note.suggestions.last + + expect(suggestion).to be_appliable + expect(suggestion.from_content).to eq("\n") + expect(suggestion.to_content).to eq("") + end + end end end end |