Import bitbucket issues that are reported by an anonymous user

For these kind of issues, the "reporter" field is present but zero.
In such a case, "fetch" will not return the default value, but it will
return nil.
Hence, importing fails, because the "username" field of nil is referenced

Fixes issue #44381
This commit is contained in:
Bart Libert 2018-04-05 13:44:18 +02:00
parent 942fe5fe79
commit 4bfd54f3d2
No known key found for this signature in database
GPG key ID: D411F9DCB205D4C1
4 changed files with 37 additions and 1 deletions

View file

@ -0,0 +1,5 @@
---
title: Import bitbucket issues that are reported by an anonymous user
merge_request: 18199
author: bartl
type: fixed

View file

@ -12,7 +12,7 @@ module Bitbucket
end
def author
raw.fetch('reporter', {}).fetch('username', nil)
raw.dig('reporter', 'username')
end
def description

View file

@ -9,6 +9,7 @@ module Gitlab
end
def author_line(author)
author ||= "Anonymous"
"*Created by: #{author}*\n\n"
end
end

View file

@ -19,6 +19,18 @@ describe Gitlab::BitbucketImport::Importer do
]
end
let(:reporters) do
[
nil,
{ "username" => "reporter1" },
nil,
{ "username" => "reporter2" },
{ "username" => "reporter1" },
nil,
{ "username" => "reporter3" }
]
end
let(:sample_issues_statuses) do
issues = []
@ -36,6 +48,10 @@ describe Gitlab::BitbucketImport::Importer do
}
end
reporters.map.with_index do |reporter, index|
issues[index]['reporter'] = reporter
end
issues
end
@ -147,5 +163,19 @@ describe Gitlab::BitbucketImport::Importer do
expect(importer.errors).to be_empty
end
end
describe 'issue import' do
it 'maps reporters to anonymous if bitbucket reporter is nil' do
allow(importer).to receive(:import_wiki)
importer.execute
expect(project.issues.size).to eq(7)
expect(project.issues.where("description LIKE ?", '%Anonymous%').size).to eq(3)
expect(project.issues.where("description LIKE ?", '%reporter1%').size).to eq(2)
expect(project.issues.where("description LIKE ?", '%reporter2%').size).to eq(1)
expect(project.issues.where("description LIKE ?", '%reporter3%').size).to eq(1)
expect(importer.errors).to be_empty
end
end
end
end