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:
Diffstat (limited to 'spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb')
-rw-r--r--spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb141
1 files changed, 141 insertions, 0 deletions
diff --git a/spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb b/spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb
new file mode 100644
index 00000000000..6c7fc4d5b15
--- /dev/null
+++ b/spec/lib/gitlab/github_import/importer/pull_requests/review_requests_importer_spec.rb
@@ -0,0 +1,141 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::GithubImport::Importer::PullRequests::ReviewRequestsImporter, :clean_gitlab_redis_cache do
+ subject(:importer) { described_class.new(project, client) }
+
+ let_it_be(:project) { create(:project, import_source: 'foo') }
+
+ let(:client) { instance_double(Gitlab::GithubImport::Client) }
+ let(:review_request_struct) { Struct.new(:merge_request_id, :users, keyword_init: true) }
+ let(:user_struct) { Struct.new(:id, :login, keyword_init: true) }
+
+ shared_context 'when project with merge requests' do
+ let_it_be(:merge_request_1) { create(:merge_request, source_project: project, target_branch: 'feature1') }
+ let_it_be(:merge_request_2) { create(:merge_request, source_project: project, target_branch: 'feature2') }
+
+ let(:importer_stub) { instance_double('Gitlab::GithubImport::Importer::NoteAttachmentsImporter') }
+ let(:importer_attrs) do
+ [instance_of(Gitlab::GithubImport::Representation::PullRequests::ReviewRequests), project, client]
+ end
+
+ let(:review_requests_1) do
+ {
+ users: [
+ { id: 4, login: 'alice' },
+ { id: 5, login: 'bob' }
+ ]
+ }
+ end
+
+ let(:review_requests_2) do
+ {
+ users: [{ id: 4, login: 'alice' }]
+ }
+ end
+
+ before do
+ allow(client).to receive(:pull_request_review_requests)
+ .with(project.import_source, merge_request_1.iid).and_return(review_requests_1)
+ allow(client).to receive(:pull_request_review_requests)
+ .with(project.import_source, merge_request_2.iid).and_return(review_requests_2)
+ end
+ end
+
+ describe '#sequential_import' do
+ include_context 'when project with merge requests'
+
+ it 'imports each project merge request reviewers' do
+ expect_next_instances_of(
+ Gitlab::GithubImport::Importer::PullRequests::ReviewRequestImporter, 2, false, *importer_attrs
+ ) do |note_attachments_importer|
+ expect(note_attachments_importer).to receive(:execute)
+ end
+
+ importer.sequential_import
+ end
+
+ context 'when merge request is already processed' do
+ before do
+ Gitlab::Cache::Import::Caching.set_add(
+ "github-importer/pull_requests/pull_request_review_requests/already-imported/#{project.id}",
+ merge_request_1.iid
+ )
+ end
+
+ it "doesn't import this merge request reviewers" do
+ expect_next_instance_of(
+ Gitlab::GithubImport::Importer::PullRequests::ReviewRequestImporter, *importer_attrs
+ ) do |note_attachments_importer|
+ expect(note_attachments_importer).to receive(:execute)
+ end
+
+ importer.sequential_import
+ end
+ end
+ end
+
+ describe '#parallel_import' do
+ include_context 'when project with merge requests'
+
+ let(:expected_worker_payload) do
+ [
+ [
+ project.id,
+ {
+ merge_request_id: merge_request_1.id,
+ users: [
+ { id: 4, login: 'alice' },
+ { id: 5, login: 'bob' }
+ ]
+ },
+ instance_of(String)
+ ],
+ [
+ project.id,
+ {
+ merge_request_id: merge_request_2.id,
+ users: [
+ { id: 4, login: 'alice' }
+ ]
+ },
+ instance_of(String)
+ ]
+ ]
+ end
+
+ it 'schedule import for each merge request reviewers' do
+ expect(Gitlab::GithubImport::PullRequests::ImportReviewRequestWorker)
+ .to receive(:bulk_perform_in).with(
+ 1.second,
+ expected_worker_payload,
+ batch_size: 1000,
+ batch_delay: 1.minute
+ )
+
+ importer.parallel_import
+ end
+
+ context 'when merge request is already processed' do
+ before do
+ Gitlab::Cache::Import::Caching.set_add(
+ "github-importer/pull_requests/pull_request_review_requests/already-imported/#{project.id}",
+ merge_request_1.iid
+ )
+ end
+
+ it "doesn't schedule import this merge request reviewers" do
+ expect(Gitlab::GithubImport::PullRequests::ImportReviewRequestWorker)
+ .to receive(:bulk_perform_in).with(
+ 1.second,
+ expected_worker_payload.slice(1, 1),
+ batch_size: 1000,
+ batch_delay: 1.minute
+ )
+
+ importer.parallel_import
+ end
+ end
+ end
+end