Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/api/validations/validators/bulk_imports/destination_namespace_path_spec.rb43
-rw-r--r--spec/lib/api/validations/validators/bulk_imports/source_full_path_validator_spec.rb168
-rw-r--r--spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb4
-rw-r--r--spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb6
-rw-r--r--spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb5
-rw-r--r--spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb5
-rw-r--r--spec/lib/gitlab/regex_spec.rb68
-rw-r--r--spec/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric_spec.rb10
-rw-r--r--spec/lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric_spec.rb6
9 files changed, 230 insertions, 85 deletions
diff --git a/spec/lib/api/validations/validators/bulk_imports/destination_namespace_path_spec.rb b/spec/lib/api/validations/validators/bulk_imports/destination_namespace_path_spec.rb
new file mode 100644
index 00000000000..39432c724a0
--- /dev/null
+++ b/spec/lib/api/validations/validators/bulk_imports/destination_namespace_path_spec.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe API::Validations::Validators::BulkImports::DestinationNamespacePath, feature_category: :importers do
+ include ApiValidatorsHelpers
+
+ subject do
+ described_class.new(['test'], {}, false, scope.new)
+ end
+
+ context 'when destination namespace param is valid' do
+ it 'raises a validation error', :aggregate_failures do
+ expect_validation_error('test' => '?gitlab')
+ expect_validation_error('test' => "Users's something")
+ expect_validation_error('test' => '/source')
+ expect_validation_error('test' => 'http:')
+ expect_validation_error('test' => 'https:')
+ expect_validation_error('test' => 'example.com/?stuff=true')
+ expect_validation_error('test' => 'example.com:5000/?stuff=true')
+ expect_validation_error('test' => 'http://gitlab.example/gitlab-org/manage/import/gitlab-migration-test')
+ expect_validation_error('test' => 'good_for_me!')
+ expect_validation_error('test' => 'good_for+you')
+ expect_validation_error('test' => 'source/')
+ expect_validation_error('test' => '.source/full./path')
+ end
+ end
+
+ context 'when destination namespace param is invalid' do
+ it 'does not raise a validation error', :aggregate_failures do
+ expect_no_validation_error('')
+ expect_no_validation_error('test' => '')
+ expect_no_validation_error('test' => 'source')
+ expect_no_validation_error('test' => 'source/full')
+ expect_no_validation_error('test' => 'source/full/path')
+ expect_no_validation_error('test' => 'sou_rce/fu-ll/pa.th')
+ expect_no_validation_error('test' => 'domain_namespace')
+ expect_no_validation_error('test' => 'gitlab-migration-test')
+ expect_no_validation_error('test' => '1-project-path')
+ expect_no_validation_error('test' => 'e-project-path')
+ end
+ end
+end
diff --git a/spec/lib/api/validations/validators/bulk_imports/source_full_path_validator_spec.rb b/spec/lib/api/validations/validators/bulk_imports/source_full_path_validator_spec.rb
new file mode 100644
index 00000000000..f0d2121b0d6
--- /dev/null
+++ b/spec/lib/api/validations/validators/bulk_imports/source_full_path_validator_spec.rb
@@ -0,0 +1,168 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe API::Validations::Validators::BulkImports::SourceFullPath, feature_category: :importers do
+ include ApiValidatorsHelpers
+ using RSpec::Parameterized::TableSyntax
+
+ subject do
+ described_class.new(['test'], {}, false, scope.new)
+ end
+
+ let(:source_type_params) { { 'source_type' => source_type } }
+
+ context 'when source_type is group_entity' do
+ let(:source_type) { 'group_entity' }
+
+ context 'when source_full_path param is invalid' do
+ where(:invalid_param) do
+ [
+ '',
+ '?gitlab',
+ "Users's something",
+ '/source',
+ 'http:',
+ 'https:',
+ 'example.com/?stuff=true',
+ 'example.com:5000/?stuff=true',
+ 'http://gitlab.example/gitlab-org/manage/import/gitlab-migration-test',
+ 'good_for_me!',
+ 'good_for+you',
+ 'source/',
+ '.source/full/path.'
+ ]
+ end
+
+ with_them do
+ it 'raises a validation error' do
+ params = source_type_params.merge('test' => invalid_param)
+
+ expect_validation_error(params)
+ end
+ end
+ end
+
+ context 'when source_full_path param is valid' do
+ where(:valid_param) do
+ [
+ 'source',
+ 'source/full',
+ 'source/full/path',
+ 'sou_rce/fu-ll/pa.th',
+ 'source/full/path---',
+ 'source/full/..path',
+ 'domain_namespace',
+ 'gitlab-migration-test',
+ '1-project-path',
+ 'e-project-path'
+ ]
+ end
+
+ with_them do
+ it 'does not raise a validation error' do
+ params = source_type_params.merge('test' => valid_param)
+
+ expect_no_validation_error(params)
+ end
+ end
+ end
+ end
+
+ context 'when source_type is project_entity' do
+ let(:source_type) { 'project_entity' }
+
+ context 'when source_full_path param is invalid' do
+ where(:invalid_param) do
+ [
+ '',
+ '?gitlab',
+ "Users's something",
+ '/source',
+ 'http:',
+ 'https:',
+ 'example.com/?stuff=true',
+ 'example.com:5000/?stuff=true',
+ 'http://gitlab.example/gitlab-org/manage/import/gitlab-migration-test',
+ 'good_for_me!',
+ 'good_for+you',
+ 'source/',
+ 'source',
+ '.source/full./path',
+ 'domain_namespace',
+ 'gitlab-migration-test',
+ '1-project-path',
+ 'e-project-path'
+ ]
+ end
+
+ with_them do
+ it 'raises a validation error' do
+ params = source_type_params.merge('test' => invalid_param)
+
+ expect_validation_error(params)
+ end
+ end
+ end
+
+ context 'when source_full_path param is valid' do
+ where(:valid_param) do
+ [
+ 'source/full',
+ 'source/full/path',
+ 'sou_rce/fu-ll/pa.th',
+ 'source/full/path---',
+ 'source/full/..path'
+ ]
+ end
+
+ with_them do
+ it 'does not raise a validation error' do
+ params = source_type_params.merge('test' => valid_param)
+
+ expect_no_validation_error(params)
+ end
+ end
+ end
+ end
+
+ context 'when source_type is invalid' do
+ let(:source_type) { '' }
+
+ context 'when source_full_path param is invalid' do
+ where(:invalid_param) do
+ [
+ '',
+ '?gitlab',
+ "Users's something",
+ '/source',
+ 'http:',
+ 'https:',
+ 'example.com/?stuff=true',
+ 'example.com:5000/?stuff=true',
+ 'http://gitlab.example/gitlab-org/manage/import/gitlab-migration-test',
+ 'good_for_me!',
+ 'good_for+you',
+ 'source/',
+ '.source/full./path',
+ 'source',
+ 'source/full',
+ 'source/full/path',
+ 'sou_rce/fu-ll/pa.th',
+ 'domain_namespace',
+ 'gitlab-migration-test',
+ '1-project-path',
+ 'e-project-path'
+ ]
+ end
+
+ with_them do
+ it 'raises a validation error' do
+ params = source_type_params.merge('test' => invalid_param)
+
+ expect_validation_error(params)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb b/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb
index 50640e1e4ba..c91b031de30 100644
--- a/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/common/pipelines/lfs_objects_pipeline_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe BulkImports::Common::Pipelines::LfsObjectsPipeline, feature_categ
let_it_be(:oid) { 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' }
let(:tmpdir) { Dir.mktmpdir }
- let(:entity) { create(:bulk_import_entity, :project_entity, project: portable, source_full_path: 'test', source_xid: nil) }
+ let(:entity) { create(:bulk_import_entity, :project_entity, project: portable, source_xid: nil) }
let(:tracker) { create(:bulk_import_tracker, entity: entity) }
let(:context) { BulkImports::Pipeline::Context.new(tracker) }
let(:lfs_dir_path) { tmpdir }
@@ -53,7 +53,7 @@ RSpec.describe BulkImports::Common::Pipelines::LfsObjectsPipeline, feature_categ
.to receive(:new)
.with(
configuration: context.configuration,
- relative_url: "/#{entity.pluralized_name}/test/export_relations/download?relation=lfs_objects",
+ relative_url: "/#{entity.pluralized_name}/#{CGI.escape(entity.source_full_path)}/export_relations/download?relation=lfs_objects",
tmpdir: tmpdir,
filename: 'lfs_objects.tar.gz')
.and_return(download_service)
diff --git a/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb b/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb
index 09c8c7b92c2..675ae935c1c 100644
--- a/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/common/pipelines/uploads_pipeline_spec.rb
@@ -79,7 +79,7 @@ RSpec.describe BulkImports::Common::Pipelines::UploadsPipeline, feature_category
.to receive(:new)
.with(
configuration: context.configuration,
- relative_url: "/#{entity.pluralized_name}/test/export_relations/download?relation=uploads",
+ relative_url: "/#{entity.pluralized_name}/#{CGI.escape(entity.source_full_path)}/export_relations/download?relation=uploads",
tmpdir: tmpdir,
filename: 'uploads.tar.gz')
.and_return(download_service)
@@ -178,14 +178,14 @@ RSpec.describe BulkImports::Common::Pipelines::UploadsPipeline, feature_category
context 'when importing to group' do
let(:portable) { group }
- let(:entity) { create(:bulk_import_entity, :group_entity, group: group, source_full_path: 'test', source_xid: nil) }
+ let(:entity) { create(:bulk_import_entity, :group_entity, group: group, source_xid: nil) }
include_examples 'uploads import'
end
context 'when importing to project' do
let(:portable) { project }
- let(:entity) { create(:bulk_import_entity, :project_entity, project: project, source_full_path: 'test', source_xid: nil) }
+ let(:entity) { create(:bulk_import_entity, :project_entity, project: project, source_xid: nil) }
include_examples 'uploads import'
end
diff --git a/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb b/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb
index 87efad92131..e65339ffdd0 100644
--- a/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/projects/pipelines/design_bundle_pipeline_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe BulkImports::Projects::Pipelines::DesignBundlePipeline, feature_c
let(:tmpdir) { Dir.mktmpdir }
let(:design_bundle_path) { File.join(tmpdir, 'design.bundle') }
let(:entity) do
- create(:bulk_import_entity, :project_entity, project: portable, source_full_path: 'test', source_xid: nil)
+ create(:bulk_import_entity, :project_entity, project: portable, source_xid: nil)
end
let(:tracker) { create(:bulk_import_tracker, entity: entity) }
@@ -52,7 +52,8 @@ RSpec.describe BulkImports::Projects::Pipelines::DesignBundlePipeline, feature_c
.to receive(:new)
.with(
configuration: context.configuration,
- relative_url: "/#{entity.pluralized_name}/test/export_relations/download?relation=design",
+ relative_url: "/#{entity.pluralized_name}/#{CGI.escape(entity.source_full_path)}" \
+ '/export_relations/download?relation=design',
tmpdir: tmpdir,
filename: 'design.tar.gz')
.and_return(download_service)
diff --git a/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb b/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb
index 5aae8c959fa..2865215823a 100644
--- a/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb
+++ b/spec/lib/bulk_imports/projects/pipelines/repository_bundle_pipeline_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe BulkImports::Projects::Pipelines::RepositoryBundlePipeline, featu
let(:tmpdir) { Dir.mktmpdir }
let(:bundle_path) { File.join(tmpdir, 'repository.bundle') }
let(:entity) do
- create(:bulk_import_entity, :project_entity, project: portable, source_full_path: 'test', source_xid: nil)
+ create(:bulk_import_entity, :project_entity, project: portable, source_xid: nil)
end
let(:tracker) { create(:bulk_import_tracker, entity: entity) }
@@ -62,7 +62,8 @@ RSpec.describe BulkImports::Projects::Pipelines::RepositoryBundlePipeline, featu
.to receive(:new)
.with(
configuration: context.configuration,
- relative_url: "/#{entity.pluralized_name}/test/export_relations/download?relation=repository",
+ relative_url: "/#{entity.pluralized_name}/#{CGI.escape(entity.source_full_path)}" \
+ '/export_relations/download?relation=repository',
tmpdir: tmpdir,
filename: 'repository.tar.gz')
.and_return(download_service)
diff --git a/spec/lib/gitlab/regex_spec.rb b/spec/lib/gitlab/regex_spec.rb
index c91b99caba2..df123ef638f 100644
--- a/spec/lib/gitlab/regex_spec.rb
+++ b/spec/lib/gitlab/regex_spec.rb
@@ -98,36 +98,6 @@ RSpec.describe Gitlab::Regex, feature_category: :tooling do
}
end
- describe '.bulk_import_destination_namespace_path_regex' do
- subject { described_class.bulk_import_destination_namespace_path_regex }
-
- it { is_expected.not_to match('?gitlab') }
- it { is_expected.not_to match("Users's something") }
- it { is_expected.not_to match('/source') }
- it { is_expected.not_to match('http:') }
- it { is_expected.not_to match('https:') }
- it { is_expected.not_to match('example.com/?stuff=true') }
- it { is_expected.not_to match('example.com:5000/?stuff=true') }
- it { is_expected.not_to match('http://gitlab.example/gitlab-org/manage/import/gitlab-migration-test') }
- it { is_expected.not_to match('_good_for_me!') }
- it { is_expected.not_to match('good_for+you') }
- it { is_expected.not_to match('source/') }
- it { is_expected.not_to match('.source/full./path') }
- it { is_expected.not_to match('.source/.full/.path') }
- it { is_expected.not_to match('_source') }
- it { is_expected.not_to match('.source') }
-
- it { is_expected.to match('source') }
- it { is_expected.to match('source/full') }
- it { is_expected.to match('source/full/path') }
- it { is_expected.to match('sou_rce/fu-ll/pa.th') }
- it { is_expected.to match('domain_namespace') }
- it { is_expected.to match('gitlab-migration-test') }
- it { is_expected.to match('1-project-path') }
- it { is_expected.to match('e-project-path') }
- it { is_expected.to match('') } # it is possible to pass an empty string for destination_namespace in bulk_import POST request
- end
-
describe '.bulk_import_source_full_path_regex_message' do
subject { described_class.bulk_import_source_full_path_regex_message }
@@ -141,44 +111,6 @@ RSpec.describe Gitlab::Regex, feature_category: :tooling do
}
end
- describe '.bulk_import_source_full_path_regex' do
- subject { described_class.bulk_import_source_full_path_regex }
-
- it { is_expected.not_to match("Users's something") }
- it { is_expected.not_to match('/source') }
- it { is_expected.not_to match('http:') }
- it { is_expected.not_to match('https:') }
- it { is_expected.not_to match('example.com/?stuff=true') }
- it { is_expected.not_to match('example.com:5000/?stuff=true') }
- it { is_expected.not_to match('http://gitlab.example/gitlab-org/manage/import/gitlab-migration-test') }
- it { is_expected.not_to match('source/') }
- it { is_expected.not_to match('') }
- it { is_expected.not_to match('.source/full./path') }
- it { is_expected.not_to match('?gitlab') }
- it { is_expected.not_to match('_good_for_me!') }
- it { is_expected.not_to match('group/@*%_my_other-project-----') }
- it { is_expected.not_to match('_foog-for-me!') }
- it { is_expected.not_to match('.source/full/path.') }
-
- it { is_expected.to match('good_for+you') }
- it { is_expected.to match('source') }
- it { is_expected.to match('.source') }
- it { is_expected.to match('_source') }
- it { is_expected.to match('source/full') }
- it { is_expected.to match('source/full/path') }
- it { is_expected.to match('domain_namespace') }
- it { is_expected.to match('gitlab-migration-test') }
- it { is_expected.to match('source/full/path-') }
- it { is_expected.to match('.source/full/path') }
- it { is_expected.to match('.source/.full/.path') }
- it { is_expected.to match('source/full/.path') }
- it { is_expected.to match('source/full/..path') }
- it { is_expected.to match('source/full/---1path') }
- it { is_expected.to match('source/full/-___path') }
- it { is_expected.to match('source/full/path---') }
- it { is_expected.to match('group/__my_other-project-----') }
- end
-
describe '.group_path_regex' do
subject { described_class.group_path_regex }
diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric_spec.rb
index 0deb586d488..f19e83935f8 100644
--- a/spec/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric_spec.rb
+++ b/spec/lib/gitlab/usage/metrics/instrumentations/count_bulk_imports_entities_metric_spec.rb
@@ -5,17 +5,17 @@ require 'spec_helper'
RSpec.describe Gitlab::Usage::Metrics::Instrumentations::CountBulkImportsEntitiesMetric, feature_category: :importers do
let_it_be(:user) { create(:user) }
let_it_be(:bulk_import_projects) do
- create_list(:bulk_import_entity, 2, source_type: 'project_entity', created_at: 3.weeks.ago, status: 2)
- create(:bulk_import_entity, source_type: 'project_entity', created_at: 3.weeks.ago, status: 0)
+ create_list(:bulk_import_entity, 2, :project_entity, created_at: 3.weeks.ago, status: 2)
+ create(:bulk_import_entity, :project_entity, created_at: 3.weeks.ago, status: 0)
end
let_it_be(:bulk_import_groups) do
- create_list(:bulk_import_entity, 2, source_type: 'group_entity', created_at: 3.weeks.ago, status: 2)
- create(:bulk_import_entity, source_type: 'group_entity', created_at: 3.weeks.ago, status: 0)
+ create_list(:bulk_import_entity, 2, :group_entity, created_at: 3.weeks.ago, status: 2)
+ create(:bulk_import_entity, :group_entity, created_at: 3.weeks.ago, status: 0)
end
let_it_be(:old_bulk_import_project) do
- create(:bulk_import_entity, source_type: 'project_entity', created_at: 2.months.ago, status: 2)
+ create(:bulk_import_entity, :project_entity, created_at: 2.months.ago, status: 2)
end
context 'with no source_type' do
diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric_spec.rb
index bd432b614e7..bf3cd810e23 100644
--- a/spec/lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric_spec.rb
+++ b/spec/lib/gitlab/usage/metrics/instrumentations/count_imported_projects_total_metric_spec.rb
@@ -15,15 +15,15 @@ RSpec.describe Gitlab::Usage::Metrics::Instrumentations::CountImportedProjectsTo
let_it_be(:old_import) { create(:project, import_type: 'gitea', creator_id: user.id, created_at: 2.months.ago) }
let_it_be(:bulk_import_projects) do
- create_list(:bulk_import_entity, 3, source_type: 'project_entity', created_at: 3.weeks.ago)
+ create_list(:bulk_import_entity, 3, :project_entity, created_at: 3.weeks.ago)
end
let_it_be(:bulk_import_groups) do
- create_list(:bulk_import_entity, 3, source_type: 'group_entity', created_at: 3.weeks.ago)
+ create_list(:bulk_import_entity, 3, :group_entity, created_at: 3.weeks.ago)
end
let_it_be(:old_bulk_import_project) do
- create(:bulk_import_entity, source_type: 'project_entity', created_at: 2.months.ago)
+ create(:bulk_import_entity, :project_entity, created_at: 2.months.ago)
end
before do