From f751896c48a07368b53e2f22e8498c2140d7be92 Mon Sep 17 00:00:00 2001 From: Carla Drago Date: Thu, 2 Mar 2023 17:41:54 +0100 Subject: [PATCH] Update handling of project names in bulk import When using Direct Transfer to import a project uses the name from the source project for the name of the destination project. Additionally ensures that the project name is unique according to existing namespace/ path and name rules. Changelog: other --- .../projects/graphql/get_project_query.rb | 1 + .../transformers/project_attributes_transformer.rb | 2 +- .../project_attributes_transformer_spec.rb | 13 ++++++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/bulk_imports/projects/graphql/get_project_query.rb b/lib/bulk_imports/projects/graphql/get_project_query.rb index a2d7094d570b3f..a2cba2fcfc0fda 100644 --- a/lib/bulk_imports/projects/graphql/get_project_query.rb +++ b/lib/bulk_imports/projects/graphql/get_project_query.rb @@ -11,6 +11,7 @@ def to_s query($full_path: ID!) { project(fullPath: $full_path) { id + name visibility created_at: createdAt } diff --git a/lib/bulk_imports/projects/transformers/project_attributes_transformer.rb b/lib/bulk_imports/projects/transformers/project_attributes_transformer.rb index d36b0af88291e3..72b32ad5b3b900 100644 --- a/lib/bulk_imports/projects/transformers/project_attributes_transformer.rb +++ b/lib/bulk_imports/projects/transformers/project_attributes_transformer.rb @@ -16,7 +16,7 @@ def transform(context, data) namespace = Namespace.find_by_full_path(entity.destination_namespace) path = normalize_path(entity.destination_slug) - project[:name] = uniquify(namespace, entity.destination_slug, :name) + project[:name] = uniquify(namespace, data['name'], :name) project[:path] = uniquify(namespace, path, :path) project[:created_at] = data['created_at'] project[:import_type] = PROJECT_IMPORT_TYPE diff --git a/spec/lib/bulk_imports/projects/transformers/project_attributes_transformer_spec.rb b/spec/lib/bulk_imports/projects/transformers/project_attributes_transformer_spec.rb index d64a0114f7b424..40ad4ee8be52f9 100644 --- a/spec/lib/bulk_imports/projects/transformers/project_attributes_transformer_spec.rb +++ b/spec/lib/bulk_imports/projects/transformers/project_attributes_transformer_spec.rb @@ -5,7 +5,6 @@ RSpec.describe BulkImports::Projects::Transformers::ProjectAttributesTransformer, feature_category: :importers do describe '#transform' do let_it_be(:user) { create(:user) } - let_it_be(:project) { create(:project, name: 'My Source Project') } let_it_be(:bulk_import) { create(:bulk_import, user: user) } let(:entity) do @@ -25,6 +24,7 @@ let(:context) { BulkImports::Pipeline::Context.new(tracker) } let(:data) do { + 'name' => 'My Project', 'visibility' => 'private', 'created_at' => '2016-11-18T09:29:42.634Z' } @@ -32,8 +32,9 @@ subject(:transformed_data) { described_class.new.transform(context, data) } - it 'transforms name to destination slug' do - expect(transformed_data[:name]).to eq(entity.destination_slug) + it 'uniquifies project name' do + create(:project, group: destination_group, name: 'My Project') + expect(transformed_data[:name]).to eq('My Project_1') end it 'adds path as normalized name' do @@ -110,6 +111,12 @@ end it 'makes the name unique by appending a counter' do + data = { + 'visibility' => 'private', + 'created_at' => '2016-11-18T09:29:42.634Z', + 'name' => 'Destination-Project-Name' + } + transformed_data = described_class.new.transform(context, data) expect(transformed_data['name']).to eq('Destination-Project-Name_2') end -- GitLab