Refactor spec to reload existing_label right after creation

This will avoid timestamp comparison issues later within equality check
with attributes
This commit is contained in:
Patrick Derichs 2019-05-08 12:39:54 +00:00 committed by Mayra Cabrera
parent a2128edfee
commit b145d9b873
3 changed files with 46 additions and 1 deletions

View file

@ -0,0 +1,5 @@
---
title: Use FindOrCreateService to create labels and check for existing ones
merge_request: 27987
author: Matt Duren
type: fixed

View file

@ -135,7 +135,7 @@ module Gitlab
def create_labels
LABELS.each do |label_params|
label = ::Labels::CreateService.new(label_params).execute(project: project)
label = ::Labels::FindOrCreateService.new(nil, project, label_params).execute(skip_authorization: true)
if label.valid?
@labels[label_params[:title]] = label
else

View file

@ -222,6 +222,46 @@ describe Gitlab::BitbucketImport::Importer do
body: {}.to_json)
end
context 'creating labels on project' do
before do
allow(importer).to receive(:import_wiki)
end
it 'creates labels as expected' do
expect { importer.execute }.to change { Label.count }.from(0).to(Gitlab::BitbucketImport::Importer::LABELS.size)
end
it 'does not fail if label is already existing' do
label = Gitlab::BitbucketImport::Importer::LABELS.first
::Labels::CreateService.new(label).execute(project: project)
expect { importer.execute }.not_to raise_error
end
it 'does not create new labels' do
Gitlab::BitbucketImport::Importer::LABELS.each do |label|
create(:label, project: project, title: label[:title])
end
expect { importer.execute }.not_to change { Label.count }
end
it 'does not update existing ones' do
label_title = Gitlab::BitbucketImport::Importer::LABELS.first[:title]
existing_label = create(:label, project: project, title: label_title)
# Reload label from database so we avoid timestamp comparison issues related to time precision when comparing
# attributes later.
existing_label.reload
Timecop.freeze(Time.now + 1.minute) do
importer.execute
label_after_import = project.labels.find(existing_label.id)
expect(label_after_import.attributes).to eq(existing_label.attributes)
end
end
end
it 'maps statuses to open or closed' do
allow(importer).to receive(:import_wiki)