From 2aa4d7f10fe3f43095b5864cc797b67a84740922 Mon Sep 17 00:00:00 2001
From: Stan Hu <stanhu@gmail.com>
Date: Tue, 31 Jul 2018 14:30:01 -0700
Subject: [PATCH] Fix bug where fallback diff notes would not have an
 associated position

---
 lib/gitlab/bitbucket_server_import/importer.rb |  6 +++---
 .../bitbucket_server_import/importer_spec.rb   | 18 ++++++++++++++----
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/lib/gitlab/bitbucket_server_import/importer.rb b/lib/gitlab/bitbucket_server_import/importer.rb
index a10cd860639..b7d9b4982c1 100644
--- a/lib/gitlab/bitbucket_server_import/importer.rb
+++ b/lib/gitlab/bitbucket_server_import/importer.rb
@@ -253,15 +253,15 @@ module Gitlab
         # Bitbucket Server supports the ability to comment on any line, not just the
         # line in the diff. If we can't add the note as a DiffNote, fallback to creating
         # a regular note.
-        create_fallback_diff_note(merge_request, comment)
+        create_fallback_diff_note(merge_request, comment, position)
       rescue StandardError => e
         errors << { type: :pull_request, id: comment.id, errors: e.message }
         nil
       end
 
-      def create_fallback_diff_note(merge_request, comment)
+      def create_fallback_diff_note(merge_request, comment, position)
         attributes = pull_request_comment_attributes(comment)
-        attributes[:note] = "*Comment on file: #{comment.file_path}, old line: #{comment.old_pos}, new line: #{comment.new_pos}*\n\n" + attributes[:note]
+        attributes[:note] = "*Comment on #{position.old_path}:#{position.old_line} -> #{position.new_path}:#{position.new_line}*\n\n" + attributes[:note]
 
         merge_request.notes.create!(attributes)
       end
diff --git a/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb b/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb
index bba25ae1845..ae067a9f79a 100644
--- a/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb
+++ b/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb
@@ -178,6 +178,13 @@ describe Gitlab::BitbucketServerImport::Importer do
     end
 
     it 'falls back to comments if diff comments fail to validate' do
+      reply = instance_double(
+        BitbucketServer::Representation::Comment,
+        author_email: 'someuser@gitlab.com',
+        note: 'I agree',
+        created_at: now,
+        updated_at: now)
+
       # https://gitlab.com/gitlab-org/gitlab-test/compare/c1acaa58bbcbc3eafe538cb8274ba387047b69f8...5937ac0a7beb003549fc5fd26fc247ad
       inline_note = instance_double(
         BitbucketServer::Representation::PullRequestComment,
@@ -189,7 +196,7 @@ describe Gitlab::BitbucketServerImport::Importer do
         new_pos: 9,
         note: 'This is a note with an invalid line position.',
         author_email: project.owner.email,
-        comments: [],
+        comments: [reply],
         created_at: now,
         updated_at: now,
         parent_comment: nil)
@@ -201,15 +208,18 @@ describe Gitlab::BitbucketServerImport::Importer do
         merge_event?: false,
         comment: inline_note)
 
+      allow(reply).to receive(:parent_comment).and_return(inline_note)
+
       expect(subject.client).to receive(:activities).and_return([inline_comment])
 
       expect { subject.execute }.to change { MergeRequest.count }.by(1)
 
       merge_request = MergeRequest.first
-      expect(merge_request.notes.count).to eq(1)
-      note = merge_request.notes.first
+      expect(merge_request.notes.count).to eq(2)
+      notes = merge_request.notes
 
-      expect(note.note).to start_with('*Comment on file:')
+      expect(notes.first.note).to start_with('*Comment on .gitmodules')
+      expect(notes.second.note).to start_with('*Comment on .gitmodules')
     end
 
     it 'restores branches of inaccessible SHAs' do
-- 
2.30.9