diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 16:18:24 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-09-20 16:18:24 +0300 |
commit | 0653e08efd039a5905f3fa4f6e9cef9f5d2f799c (patch) | |
tree | 4dcc884cf6d81db44adae4aa99f8ec1233a41f55 /spec/lib/gitlab/github_import/importer | |
parent | 744144d28e3e7fddc117924fef88de5d9674fe4c (diff) |
Add latest changes from gitlab-org/gitlab@14-3-stable-eev14.3.0-rc42
Diffstat (limited to 'spec/lib/gitlab/github_import/importer')
5 files changed, 230 insertions, 2 deletions
diff --git a/spec/lib/gitlab/github_import/importer/diff_note_importer_spec.rb b/spec/lib/gitlab/github_import/importer/diff_note_importer_spec.rb index 0af840d2c10..3dc15c7c059 100644 --- a/spec/lib/gitlab/github_import/importer/diff_note_importer_spec.rb +++ b/spec/lib/gitlab/github_import/importer/diff_note_importer_spec.rb @@ -20,6 +20,7 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNoteImporter do noteable_type: 'MergeRequest', noteable_id: 1, commit_id: '123abc', + original_commit_id: 'original123abc', file_path: 'README.md', diff_hunk: hunk, author: Gitlab::GithubImport::Representation::User @@ -64,13 +65,14 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNoteImporter do LegacyDiffNote.table_name, [ { + discussion_id: anything, noteable_type: 'MergeRequest', noteable_id: merge_request.id, project_id: project.id, author_id: user.id, note: 'Hello', system: false, - commit_id: '123abc', + commit_id: 'original123abc', line_code: note.line_code, type: 'LegacyDiffNote', created_at: created_at, @@ -95,13 +97,14 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNoteImporter do LegacyDiffNote.table_name, [ { + discussion_id: anything, noteable_type: 'MergeRequest', noteable_id: merge_request.id, project_id: project.id, author_id: project.creator_id, note: "*Created by: #{user.username}*\n\nHello", system: false, - commit_id: '123abc', + commit_id: 'original123abc', line_code: note.line_code, type: 'LegacyDiffNote', created_at: created_at, diff --git a/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb b/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb index 7750e508713..46b9959ff64 100644 --- a/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb +++ b/spec/lib/gitlab/github_import/importer/diff_notes_importer_spec.rb @@ -12,6 +12,7 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNotesImporter do html_url: 'https://github.com/foo/bar/pull/42', path: 'README.md', commit_id: '123abc', + original_commit_id: 'original123abc', diff_hunk: "@@ -1 +1 @@\n-Hello\n+Hello world", user: double(:user, id: 4, login: 'alice'), body: 'Hello world', diff --git a/spec/lib/gitlab/github_import/importer/single_endpoint_diff_notes_importer_spec.rb b/spec/lib/gitlab/github_import/importer/single_endpoint_diff_notes_importer_spec.rb new file mode 100644 index 00000000000..8c71d7d0ed7 --- /dev/null +++ b/spec/lib/gitlab/github_import/importer/single_endpoint_diff_notes_importer_spec.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::GithubImport::Importer::SingleEndpointDiffNotesImporter do + let(:client) { double } + let(:project) { create(:project, import_source: 'github/repo') } + + subject { described_class.new(project, client) } + + it { is_expected.to include_module(Gitlab::GithubImport::ParallelScheduling) } + it { is_expected.to include_module(Gitlab::GithubImport::SingleEndpointNotesImporting) } + it { expect(subject.representation_class).to eq(Gitlab::GithubImport::Representation::DiffNote) } + it { expect(subject.importer_class).to eq(Gitlab::GithubImport::Importer::DiffNoteImporter) } + it { expect(subject.collection_method).to eq(:pull_request_comments) } + it { expect(subject.object_type).to eq(:diff_note) } + it { expect(subject.id_for_already_imported_cache(double(id: 1))).to eq(1) } + + describe '#each_object_to_import', :clean_gitlab_redis_cache do + let(:merge_request) do + create( + :merged_merge_request, + iid: 999, + source_project: project, + target_project: project + ) + end + + let(:note) { double(id: 1) } + let(:page) { double(objects: [note], number: 1) } + + it 'fetches data' do + expect(client) + .to receive(:each_page) + .exactly(:once) # ensure to be cached on the second call + .with(:pull_request_comments, 'github/repo', merge_request.iid, page: 1) + .and_yield(page) + + expect { |b| subject.each_object_to_import(&b) }.to yield_with_args(note) + + subject.each_object_to_import {} + + expect( + Gitlab::Cache::Import::Caching.set_includes?( + "github-importer/merge_request/diff_notes/already-imported/#{project.id}", + merge_request.iid + ) + ).to eq(true) + end + + it 'skips cached pages' do + Gitlab::GithubImport::PageCounter + .new(project, "merge_request/#{merge_request.id}/pull_request_comments") + .set(2) + + expect(client) + .to receive(:each_page) + .exactly(:once) # ensure to be cached on the second call + .with(:pull_request_comments, 'github/repo', merge_request.iid, page: 2) + + subject.each_object_to_import {} + end + + it 'skips cached merge requests' do + Gitlab::Cache::Import::Caching.set_add( + "github-importer/merge_request/diff_notes/already-imported/#{project.id}", + merge_request.iid + ) + + expect(client).not_to receive(:each_page) + + subject.each_object_to_import {} + end + end +end diff --git a/spec/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer_spec.rb b/spec/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer_spec.rb new file mode 100644 index 00000000000..8d8f2730880 --- /dev/null +++ b/spec/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::GithubImport::Importer::SingleEndpointIssueNotesImporter do + let(:client) { double } + let(:project) { create(:project, import_source: 'github/repo') } + + subject { described_class.new(project, client) } + + it { is_expected.to include_module(Gitlab::GithubImport::ParallelScheduling) } + it { is_expected.to include_module(Gitlab::GithubImport::SingleEndpointNotesImporting) } + it { expect(subject.representation_class).to eq(Gitlab::GithubImport::Representation::Note) } + it { expect(subject.importer_class).to eq(Gitlab::GithubImport::Importer::NoteImporter) } + it { expect(subject.collection_method).to eq(:issue_comments) } + it { expect(subject.object_type).to eq(:note) } + it { expect(subject.id_for_already_imported_cache(double(id: 1))).to eq(1) } + + describe '#each_object_to_import', :clean_gitlab_redis_cache do + let(:issue) do + create( + :issue, + iid: 999, + project: project + ) + end + + let(:note) { double(id: 1) } + let(:page) { double(objects: [note], number: 1) } + + it 'fetches data' do + expect(client) + .to receive(:each_page) + .exactly(:once) # ensure to be cached on the second call + .with(:issue_comments, 'github/repo', issue.iid, page: 1) + .and_yield(page) + + expect { |b| subject.each_object_to_import(&b) }.to yield_with_args(note) + + subject.each_object_to_import {} + + expect( + Gitlab::Cache::Import::Caching.set_includes?( + "github-importer/issue/notes/already-imported/#{project.id}", + issue.iid + ) + ).to eq(true) + end + + it 'skips cached pages' do + Gitlab::GithubImport::PageCounter + .new(project, "issue/#{issue.id}/issue_comments") + .set(2) + + expect(client) + .to receive(:each_page) + .exactly(:once) # ensure to be cached on the second call + .with(:issue_comments, 'github/repo', issue.iid, page: 2) + + subject.each_object_to_import {} + end + + it 'skips cached merge requests' do + Gitlab::Cache::Import::Caching.set_add( + "github-importer/issue/notes/already-imported/#{project.id}", + issue.iid + ) + + expect(client).not_to receive(:each_page) + + subject.each_object_to_import {} + end + end +end diff --git a/spec/lib/gitlab/github_import/importer/single_endpoint_merge_request_notes_importer_spec.rb b/spec/lib/gitlab/github_import/importer/single_endpoint_merge_request_notes_importer_spec.rb new file mode 100644 index 00000000000..b8282212a90 --- /dev/null +++ b/spec/lib/gitlab/github_import/importer/single_endpoint_merge_request_notes_importer_spec.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::GithubImport::Importer::SingleEndpointMergeRequestNotesImporter do + let(:client) { double } + let(:project) { create(:project, import_source: 'github/repo') } + + subject { described_class.new(project, client) } + + it { is_expected.to include_module(Gitlab::GithubImport::ParallelScheduling) } + it { is_expected.to include_module(Gitlab::GithubImport::SingleEndpointNotesImporting) } + it { expect(subject.representation_class).to eq(Gitlab::GithubImport::Representation::Note) } + it { expect(subject.importer_class).to eq(Gitlab::GithubImport::Importer::NoteImporter) } + it { expect(subject.collection_method).to eq(:issue_comments) } + it { expect(subject.object_type).to eq(:note) } + it { expect(subject.id_for_already_imported_cache(double(id: 1))).to eq(1) } + + describe '#each_object_to_import', :clean_gitlab_redis_cache do + let(:merge_request) do + create( + :merge_request, + iid: 999, + source_project: project, + target_project: project + ) + end + + let(:note) { double(id: 1) } + let(:page) { double(objects: [note], number: 1) } + + it 'fetches data' do + expect(client) + .to receive(:each_page) + .exactly(:once) # ensure to be cached on the second call + .with(:issue_comments, 'github/repo', merge_request.iid, page: 1) + .and_yield(page) + + expect { |b| subject.each_object_to_import(&b) }.to yield_with_args(note) + + subject.each_object_to_import {} + + expect( + Gitlab::Cache::Import::Caching.set_includes?( + "github-importer/merge_request/notes/already-imported/#{project.id}", + merge_request.iid + ) + ).to eq(true) + end + + it 'skips cached pages' do + Gitlab::GithubImport::PageCounter + .new(project, "merge_request/#{merge_request.id}/issue_comments") + .set(2) + + expect(client) + .to receive(:each_page) + .exactly(:once) # ensure to be cached on the second call + .with(:issue_comments, 'github/repo', merge_request.iid, page: 2) + + subject.each_object_to_import {} + end + + it 'skips cached merge requests' do + Gitlab::Cache::Import::Caching.set_add( + "github-importer/merge_request/notes/already-imported/#{project.id}", + merge_request.iid + ) + + expect(client).not_to receive(:each_page) + + subject.each_object_to_import {} + end + end +end |