diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-27 12:06:26 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-27 12:06:26 +0300 |
commit | 20450649ca3132e55aea60436fa6117ca6c1ae5f (patch) | |
tree | 3b87d2e4b54e72a02dcc4d1af644fbf7269c2c2e /spec | |
parent | 3f0f13c6d9f567819d175b499cb437ebf3a63a38 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
13 files changed, 131 insertions, 54 deletions
diff --git a/spec/lib/gitlab/import_export/project.group.json b/spec/fixtures/lib/gitlab/import_export/project.group.json index 66f5bb4c87b..66f5bb4c87b 100644 --- a/spec/lib/gitlab/import_export/project.group.json +++ b/spec/fixtures/lib/gitlab/import_export/project.group.json diff --git a/spec/lib/gitlab/import_export/project.json b/spec/fixtures/lib/gitlab/import_export/project.json index 5f4bf18c743..5f4bf18c743 100644 --- a/spec/lib/gitlab/import_export/project.json +++ b/spec/fixtures/lib/gitlab/import_export/project.json diff --git a/spec/lib/gitlab/import_export/project.light.json b/spec/fixtures/lib/gitlab/import_export/project.light.json index 2971ca0f0f8..2971ca0f0f8 100644 --- a/spec/lib/gitlab/import_export/project.light.json +++ b/spec/fixtures/lib/gitlab/import_export/project.light.json diff --git a/spec/lib/gitlab/import_export/project.milestone-iid.json b/spec/fixtures/lib/gitlab/import_export/project.milestone-iid.json index b028147b5eb..b028147b5eb 100644 --- a/spec/lib/gitlab/import_export/project.milestone-iid.json +++ b/spec/fixtures/lib/gitlab/import_export/project.milestone-iid.json diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index d9272afadf2..eef9bd006b6 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -502,3 +502,17 @@ lists: milestone_releases: - milestone - release +design: &design +- issue +- actions +- versions +- notes +designs: *design +actions: +- design +- version +versions: &version +- issue +- designs +- actions +design_versions: *version diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb index 87be7857e67..fcc79279b6f 100644 --- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb @@ -2,6 +2,8 @@ require 'spec_helper' include ImportExport::CommonUtil describe Gitlab::ImportExport::ProjectTreeRestorer do + let(:shared) { project.import_export_shared } + describe 'restore project tree' do before(:context) do # Using an admin for import, so we can check assignment of existing members @@ -14,7 +16,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do RSpec::Mocks.with_temporary_scope do @project = create(:project, :builds_enabled, :issues_disabled, name: 'project', path: 'project') @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(Gitlab::Git::Repository).to receive(:branch_exists?).and_return(false) @@ -274,36 +276,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do 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| it 'has group label' do expect(project.group.labels.size).to eq(results.fetch(:labels, 0)) @@ -322,18 +294,17 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do context 'Light JSON' do let(:user) { create(:user) } - let(:shared) { project.import_export_shared } 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(:restored_project_json) { project_tree_restorer.restore } 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 context 'with a simple project' 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 end @@ -341,6 +312,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do it_behaves_like 'restores project correctly', issues: 1, labels: 2, + label_with_priorities: 'A project label', milestones: 1, first_issue_labels: 1, services: 1 @@ -363,7 +335,12 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do create(:ci_build, token: 'abcd') 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 @@ -430,15 +407,15 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do end 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 end - it_behaves_like 'restores project successfully' it_behaves_like 'restores project correctly', issues: 2, labels: 2, + label_with_priorities: 'A project label', milestones: 2, first_issue_labels: 1 @@ -459,7 +436,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do end 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 it 'does not import any templated services' do @@ -501,7 +478,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do end 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) @@ -534,7 +511,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do describe '#restored_project' do let(:project) { create(:project) } - let(:shared) { project.import_export_shared } let(:tree_hash) { { 'visibility_level' => visibility } } let(:restorer) { described_class.new(user: nil, shared: shared, project: project) } diff --git a/spec/lib/gitlab/import_export/relation_rename_service_spec.rb b/spec/lib/gitlab/import_export/relation_rename_service_spec.rb index 17bb5bcc155..472bf55d37e 100644 --- a/spec/lib/gitlab/import_export/relation_rename_service_spec.rb +++ b/spec/lib/gitlab/import_export/relation_rename_service_spec.rb @@ -21,7 +21,7 @@ describe Gitlab::ImportExport::RelationRenameService do context 'when importing' do 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!(:json_file) { ActiveSupport::JSON.decode(file_content) } diff --git a/spec/lib/gitlab/import_export/repo_saver_spec.rb b/spec/lib/gitlab/import_export/repo_saver_spec.rb index 5a646b4aac8..c3df371af43 100644 --- a/spec/lib/gitlab/import_export/repo_saver_spec.rb +++ b/spec/lib/gitlab/import_export/repo_saver_spec.rb @@ -2,8 +2,8 @@ require 'spec_helper' describe Gitlab::ImportExport::RepoSaver do describe 'bundle a project Git repo' do - let(:user) { create(:user) } - let!(:project) { create(:project, :public, name: 'searchable_project') } + set(:user) { create(:user) } + let!(:project) { create(:project, :repository) } let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" } let(:shared) { project.import_export_shared } let(:bundler) { described_class.new(project: project, shared: shared) } @@ -20,5 +20,13 @@ describe Gitlab::ImportExport::RepoSaver do it 'bundles the repo successfully' do expect(bundler.save).to be true 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 diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml index f87b0cdd3c6..d3b51a53ede 100644 --- a/spec/lib/gitlab/import_export/safe_model_attributes.yml +++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml @@ -731,3 +731,18 @@ ExternalPullRequest: - target_repository - source_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 diff --git a/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb b/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb index 441aa1defe6..249afbd23d1 100644 --- a/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb +++ b/spec/lib/gitlab/import_export/wiki_repo_saver_spec.rb @@ -2,8 +2,8 @@ require 'spec_helper' describe Gitlab::ImportExport::WikiRepoSaver do describe 'bundle a wiki Git repo' do - let(:user) { create(:user) } - let!(:project) { create(:project, :public, :wiki_repo, name: 'searchable_project') } + set(:user) { create(:user) } + let!(:project) { create(:project, :wiki_repo) } let(:export_path) { "#{Dir.tmpdir}/project_tree_saver_spec" } let(:shared) { project.import_export_shared } let(:wiki_bundler) { described_class.new(project: project, shared: shared) } @@ -23,5 +23,13 @@ describe Gitlab::ImportExport::WikiRepoSaver do it 'bundles the repo successfully' do expect(wiki_bundler.save).to be true 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 diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 28be8056993..7226beacebe 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1075,7 +1075,7 @@ describe Repository do let(:ref) { 'refs/heads/master' } it 'returns nil' do - is_expected.to eq(nil) + is_expected.to be_nil end end @@ -2002,7 +2002,7 @@ describe Repository do it 'returns nil if repo does not exist' do 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 it 'returns the first avatar file found in the repository' do @@ -2604,6 +2604,10 @@ describe Repository do expect { repository.create_if_not_exists }.to change { repository.exists? }.from(false).to(true) 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 expect(repository.raw.gitaly_repository_client).to receive(:create_repository) @@ -2618,6 +2622,10 @@ describe Repository do repository.create_if_not_exists end + + it 'returns nil' do + expect(repository.create_if_not_exists).to be_nil + end end context 'when the repository exists but the cache is not up to date' do @@ -2629,6 +2637,10 @@ describe Repository do expect { repository.create_if_not_exists }.not_to raise_error end + + it 'returns nil' do + expect(repository.create_if_not_exists).to be_nil + end end end diff --git a/spec/services/projects/import_export/export_service_spec.rb b/spec/services/projects/import_export/export_service_spec.rb index 404bb55629a..146d656c909 100644 --- a/spec/services/projects/import_export/export_service_spec.rb +++ b/spec/services/projects/import_export/export_service_spec.rb @@ -35,20 +35,27 @@ describe Projects::ImportExport::ExportService do end 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 expect(Gitlab::ImportExport::RepoSaver).to receive(:new).twice.and_call_original service.execute end - it 'saves the lfs objects' do - expect(Gitlab::ImportExport::LfsSaver).to receive(:new).and_call_original + it 'saves the wiki repo' do + expect(Gitlab::ImportExport::WikiRepoSaver).to receive(:new).and_call_original service.execute end - it 'saves the wiki repo' do - expect(Gitlab::ImportExport::WikiRepoSaver).to receive(:new).and_call_original + it 'saves the lfs objects' do + expect(Gitlab::ImportExport::LfsSaver).to receive(:new).and_call_original service.execute end @@ -98,9 +105,9 @@ describe Projects::ImportExport::ExportService do end end - context 'when saver services fail' do + context 'when saving services fail' do before do - allow(service).to receive(:save_services).and_return(false) + allow(service).to receive(:save_exporters).and_return(false) end after do @@ -122,7 +129,7 @@ describe Projects::ImportExport::ExportService do expect(Rails.logger).to receive(:error) 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) end end diff --git a/spec/support/shared_examples/lib/gitlab/import_export/project_tree_restorer_shared_examples.rb b/spec/support/shared_examples/lib/gitlab/import_export/project_tree_restorer_shared_examples.rb new file mode 100644 index 00000000000..f26a8554055 --- /dev/null +++ b/spec/support/shared_examples/lib/gitlab/import_export/project_tree_restorer_shared_examples.rb @@ -0,0 +1,37 @@ +# 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 |