Skip to content
Snippets Groups Projects
Commit 20450649 authored by GitLab Bot's avatar GitLab Bot
Browse files

Add latest changes from gitlab-org/gitlab@master

parent 3f0f13c6
No related branches found
No related tags found
No related merge requests found
Showing
with 131 additions and 54 deletions
Loading
@@ -502,3 +502,17 @@ lists:
Loading
@@ -502,3 +502,17 @@ lists:
milestone_releases: milestone_releases:
- milestone - milestone
- release - release
design: &design
- issue
- actions
- versions
- notes
designs: *design
actions:
- design
- version
versions: &version
- issue
- designs
- actions
design_versions: *version
Loading
@@ -2,6 +2,8 @@ require 'spec_helper'
Loading
@@ -2,6 +2,8 @@ require 'spec_helper'
include ImportExport::CommonUtil include ImportExport::CommonUtil
   
describe Gitlab::ImportExport::ProjectTreeRestorer do describe Gitlab::ImportExport::ProjectTreeRestorer do
let(:shared) { project.import_export_shared }
describe 'restore project tree' do describe 'restore project tree' do
before(:context) do before(:context) do
# Using an admin for import, so we can check assignment of existing members # Using an admin for import, so we can check assignment of existing members
Loading
@@ -14,7 +16,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -14,7 +16,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
RSpec::Mocks.with_temporary_scope do RSpec::Mocks.with_temporary_scope do
@project = create(:project, :builds_enabled, :issues_disabled, name: 'project', path: 'project') @project = create(:project, :builds_enabled, :issues_disabled, name: 'project', path: 'project')
@shared = @project.import_export_shared @shared = @project.import_export_shared
allow(@shared).to receive(:export_path).and_return('spec/lib/gitlab/import_export/') allow(@shared).to receive(:export_path).and_return('spec/fixtures/lib/gitlab/import_export/')
   
allow_any_instance_of(Repository).to receive(:fetch_source_branch!).and_return(true) allow_any_instance_of(Repository).to receive(:fetch_source_branch!).and_return(true)
allow_any_instance_of(Gitlab::Git::Repository).to receive(:branch_exists?).and_return(false) allow_any_instance_of(Gitlab::Git::Repository).to receive(:branch_exists?).and_return(false)
Loading
@@ -274,36 +276,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -274,36 +276,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end end
end end
   
shared_examples 'restores project successfully' do
it 'correctly restores project' do
expect(shared.errors).to be_empty
expect(restored_project_json).to be_truthy
end
end
shared_examples 'restores project correctly' do |**results|
it 'has labels' do
expect(project.labels.size).to eq(results.fetch(:labels, 0))
end
it 'has label priorities' do
expect(project.labels.find_by(title: 'A project label').priorities).not_to be_empty
end
it 'has milestones' do
expect(project.milestones.size).to eq(results.fetch(:milestones, 0))
end
it 'has issues' do
expect(project.issues.size).to eq(results.fetch(:issues, 0))
end
it 'does not set params that are excluded from import_export settings' do
expect(project.import_type).to be_nil
expect(project.creator_id).not_to eq 123
end
end
shared_examples 'restores group correctly' do |**results| shared_examples 'restores group correctly' do |**results|
it 'has group label' do it 'has group label' do
expect(project.group.labels.size).to eq(results.fetch(:labels, 0)) expect(project.group.labels.size).to eq(results.fetch(:labels, 0))
Loading
@@ -322,18 +294,17 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -322,18 +294,17 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
   
context 'Light JSON' do context 'Light JSON' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:shared) { project.import_export_shared }
let!(:project) { create(:project, :builds_disabled, :issues_disabled, name: 'project', path: 'project') } let!(:project) { create(:project, :builds_disabled, :issues_disabled, name: 'project', path: 'project') }
let(:project_tree_restorer) { described_class.new(user: user, shared: shared, project: project) } let(:project_tree_restorer) { described_class.new(user: user, shared: shared, project: project) }
let(:restored_project_json) { project_tree_restorer.restore } let(:restored_project_json) { project_tree_restorer.restore }
   
before do before do
allow(shared).to receive(:export_path).and_return('spec/lib/gitlab/import_export/') allow(shared).to receive(:export_path).and_return('spec/fixtures/lib/gitlab/import_export/')
end end
   
context 'with a simple project' do context 'with a simple project' do
before do before do
project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.light.json") project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.light.json")
   
restored_project_json restored_project_json
end end
Loading
@@ -341,6 +312,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -341,6 +312,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
it_behaves_like 'restores project correctly', it_behaves_like 'restores project correctly',
issues: 1, issues: 1,
labels: 2, labels: 2,
label_with_priorities: 'A project label',
milestones: 1, milestones: 1,
first_issue_labels: 1, first_issue_labels: 1,
services: 1 services: 1
Loading
@@ -363,7 +335,12 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -363,7 +335,12 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
create(:ci_build, token: 'abcd') create(:ci_build, token: 'abcd')
end end
   
it_behaves_like 'restores project successfully' it_behaves_like 'restores project correctly',
issues: 1,
labels: 2,
label_with_priorities: 'A project label',
milestones: 1,
first_issue_labels: 1
end end
end end
   
Loading
@@ -430,15 +407,15 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -430,15 +407,15 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end end
   
before do before do
project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.group.json") project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.group.json")
   
restored_project_json restored_project_json
end end
   
it_behaves_like 'restores project successfully'
it_behaves_like 'restores project correctly', it_behaves_like 'restores project correctly',
issues: 2, issues: 2,
labels: 2, labels: 2,
label_with_priorities: 'A project label',
milestones: 2, milestones: 2,
first_issue_labels: 1 first_issue_labels: 1
   
Loading
@@ -459,7 +436,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -459,7 +436,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end end
   
before do before do
project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.light.json") project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.light.json")
end end
   
it 'does not import any templated services' do it 'does not import any templated services' do
Loading
@@ -501,7 +478,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -501,7 +478,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end end
   
it 'preserves the project milestone IID' do it 'preserves the project milestone IID' do
project_tree_restorer.instance_variable_set(:@path, "spec/lib/gitlab/import_export/project.milestone-iid.json") project_tree_restorer.instance_variable_set(:@path, "spec/fixtures/lib/gitlab/import_export/project.milestone-iid.json")
   
expect_any_instance_of(Gitlab::ImportExport::Shared).not_to receive(:error) expect_any_instance_of(Gitlab::ImportExport::Shared).not_to receive(:error)
   
Loading
@@ -534,7 +511,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
Loading
@@ -534,7 +511,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
   
describe '#restored_project' do describe '#restored_project' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:shared) { project.import_export_shared }
let(:tree_hash) { { 'visibility_level' => visibility } } let(:tree_hash) { { 'visibility_level' => visibility } }
let(:restorer) { described_class.new(user: nil, shared: shared, project: project) } let(:restorer) { described_class.new(user: nil, shared: shared, project: project) }
   
Loading
Loading
Loading
@@ -21,7 +21,7 @@ describe Gitlab::ImportExport::RelationRenameService do
Loading
@@ -21,7 +21,7 @@ describe Gitlab::ImportExport::RelationRenameService do
   
context 'when importing' do context 'when importing' do
let(:project_tree_restorer) { Gitlab::ImportExport::ProjectTreeRestorer.new(user: user, shared: shared, project: project) } let(:project_tree_restorer) { Gitlab::ImportExport::ProjectTreeRestorer.new(user: user, shared: shared, project: project) }
let(:import_path) { 'spec/lib/gitlab/import_export' } let(:import_path) { 'spec/fixtures/lib/gitlab/import_export' }
let(:file_content) { IO.read("#{import_path}/project.json") } let(:file_content) { IO.read("#{import_path}/project.json") }
let!(:json_file) { ActiveSupport::JSON.decode(file_content) } let!(:json_file) { ActiveSupport::JSON.decode(file_content) }
   
Loading
Loading
Loading
@@ -2,8 +2,8 @@ require 'spec_helper'
Loading
@@ -2,8 +2,8 @@ require 'spec_helper'
   
describe Gitlab::ImportExport::RepoSaver do describe Gitlab::ImportExport::RepoSaver do
describe 'bundle a project Git repo' do describe 'bundle a project Git repo' do
let(:user) { create(:user) } set(:user) { create(:user) }
let!(:project) { create(:project, :public, name: 'searchable_project') } let!(:project) { create(:project, :repository) }
let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" } let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" }
let(:shared) { project.import_export_shared } let(:shared) { project.import_export_shared }
let(:bundler) { described_class.new(project: project, shared: shared) } let(:bundler) { described_class.new(project: project, shared: shared) }
Loading
@@ -20,5 +20,13 @@ describe Gitlab::ImportExport::RepoSaver do
Loading
@@ -20,5 +20,13 @@ describe Gitlab::ImportExport::RepoSaver do
it 'bundles the repo successfully' do it 'bundles the repo successfully' do
expect(bundler.save).to be true expect(bundler.save).to be true
end end
context 'when the repo is empty' do
let!(:project) { create(:project) }
it 'bundles the repo successfully' do
expect(bundler.save).to be true
end
end
end end
end end
Loading
@@ -731,3 +731,18 @@ ExternalPullRequest:
Loading
@@ -731,3 +731,18 @@ ExternalPullRequest:
- target_repository - target_repository
- source_sha - source_sha
- target_sha - target_sha
DesignManagement::Design:
- id
- project_id
- issue_id
- filename
DesignManagement::Action:
- design_id
- event
- version_id
DesignManagement::Version:
- id
- created_at
- sha
- issue_id
- user_id
Loading
@@ -2,8 +2,8 @@ require 'spec_helper'
Loading
@@ -2,8 +2,8 @@ require 'spec_helper'
   
describe Gitlab::ImportExport::WikiRepoSaver do describe Gitlab::ImportExport::WikiRepoSaver do
describe 'bundle a wiki Git repo' do describe 'bundle a wiki Git repo' do
let(:user) { create(:user) } set(:user) { create(:user) }
let!(:project) { create(:project, :public, :wiki_repo, name: 'searchable_project') } let!(:project) { create(:project, :wiki_repo) }
let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" } let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" }
let(:shared) { project.import_export_shared } let(:shared) { project.import_export_shared }
let(:wiki_bundler) { described_class.new(project: project, shared: shared) } let(:wiki_bundler) { described_class.new(project: project, shared: shared) }
Loading
@@ -23,5 +23,13 @@ describe Gitlab::ImportExport::WikiRepoSaver do
Loading
@@ -23,5 +23,13 @@ describe Gitlab::ImportExport::WikiRepoSaver do
it 'bundles the repo successfully' do it 'bundles the repo successfully' do
expect(wiki_bundler.save).to be true expect(wiki_bundler.save).to be true
end end
context 'when the repo is empty' do
let!(:project) { create(:project) }
it 'bundles the repo successfully' do
expect(wiki_bundler.save).to be true
end
end
end end
end end
Loading
@@ -1075,7 +1075,7 @@ describe Repository do
Loading
@@ -1075,7 +1075,7 @@ describe Repository do
let(:ref) { 'refs/heads/master' } let(:ref) { 'refs/heads/master' }
   
it 'returns nil' do it 'returns nil' do
is_expected.to eq(nil) is_expected.to be_nil
end end
end end
   
Loading
@@ -2002,7 +2002,7 @@ describe Repository do
Loading
@@ -2002,7 +2002,7 @@ describe Repository do
it 'returns nil if repo does not exist' do it 'returns nil if repo does not exist' do
allow(repository).to receive(:root_ref).and_raise(Gitlab::Git::Repository::NoRepository) allow(repository).to receive(:root_ref).and_raise(Gitlab::Git::Repository::NoRepository)
   
expect(repository.avatar).to eq(nil) expect(repository.avatar).to be_nil
end end
   
it 'returns the first avatar file found in the repository' do it 'returns the first avatar file found in the repository' do
Loading
@@ -2604,6 +2604,10 @@ describe Repository do
Loading
@@ -2604,6 +2604,10 @@ describe Repository do
expect { repository.create_if_not_exists }.to change { repository.exists? }.from(false).to(true) expect { repository.create_if_not_exists }.to change { repository.exists? }.from(false).to(true)
end end
   
it 'returns true' do
expect(repository.create_if_not_exists).to eq(true)
end
it 'calls out to the repository client to create a repo' do it 'calls out to the repository client to create a repo' do
expect(repository.raw.gitaly_repository_client).to receive(:create_repository) expect(repository.raw.gitaly_repository_client).to receive(:create_repository)
   
Loading
@@ -2618,6 +2622,10 @@ describe Repository do
Loading
@@ -2618,6 +2622,10 @@ describe Repository do
   
repository.create_if_not_exists repository.create_if_not_exists
end end
it 'returns nil' do
expect(repository.create_if_not_exists).to be_nil
end
end end
   
context 'when the repository exists but the cache is not up to date' do context 'when the repository exists but the cache is not up to date' do
Loading
@@ -2629,6 +2637,10 @@ describe Repository do
Loading
@@ -2629,6 +2637,10 @@ describe Repository do
   
expect { repository.create_if_not_exists }.not_to raise_error expect { repository.create_if_not_exists }.not_to raise_error
end end
it 'returns nil' do
expect(repository.create_if_not_exists).to be_nil
end
end end
end end
   
Loading
Loading
Loading
@@ -35,20 +35,27 @@ describe Projects::ImportExport::ExportService do
Loading
@@ -35,20 +35,27 @@ describe Projects::ImportExport::ExportService do
end end
   
it 'saves the repo' do it 'saves the repo' do
# This spec errors when run against the EE codebase as there will be a third repository
# saved (the EE-specific design repository).
#
# Instead, skip this test when run within EE. There is a spec for the EE-specific design repo
# in the corresponding EE spec.
skip if Gitlab.ee?
# once for the normal repo, once for the wiki # once for the normal repo, once for the wiki
expect(Gitlab::ImportExport::RepoSaver).to receive(:new).twice.and_call_original expect(Gitlab::ImportExport::RepoSaver).to receive(:new).twice.and_call_original
   
service.execute service.execute
end end
   
it 'saves the lfs objects' do it 'saves the wiki repo' do
expect(Gitlab::ImportExport::LfsSaver).to receive(:new).and_call_original expect(Gitlab::ImportExport::WikiRepoSaver).to receive(:new).and_call_original
   
service.execute service.execute
end end
   
it 'saves the wiki repo' do it 'saves the lfs objects' do
expect(Gitlab::ImportExport::WikiRepoSaver).to receive(:new).and_call_original expect(Gitlab::ImportExport::LfsSaver).to receive(:new).and_call_original
   
service.execute service.execute
end end
Loading
@@ -98,9 +105,9 @@ describe Projects::ImportExport::ExportService do
Loading
@@ -98,9 +105,9 @@ describe Projects::ImportExport::ExportService do
end end
end end
   
context 'when saver services fail' do context 'when saving services fail' do
before do before do
allow(service).to receive(:save_services).and_return(false) allow(service).to receive(:save_exporters).and_return(false)
end end
   
after do after do
Loading
@@ -122,7 +129,7 @@ describe Projects::ImportExport::ExportService do
Loading
@@ -122,7 +129,7 @@ describe Projects::ImportExport::ExportService do
expect(Rails.logger).to receive(:error) expect(Rails.logger).to receive(:error)
end end
   
it 'the after export strategy is not called' do it 'does not call the export strategy' do
expect(service).not_to receive(:execute_after_export_action) expect(service).not_to receive(:execute_after_export_action)
end end
end end
Loading
Loading
# frozen_string_literal: true
# Shared examples for ProjectTreeRestorer (shared to allow the testing
# of EE-specific features)
RSpec.shared_examples 'restores project correctly' do |**results|
it 'restores the project' do
expect(shared.errors).to be_empty
expect(restored_project_json).to be_truthy
end
it 'has labels' do
labels_size = results.fetch(:labels, 0)
expect(project.labels.size).to eq(labels_size)
end
it 'has label priorities' do
label_with_priorities = results[:label_with_priorities]
if label_with_priorities
expect(project.labels.find_by(title: label_with_priorities).priorities).not_to be_empty
end
end
it 'has milestones' do
expect(project.milestones.size).to eq(results.fetch(:milestones, 0))
end
it 'has issues' do
expect(project.issues.size).to eq(results.fetch(:issues, 0))
end
it 'does not set params that are excluded from import_export settings' do
expect(project.import_type).to be_nil
expect(project.creator_id).not_to eq 123
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment