diff options
Diffstat (limited to 'spec/lib/gitlab/suggestions/suggestion_set_spec.rb')
-rw-r--r-- | spec/lib/gitlab/suggestions/suggestion_set_spec.rb | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/spec/lib/gitlab/suggestions/suggestion_set_spec.rb b/spec/lib/gitlab/suggestions/suggestion_set_spec.rb new file mode 100644 index 00000000000..8c61e6c42a6 --- /dev/null +++ b/spec/lib/gitlab/suggestions/suggestion_set_spec.rb @@ -0,0 +1,110 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Suggestions::SuggestionSet do + def create_suggestion(file_path, new_line, to_content) + position = Gitlab::Diff::Position.new(old_path: file_path, + new_path: file_path, + old_line: nil, + new_line: new_line, + diff_refs: merge_request.diff_refs) + + diff_note = create(:diff_note_on_merge_request, + noteable: merge_request, + position: position, + project: project) + + create(:suggestion, + :content_from_repo, + note: diff_note, + to_content: to_content) + end + + let_it_be(:user) { create(:user) } + + let_it_be(:project) { create(:project, :repository) } + + let_it_be(:merge_request) do + create(:merge_request, source_project: project, target_project: project) + end + + let_it_be(:suggestion) { create(:suggestion)} + + let_it_be(:suggestion2) do + create_suggestion('files/ruby/popen.rb', 13, "*** SUGGESTION 2 ***") + end + + let_it_be(:suggestion3) do + create_suggestion('files/ruby/regex.rb', 22, "*** SUGGESTION 3 ***") + end + + let_it_be(:unappliable_suggestion) { create(:suggestion, :unappliable) } + + let(:suggestion_set) { described_class.new([suggestion]) } + + describe '#project' do + it 'returns the project associated with the suggestions' do + expected_project = suggestion.project + + expect(suggestion_set.project).to be(expected_project) + end + end + + describe '#branch' do + it 'returns the branch associated with the suggestions' do + expected_branch = suggestion.branch + + expect(suggestion_set.branch).to be(expected_branch) + end + end + + describe '#valid?' do + it 'returns true if no errors are found' do + expect(suggestion_set.valid?).to be(true) + end + + it 'returns false if an error is found' do + suggestion_set = described_class.new([unappliable_suggestion]) + + expect(suggestion_set.valid?).to be(false) + end + end + + describe '#error_message' do + it 'returns an error message if an error is found' do + suggestion_set = described_class.new([unappliable_suggestion]) + + expect(suggestion_set.error_message).to be_a(String) + end + + it 'returns nil if no errors are found' do + expect(suggestion_set.error_message).to be(nil) + end + end + + describe '#actions' do + it 'returns an array of hashes with proper key/value pairs' do + first_action = suggestion_set.actions.first + + file_path, file_suggestion = suggestion_set + .send(:suggestions_per_file).first + + expect(first_action[:action]).to be('update') + expect(first_action[:file_path]).to eq(file_path) + expect(first_action[:content]).to eq(file_suggestion.new_content) + end + end + + describe '#file_paths' do + it 'returns an array of unique file paths associated with the suggestions' do + suggestion_set = described_class.new([suggestion, suggestion2, suggestion3]) + + expected_paths = %w(files/ruby/popen.rb files/ruby/regex.rb) + + actual_paths = suggestion_set.file_paths + + expect(actual_paths.sort).to eq(expected_paths) + end + end +end |