diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-10 07:53:40 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-10 07:53:40 +0000 |
commit | cfc792b9ca064990e6540cb742e80529ea669a81 (patch) | |
tree | 147cd4256319990cebbc02fe8e4fbbbe06f5720a /spec/lib/gitlab | |
parent | 93c6764dacd4c605027ef1cd367d3aebe420b223 (diff) | |
download | gitlab-ce-cfc792b9ca064990e6540cb742e80529ea669a81.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab')
7 files changed, 134 insertions, 13 deletions
diff --git a/spec/lib/gitlab/ci/config/entry/environment_spec.rb b/spec/lib/gitlab/ci/config/entry/environment_spec.rb index c80b54bd6be..8c21d5342cc 100644 --- a/spec/lib/gitlab/ci/config/entry/environment_spec.rb +++ b/spec/lib/gitlab/ci/config/entry/environment_spec.rb @@ -206,6 +206,35 @@ describe Gitlab::Ci::Config::Entry::Environment do end end + context 'when auto_stop_in is specified' do + let(:config) do + { + name: 'review/$CI_COMMIT_REF_NAME', + url: 'https://$CI_COMMIT_REF_NAME.review.gitlab.com', + on_stop: 'stop_review', + auto_stop_in: auto_stop_in + } + end + + context 'when auto_stop_in is correct format' do + let(:auto_stop_in) { '2 days' } + + it 'becomes valid' do + expect(entry).to be_valid + expect(entry.auto_stop_in).to eq(auto_stop_in) + end + end + + context 'when auto_stop_in is invalid format' do + let(:auto_stop_in) { 'invalid' } + + it 'becomes invalid' do + expect(entry).not_to be_valid + expect(entry.errors).to include 'environment auto stop in should be a duration' + end + end + end + context 'when configuration is invalid' do context 'when configuration is an array' do let(:config) { ['env'] } diff --git a/spec/lib/gitlab/database_spec.rb b/spec/lib/gitlab/database_spec.rb index 15fb1503529..a033316a6d9 100644 --- a/spec/lib/gitlab/database_spec.rb +++ b/spec/lib/gitlab/database_spec.rb @@ -228,6 +228,7 @@ describe Gitlab::Database do describe '.bulk_insert' do before do allow(described_class).to receive(:connection).and_return(connection) + allow(described_class).to receive(:version).and_return(version) allow(connection).to receive(:quote_column_name, &:itself) allow(connection).to receive(:quote, &:itself) allow(connection).to receive(:execute) @@ -242,6 +243,8 @@ describe Gitlab::Database do ] end + let_it_be(:version) { 9.6 } + it 'does nothing with empty rows' do expect(connection).not_to receive(:execute) @@ -307,6 +310,29 @@ describe Gitlab::Database do expect(ids).to eq([10]) end + + context 'with version >= 9.5' do + it 'allows setting the upsert to do nothing' do + expect(connection) + .to receive(:execute) + .with(/ON CONFLICT DO NOTHING/) + + described_class + .bulk_insert('test', [{ number: 10 }], on_conflict: :do_nothing) + end + end + + context 'with version < 9.5' do + let(:version) { 9.4 } + it 'refuses setting the upsert' do + expect(connection) + .not_to receive(:execute) + .with(/ON CONFLICT/) + + described_class + .bulk_insert('test', [{ number: 10 }], on_conflict: :do_nothing) + end + end end end diff --git a/spec/lib/gitlab/import_export/file_importer_spec.rb b/spec/lib/gitlab/import_export/file_importer_spec.rb index 3c5f916a879..737bedab844 100644 --- a/spec/lib/gitlab/import_export/file_importer_spec.rb +++ b/spec/lib/gitlab/import_export/file_importer_spec.rb @@ -31,7 +31,7 @@ describe Gitlab::ImportExport::FileImporter do context 'normal run' do before do - described_class.import(project: build(:project), archive_file: '', shared: shared) + described_class.import(importable: build(:project), archive_file: '', shared: shared) end it 'removes symlinks in root folder' do @@ -70,7 +70,7 @@ describe Gitlab::ImportExport::FileImporter do context 'error' do before do allow_any_instance_of(described_class).to receive(:wait_for_archived_file).and_raise(StandardError) - described_class.import(project: build(:project), archive_file: '', shared: shared) + described_class.import(importable: build(:project), archive_file: '', shared: shared) end it 'removes symlinks in root folder' do diff --git a/spec/lib/gitlab/import_export/members_mapper_spec.rb b/spec/lib/gitlab/import_export/members_mapper_spec.rb index 9847166a4d1..01a7901062a 100644 --- a/spec/lib/gitlab/import_export/members_mapper_spec.rb +++ b/spec/lib/gitlab/import_export/members_mapper_spec.rb @@ -27,7 +27,7 @@ describe Gitlab::ImportExport::MembersMapper do "email" => user2.email, "username" => 'test' }, - "user_id" => 19 + "user_id" => 19 }, { "id" => 3, @@ -47,7 +47,7 @@ describe Gitlab::ImportExport::MembersMapper do let(:members_mapper) do described_class.new( - exported_members: exported_members, user: user, project: project) + exported_members: exported_members, user: user, importable: project) end it 'includes the exported user ID in the map' do @@ -83,7 +83,8 @@ describe Gitlab::ImportExport::MembersMapper do end it 'removes old user_id from member_hash to avoid conflict with user key' do - expect(ProjectMember).to receive(:create) + expect(ProjectMember) + .to receive(:create) .twice .with(hash_excluding('user_id')) .and_call_original @@ -117,7 +118,7 @@ describe Gitlab::ImportExport::MembersMapper do let(:project) { create(:project, :public, name: 'searchable_project', namespace: group) } let(:members_mapper) do described_class.new( - exported_members: exported_members, user: user2, project: project) + exported_members: exported_members, user: user2, importable: project) end before do @@ -140,7 +141,7 @@ describe Gitlab::ImportExport::MembersMapper do let(:project) { create(:project, namespace: group) } let(:members_mapper) do described_class.new( - exported_members: exported_members, user: user, project: project) + exported_members: exported_members, user: user, importable: project) end before do @@ -163,7 +164,7 @@ describe Gitlab::ImportExport::MembersMapper do it 'includes importer specific error message' do expect(ProjectMember).to receive(:create!).and_raise(StandardError.new(exception_message)) - expect { members_mapper.map }.to raise_error(StandardError, "Error adding importer user to project members. #{exception_message}") + expect { members_mapper.map }.to raise_error(StandardError, "Error adding importer user to Project members. #{exception_message}") end end end 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 95e2142acec..67614eb509d 100644 --- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb @@ -31,9 +31,6 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do project_tree_restorer = described_class.new(user: @user, shared: @shared, project: @project) - expect(Gitlab::ImportExport::RelationFactory).to receive(:create).with(hash_including(excluded_keys: ['whatever'])).and_call_original.at_least(:once) - allow(project_tree_restorer).to receive(:excluded_keys_for_relation).and_return(['whatever']) - @restored_project_json = project_tree_restorer.restore end end @@ -557,8 +554,9 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do context 'Minimal JSON' do let(:project) { create(:project) } + let(:user) { create(:user) } let(:tree_hash) { { 'visibility_level' => visibility } } - let(:restorer) { described_class.new(user: nil, shared: shared, project: project) } + let(:restorer) { described_class.new(user: user, shared: shared, project: project) } before do expect(restorer).to receive(:read_tree_hash) { tree_hash } diff --git a/spec/lib/gitlab/import_export/relation_factory_spec.rb b/spec/lib/gitlab/import_export/relation_factory_spec.rb index 8669b9ce7eb..41d6e6f24fc 100644 --- a/spec/lib/gitlab/import_export/relation_factory_spec.rb +++ b/spec/lib/gitlab/import_export/relation_factory_spec.rb @@ -203,7 +203,7 @@ describe Gitlab::ImportExport::RelationFactory do Gitlab::ImportExport::MembersMapper.new( exported_members: [exported_member], user: user, - project: project) + importable: project) end it 'maps the right author to the imported note' do diff --git a/spec/lib/gitlab/import_export/relation_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/relation_tree_restorer_spec.rb new file mode 100644 index 00000000000..c761f9652ab --- /dev/null +++ b/spec/lib/gitlab/import_export/relation_tree_restorer_spec.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true + +# This spec is a lightweight version of: +# * project_tree_restorer_spec.rb +# +# In depth testing is being done in the above specs. +# This spec tests that restore project works +# but does not have 100% relation coverage. + +require 'spec_helper' + +describe Gitlab::ImportExport::RelationTreeRestorer do + include ImportExport::CommonUtil + + let(:user) { create(:user) } + let(:shared) { Gitlab::ImportExport::Shared.new(importable) } + let(:members_mapper) { Gitlab::ImportExport::MembersMapper.new(exported_members: {}, user: user, importable: importable) } + + let(:importable_hash) do + json = IO.read(path) + ActiveSupport::JSON.decode(json) + end + + let(:relation_tree_restorer) do + described_class.new( + user: user, + shared: shared, + tree_hash: tree_hash, + importable: importable, + members_mapper: members_mapper, + relation_factory: relation_factory, + reader: reader + ) + end + + subject { relation_tree_restorer.restore } + + context 'when restoring a project' do + let(:path) { 'spec/fixtures/lib/gitlab/import_export/complex/project.json' } + let(:importable) { create(:project, :builds_enabled, :issues_disabled, name: 'project', path: 'project') } + let(:relation_factory) { Gitlab::ImportExport::RelationFactory } + let(:reader) { Gitlab::ImportExport::Reader.new(shared: shared) } + let(:tree_hash) { importable_hash } + + it 'restores project tree' do + expect(subject).to eq(true) + end + + describe 'imported project' do + let(:project) { Project.find_by_path('project') } + + before do + subject + end + + it 'has the project attributes and relations' do + expect(project.description).to eq('Nisi et repellendus ut enim quo accusamus vel magnam.') + expect(project.labels.count).to eq(3) + expect(project.boards.count).to eq(1) + expect(project.project_feature).not_to be_nil + expect(project.custom_attributes.count).to eq(2) + expect(project.project_badges.count).to eq(2) + expect(project.snippets.count).to eq(1) + end + end + end +end |