Fix error importing label priorities and added relevant spec
This commit is contained in:
parent
528c3e2b8d
commit
5452747729
2 changed files with 45 additions and 5 deletions
|
@ -22,7 +22,7 @@ module Gitlab
|
|||
|
||||
IMPORTED_OBJECT_MAX_RETRIES = 5.freeze
|
||||
|
||||
EXISTING_OBJECT_CHECK = %i[milestone milestones label labels project_label project_labels project_label group_label].freeze
|
||||
EXISTING_OBJECT_CHECK = %i[milestone milestones label labels project_label project_labels group_label group_labels].freeze
|
||||
|
||||
def self.create(*args)
|
||||
new(*args).create
|
||||
|
@ -189,7 +189,7 @@ module Gitlab
|
|||
# Otherwise always create the record, skipping the extra SELECT clause.
|
||||
@existing_or_new_object ||= begin
|
||||
if EXISTING_OBJECT_CHECK.include?(@relation_name)
|
||||
attribute_hash = attribute_hash_for(['events', 'priorities'])
|
||||
attribute_hash = attribute_hash_for(['events'])
|
||||
|
||||
existing_object.assign_attributes(attribute_hash) if attribute_hash.any?
|
||||
|
||||
|
@ -210,9 +210,8 @@ module Gitlab
|
|||
def existing_object
|
||||
@existing_object ||=
|
||||
begin
|
||||
finder_attributes = @relation_name == :group_label ? %w[title group_id] : %w[title project_id]
|
||||
finder_hash = parsed_relation_hash.slice(*finder_attributes)
|
||||
existing_object = relation_class.find_or_create_by(finder_hash)
|
||||
existing_object = find_or_create_object!
|
||||
|
||||
# Done in two steps, as MySQL behaves differently than PostgreSQL using
|
||||
# the +find_or_create_by+ method and does not return the ID the second time.
|
||||
existing_object.update!(parsed_relation_hash)
|
||||
|
@ -224,6 +223,25 @@ module Gitlab
|
|||
@relation_name == :services && parsed_relation_hash['type'] &&
|
||||
!Object.const_defined?(parsed_relation_hash['type'])
|
||||
end
|
||||
|
||||
def find_or_create_object!
|
||||
finder_attributes = @relation_name == :group_label ? %w[title group_id] : %w[title project_id]
|
||||
finder_hash = parsed_relation_hash.slice(*finder_attributes)
|
||||
|
||||
if label?
|
||||
label = relation_class.find_or_initialize_by(finder_hash)
|
||||
parsed_relation_hash.delete('priorities') if label.persisted?
|
||||
|
||||
label.save!
|
||||
label
|
||||
else
|
||||
relation_class.find_or_create_by(finder_hash)
|
||||
end
|
||||
end
|
||||
|
||||
def label?
|
||||
@relation_name.to_s.include?('label')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,6 +15,28 @@
|
|||
"type": "ProjectLabel",
|
||||
"priorities": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "test3",
|
||||
"color": "#428bca",
|
||||
"group_id": 8,
|
||||
"created_at": "2016-07-22T08:55:44.161Z",
|
||||
"updated_at": "2016-07-22T08:55:44.161Z",
|
||||
"template": false,
|
||||
"description": "",
|
||||
"project_id": null,
|
||||
"type": "GroupLabel",
|
||||
"priorities": [
|
||||
{
|
||||
"id": 1,
|
||||
"project_id": 5,
|
||||
"label_id": 1,
|
||||
"priority": 1,
|
||||
"created_at": "2016-10-18T09:35:43.338Z",
|
||||
"updated_at": "2016-10-18T09:35:43.338Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"issues": [
|
||||
|
|
Loading…
Reference in a new issue