diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2018-07-05 10:18:53 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2018-07-05 10:18:53 +0000 |
commit | fe695ebd24e59f82d16aba629dd6d117be3ee5bb (patch) | |
tree | d983a8079fc7c8f3f9e2f62642c769a4a312613d | |
parent | 82967557aa596e762512502c4d1d0803806cc2fd (diff) | |
parent | 590ffa957ff79168a844ab56ea4070d7b21f5422 (diff) | |
download | gitlab-ce-fe695ebd24e59f82d16aba629dd6d117be3ee5bb.tar.gz |
Merge branch 'issue_48474' into 'master'
Fix discussion entity for legacy diff notes
Closes #48474
See merge request gitlab-org/gitlab-ce!20214
-rw-r--r-- | app/serializers/diff_file_entity.rb | 5 | ||||
-rw-r--r-- | app/serializers/discussion_entity.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/diff/file.rb | 1 | ||||
-rw-r--r-- | spec/serializers/diff_file_entity_spec.rb | 14 | ||||
-rw-r--r-- | spec/serializers/discussion_entity_spec.rb | 19 |
5 files changed, 40 insertions, 1 deletions
diff --git a/app/serializers/diff_file_entity.rb b/app/serializers/diff_file_entity.rb index aa289a96975..61135fba97b 100644 --- a/app/serializers/diff_file_entity.rb +++ b/app/serializers/diff_file_entity.rb @@ -25,6 +25,8 @@ class DiffFileEntity < Grape::Entity expose :can_modify_blob do |diff_file| merge_request = options[:merge_request] + next unless diff_file.blob + if merge_request&.source_project && current_user can_modify_blob?(diff_file.blob, merge_request.source_project, merge_request.source_branch) else @@ -108,6 +110,7 @@ class DiffFileEntity < Grape::Entity project = merge_request.target_project next unless project + next unless diff_file.content_sha project_blob_path(project, tree_join(diff_file.content_sha, diff_file.new_path)) end @@ -125,6 +128,8 @@ class DiffFileEntity < Grape::Entity end expose :context_lines_path, if: -> (diff_file, _) { diff_file.text? } do |diff_file| + next unless diff_file.content_sha + project_blob_diff_path(diff_file.repository.project, tree_join(diff_file.content_sha, diff_file.file_path)) end diff --git a/app/serializers/discussion_entity.rb b/app/serializers/discussion_entity.rb index 63f28133a64..8a39a4950f5 100644 --- a/app/serializers/discussion_entity.rb +++ b/app/serializers/discussion_entity.rb @@ -3,7 +3,7 @@ class DiscussionEntity < Grape::Entity include NotesHelper expose :id, :reply_id - expose :position, if: -> (d, _) { d.diff_discussion? } + expose :position, if: -> (d, _) { d.diff_discussion? && !d.legacy_diff_discussion? } expose :line_code, if: -> (d, _) { d.diff_discussion? } expose :expanded?, as: :expanded expose :active?, as: :active, if: -> (d, _) { d.diff_discussion? } diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb index a9e209d5b71..d16a55720b7 100644 --- a/lib/gitlab/diff/file.rb +++ b/lib/gitlab/diff/file.rb @@ -247,6 +247,7 @@ module Gitlab lines = highlighted_diff_lines return if lines.empty? + return if blob.nil? last_line = lines.last diff --git a/spec/serializers/diff_file_entity_spec.rb b/spec/serializers/diff_file_entity_spec.rb index c4a6c117b76..00b2146dc86 100644 --- a/spec/serializers/diff_file_entity_spec.rb +++ b/spec/serializers/diff_file_entity_spec.rb @@ -25,6 +25,20 @@ describe DiffFileEntity do :context_lines_path ) end + + # Converted diff files from GitHub import does not contain blob file + # and content sha. + context 'when diff file does not have a blob and content sha' do + it 'exposes some attributes as nil' do + allow(diff_file).to receive(:content_sha).and_return(nil) + allow(diff_file).to receive(:blob).and_return(nil) + + expect(subject[:context_lines_path]).to be_nil + expect(subject[:view_path]).to be_nil + expect(subject[:highlighted_diff_lines]).to be_nil + expect(subject[:can_modify_blob]).to be_nil + end + end end context 'when there is no merge request' do diff --git a/spec/serializers/discussion_entity_spec.rb b/spec/serializers/discussion_entity_spec.rb index 44d8cc69d9b..378540a35b6 100644 --- a/spec/serializers/discussion_entity_spec.rb +++ b/spec/serializers/discussion_entity_spec.rb @@ -36,6 +36,25 @@ describe DiscussionEntity do ) end + context 'when is LegacyDiffDiscussion' do + let(:project) { create(:project) } + let(:merge_request) { create(:merge_request, source_project: project) } + let(:discussion) { create(:legacy_diff_note_on_merge_request, noteable: merge_request, project: project).to_discussion } + + it 'exposes correct attributes' do + expect(subject.keys.sort).to include( + :diff_discussion, + :expanded, + :id, + :individual_note, + :notes, + :discussion_path, + :for_commit, + :commit_id + ) + end + end + context 'when diff file is present' do let(:note) { create(:diff_note_on_merge_request) } |