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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-05-17 19:05:49 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-05-17 19:05:49 +0300
commit43a25d93ebdabea52f99b05e15b06250cd8f07d7 (patch)
treedceebdc68925362117480a5d672bcff122fb625b /spec/lib/gitlab/github_import/bulk_importing_spec.rb
parent20c84b99005abd1c82101dfeff264ac50d2df211 (diff)
Add latest changes from gitlab-org/gitlab@16-0-stable-eev16.0.0-rc42
Diffstat (limited to 'spec/lib/gitlab/github_import/bulk_importing_spec.rb')
-rw-r--r--spec/lib/gitlab/github_import/bulk_importing_spec.rb232
1 files changed, 159 insertions, 73 deletions
diff --git a/spec/lib/gitlab/github_import/bulk_importing_spec.rb b/spec/lib/gitlab/github_import/bulk_importing_spec.rb
index 136ddb566aa..28fbd4d883f 100644
--- a/spec/lib/gitlab/github_import/bulk_importing_spec.rb
+++ b/spec/lib/gitlab/github_import/bulk_importing_spec.rb
@@ -13,6 +13,8 @@ RSpec.describe Gitlab::GithubImport::BulkImporting, feature_category: :importers
:object_type
end
+ private
+
def model
Label
end
@@ -26,85 +28,153 @@ RSpec.describe Gitlab::GithubImport::BulkImporting, feature_category: :importers
end
describe '#build_database_rows' do
- it 'returns an Array containing the rows to insert and validation errors if object invalid' do
- object = double(:object, title: 'Foo')
-
- expect(importer)
- .to receive(:build_attributes)
- .with(object)
- .and_return({ title: 'Foo' })
-
- expect(Label)
- .to receive(:new)
- .with({ title: 'Foo' })
- .and_return(label)
-
- expect(importer)
- .to receive(:already_imported?)
- .with(object)
- .and_return(false)
-
- expect(Gitlab::Import::Logger)
- .to receive(:info)
- .with(
- import_type: :github,
- project_id: 1,
- importer: 'MyImporter',
- message: '1 object_types fetched'
- )
-
- expect(Gitlab::GithubImport::ObjectCounter)
- .to receive(:increment)
- .with(
- project,
- :object_type,
- :fetched,
- value: 1
- )
-
- enum = [[object, 1]].to_enum
-
- rows, errors = importer.build_database_rows(enum)
+ context 'without validation errors' do
+ let(:object) { double(:object, title: 'Foo') }
+
+ it 'returns an array containing the rows to insert' do
+ expect(importer)
+ .to receive(:build_attributes)
+ .with(object)
+ .and_return({ title: 'Foo' })
+
+ expect(Label)
+ .to receive(:new)
+ .with({ title: 'Foo' })
+ .and_return(label)
+
+ expect(importer)
+ .to receive(:already_imported?)
+ .with(object)
+ .and_return(false)
+
+ expect(Gitlab::Import::Logger)
+ .to receive(:info)
+ .with(
+ import_type: :github,
+ project_id: 1,
+ importer: 'MyImporter',
+ message: '1 object_types fetched'
+ )
+
+ expect(Gitlab::GithubImport::ObjectCounter)
+ .to receive(:increment)
+ .with(
+ project,
+ :object_type,
+ :fetched,
+ value: 1
+ )
+
+ enum = [[object, 1]].to_enum
+
+ rows, errors = importer.build_database_rows(enum)
+
+ expect(rows).to match_array([{ title: 'Foo' }])
+ expect(errors).to be_empty
+ end
- expect(rows).to match_array([{ title: 'Foo' }])
- expect(errors).to be_empty
+ it 'does not import objects that have already been imported' do
+ expect(importer)
+ .not_to receive(:build_attributes)
+
+ expect(importer)
+ .to receive(:already_imported?)
+ .with(object)
+ .and_return(true)
+
+ expect(Gitlab::Import::Logger)
+ .to receive(:info)
+ .with(
+ import_type: :github,
+ project_id: 1,
+ importer: 'MyImporter',
+ message: '0 object_types fetched'
+ )
+
+ expect(Gitlab::GithubImport::ObjectCounter)
+ .to receive(:increment)
+ .with(
+ project,
+ :object_type,
+ :fetched,
+ value: 0
+ )
+
+ enum = [[object, 1]].to_enum
+
+ rows, errors = importer.build_database_rows(enum)
+
+ expect(rows).to be_empty
+ expect(errors).to be_empty
+ end
end
- it 'does not import objects that have already been imported' do
- object = double(:object, title: 'Foo')
-
- expect(importer)
- .not_to receive(:build_attributes)
+ context 'with validation errors' do
+ let(:object) { double(:object, id: 12345, title: 'bug,bug') }
- expect(importer)
- .to receive(:already_imported?)
- .with(object)
- .and_return(true)
+ before do
+ allow(importer)
+ .to receive(:already_imported?)
+ .with(object)
+ .and_return(false)
- expect(Gitlab::Import::Logger)
- .to receive(:info)
- .with(
- import_type: :github,
- project_id: 1,
- importer: 'MyImporter',
- message: '0 object_types fetched'
- )
-
- expect(Gitlab::GithubImport::ObjectCounter)
- .to receive(:increment)
- .with(
- project,
- :object_type,
- :fetched,
- value: 0
- )
+ allow(importer)
+ .to receive(:build_attributes)
+ .with(object)
+ .and_return({ title: 'bug,bug' })
+ end
- enum = [[object, 1]].to_enum
+ context 'without implemented github_identifiers method' do
+ it 'raises NotImplementedError' do
+ enum = [[object, 1]].to_enum
- rows, errors = importer.build_database_rows(enum)
+ expect { importer.build_database_rows(enum) }.to raise_error(NotImplementedError)
+ end
+ end
- expect(rows).to be_empty
- expect(errors).to be_empty
+ context 'with implemented github_identifiers method' do
+ it 'returns an array containing the validation errors and logs them' do
+ expect(importer)
+ .to receive(:github_identifiers)
+ .with(object)
+ .and_return(
+ {
+ id: object.id,
+ title: object.title,
+ object_type: importer.object_type
+ }
+ )
+
+ expect(Gitlab::Import::Logger)
+ .to receive(:error)
+ .with(
+ import_type: :github,
+ project_id: 1,
+ importer: 'MyImporter',
+ message: ['Title is invalid'],
+ github_identifiers: { id: 12345, title: 'bug,bug', object_type: :object_type }
+ )
+
+ expect(Gitlab::GithubImport::ObjectCounter)
+ .to receive(:increment)
+ .with(
+ project,
+ :object_type,
+ :fetched,
+ value: 0
+ )
+
+ enum = [[object, 1]].to_enum
+
+ rows, errors = importer.build_database_rows(enum)
+
+ expect(rows).to be_empty
+ expect(errors).not_to be_empty
+
+ expect(errors[0][:validation_errors].full_messages).to match_array(['Title is invalid'])
+ expect(errors[0][:github_identifiers]).to eq({ id: 12345, title: 'bug,bug', object_type: :object_type })
+ end
+ end
end
end
@@ -157,7 +227,8 @@ RSpec.describe Gitlab::GithubImport::BulkImporting, feature_category: :importers
exception_message: 'Title invalid',
correlation_id_value: 'cid',
retry_count: nil,
- created_at: Time.zone.now
+ created_at: Time.zone.now,
+ external_identifiers: { id: 123456 }
}]
end
@@ -170,8 +241,23 @@ RSpec.describe Gitlab::GithubImport::BulkImporting, feature_category: :importers
expect(import_failures).to receive(:insert_all).with(formatted_errors)
expect(Labkit::Correlation::CorrelationId).to receive(:current_or_new_id).and_return('cid')
- importer.bulk_insert_failures([error])
+ importer.bulk_insert_failures([{
+ validation_errors: error,
+ github_identifiers: { id: 123456 }
+ }])
end
end
end
+
+ describe '#object_type' do
+ let(:importer_class) do
+ Class.new do
+ include Gitlab::GithubImport::BulkImporting
+ end
+ end
+
+ it 'raises NotImplementedError' do
+ expect { importer.object_type }.to raise_error(NotImplementedError)
+ end
+ end
end