diff options
Diffstat (limited to 'spec/lib')
14 files changed, 190 insertions, 21 deletions
diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb index 9980f4d8e23..3595d06a184 100644 --- a/spec/lib/api/helpers_spec.rb +++ b/spec/lib/api/helpers_spec.rb @@ -22,7 +22,7 @@ describe API::Helpers do context 'when ID is used as an argument' do let(:existing_id) { project.id } - let(:non_existing_id) { (Project.maximum(:id) || 0) + 1 } + let(:non_existing_id) { non_existing_record_id } it_behaves_like 'project finder' end @@ -66,7 +66,7 @@ describe API::Helpers do context 'when ID is used as an argument' do let(:existing_id) { namespace.id } - let(:non_existing_id) { 9999 } + let(:non_existing_id) { non_existing_record_id } it_behaves_like 'namespace finder' end diff --git a/spec/lib/banzai/filter/reference_redactor_filter_spec.rb b/spec/lib/banzai/filter/reference_redactor_filter_spec.rb index a68581b3000..956bc85e53f 100644 --- a/spec/lib/banzai/filter/reference_redactor_filter_spec.rb +++ b/spec/lib/banzai/filter/reference_redactor_filter_spec.rb @@ -77,7 +77,7 @@ describe Banzai::Filter::ReferenceRedactorFilter do end it 'handles invalid references' do - link = reference_link(project: 12345, reference_type: 'test') + link = reference_link(project: non_existing_record_id, reference_type: 'test') expect { filter(link) }.not_to raise_error end diff --git a/spec/lib/gitlab/application_context_spec.rb b/spec/lib/gitlab/application_context_spec.rb index c6bc3c945a8..0903ca6f9e8 100644 --- a/spec/lib/gitlab/application_context_spec.rb +++ b/spec/lib/gitlab/application_context_spec.rb @@ -9,14 +9,16 @@ describe Gitlab::ApplicationContext do end it 'passes the expected context on to labkit' do + user = build(:user) + project = build(:project) fake_proc = duck_type(:call) expected_context = hash_including(user: fake_proc, project: fake_proc, root_namespace: fake_proc) expect(Labkit::Context).to receive(:with_context).with(expected_context) described_class.with_context( - user: build(:user), - project: build(:project), + user: user, + project: project, namespace: build(:namespace)) {} end diff --git a/spec/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config_spec.rb b/spec/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config_spec.rb index 91ede05f395..44f5c3380a1 100644 --- a/spec/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config_spec.rb +++ b/spec/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config_spec.rb @@ -39,7 +39,7 @@ describe Gitlab::BackgroundMigration::BackfillProjectFullpathInRepoConfig, schem end it 'raises OrphanedNamespaceError when any parent namespace does not exist' do - subgroup.update_attribute(:parent_id, namespaces.maximum(:id).succ) + subgroup.update_attribute(:parent_id, non_existing_record_id) expect { project.full_path }.to raise_error(Gitlab::BackgroundMigration::BackfillProjectFullpathInRepoConfig::OrphanedNamespaceError) end diff --git a/spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb b/spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb index 510a0074554..cfaef1578a9 100644 --- a/spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb +++ b/spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb @@ -90,7 +90,7 @@ describe Gitlab::BackgroundMigration::BackfillProjectRepositories do it 'raises OrphanedNamespaceError when any parent namespace does not exist' do subgroup = create(:group, parent: group) project_orphaned_namespace = create(:project, name: 'baz', path: 'baz', namespace: subgroup, storage_version: nil) - subgroup.update_column(:parent_id, Namespace.maximum(:id).succ) + subgroup.update_column(:parent_id, non_existing_record_id) project = described_class.find(project_orphaned_namespace.id) project.route.destroy diff --git a/spec/lib/gitlab/background_migration/populate_user_highest_roles_table_spec.rb b/spec/lib/gitlab/background_migration/populate_user_highest_roles_table_spec.rb new file mode 100644 index 00000000000..be661d5b83e --- /dev/null +++ b/spec/lib/gitlab/background_migration/populate_user_highest_roles_table_spec.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::BackgroundMigration::PopulateUserHighestRolesTable, schema: 20200311130802 do + let(:members) { table(:members) } + let(:users) { table(:users) } + let(:user_highest_roles) { table(:user_highest_roles) } + + def create_user(id, params = {}) + user_params = { + id: id, + state: 'active', + user_type: nil, + bot_type: nil, + ghost: nil, + email: "user#{id}@example.com", + projects_limit: 0 + }.merge(params) + + users.create(user_params) + end + + def create_member(id, access_level, params = {}) + params = { + user_id: id, + access_level: access_level, + source_id: 1, + source_type: 'Group', + notification_level: 0 + }.merge(params) + + members.create(params) + end + + before do + create_user(1) + create_user(2, state: 'blocked') + create_user(3, user_type: 2) + create_user(4) + create_user(5, bot_type: 1) + create_user(6, ghost: true) + create_user(7, ghost: false) + create_user(8) + + create_member(1, 40) + create_member(7, 30) + create_member(8, 20, requested_at: Time.current) + + user_highest_roles.create(user_id: 1, highest_access_level: 50) + end + + describe '#perform' do + it 'creates user_highest_roles rows according to users', :aggregate_failures do + expect { subject.perform(1, 8) }.to change(UserHighestRole, :count).from(1).to(4) + + created_or_updated_rows = [ + { 'user_id' => 1, 'highest_access_level' => 40 }, + { 'user_id' => 4, 'highest_access_level' => nil }, + { 'user_id' => 7, 'highest_access_level' => 30 }, + { 'user_id' => 8, 'highest_access_level' => nil } + ] + + rows = user_highest_roles.order(:user_id).map do |row| + row.attributes.slice('user_id', 'highest_access_level') + end + + expect(rows).to match_array(created_or_updated_rows) + end + end +end diff --git a/spec/lib/gitlab/background_migration/recalculate_project_authorizations_spec.rb b/spec/lib/gitlab/background_migration/recalculate_project_authorizations_spec.rb index 4699cc42b38..ba87312e2bf 100644 --- a/spec/lib/gitlab/background_migration/recalculate_project_authorizations_spec.rb +++ b/spec/lib/gitlab/background_migration/recalculate_project_authorizations_spec.rb @@ -234,10 +234,8 @@ describe Gitlab::BackgroundMigration::RecalculateProjectAuthorizations, schema: end context 'deleted user' do - let(:nonexistent_user_id) { User.maximum(:id).to_i + 999 } - it 'does not fail' do - expect { described_class.new.perform([nonexistent_user_id]) }.not_to raise_error + expect { described_class.new.perform([non_existing_record_id]) }.not_to raise_error end end end diff --git a/spec/lib/gitlab/ci/status/composite_spec.rb b/spec/lib/gitlab/ci/status/composite_spec.rb index b9d4c39e0c2..8a226b382b0 100644 --- a/spec/lib/gitlab/ci/status/composite_spec.rb +++ b/spec/lib/gitlab/ci/status/composite_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' describe Gitlab::Ci::Status::Composite do let_it_be(:pipeline) { create(:ci_pipeline) } - before(:all) do + before_all do @statuses = HasStatus::STATUSES_ENUM.map do |status, idx| [status, create(:ci_build, pipeline: pipeline, status: status, importing: true)] end.to_h diff --git a/spec/lib/gitlab/import_export/group/tree_restorer_spec.rb b/spec/lib/gitlab/import_export/group/tree_restorer_spec.rb index 5584f1503f7..fc7e4737d13 100644 --- a/spec/lib/gitlab/import_export/group/tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/group/tree_restorer_spec.rb @@ -8,7 +8,7 @@ describe Gitlab::ImportExport::Group::TreeRestorer do let(:shared) { Gitlab::ImportExport::Shared.new(group) } describe 'restore group tree' do - before(:context) do + before_all do # Using an admin for import, so we can check assignment of existing members user = create(:admin, email: 'root@gitlabexample.com') create(:user, email: 'adriene.mcclure@gitlabexample.com') diff --git a/spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb b/spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb new file mode 100644 index 00000000000..076f454895f --- /dev/null +++ b/spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::ImportExport::JSON::StreamingSerializer do + let_it_be(:user) { create(:user) } + let_it_be(:release) { create(:release) } + let_it_be(:group) { create(:group) } + + let_it_be(:exportable) do + create(:project, + :public, + :repository, + :issues_disabled, + :wiki_enabled, + :builds_private, + description: 'description', + releases: [release], + group: group, + approvals_before_merge: 1) + end + let_it_be(:issue) do + create(:issue, + assignees: [user], + project: exportable) + end + + let(:exportable_path) { 'project' } + let(:json_writer) { instance_double('Gitlab::ImportExport::JSON::LegacyWriter') } + let(:hash) { { name: exportable.name, description: exportable.description }.stringify_keys } + let(:include) { [] } + + let(:relations_schema) do + { + only: [:name, :description], + include: include, + preload: { issues: nil } + } + end + + subject do + described_class.new(exportable, relations_schema, json_writer, exportable_path: exportable_path) + end + + describe '#execute' do + before do + allow(json_writer).to receive(:write_attributes).with(exportable_path, hash) + end + + it 'calls json_writer.write_attributes with proper params' do + subject.execute + end + + context 'with many relations' do + let(:include) do + [{ issues: { include: [] } }] + end + + it 'calls json_writer.write_relation_array with proper params' do + expect(json_writer).to receive(:write_relation_array).with(exportable_path, :issues, array_including(issue.to_json)) + + subject.execute + end + end + + context 'with single relation' do + let(:group_options) do + { include: [], only: [:name, :path, :description] } + end + let(:include) do + [{ group: group_options }] + end + + it 'calls json_writer.write_relation with proper params' do + expect(json_writer).to receive(:write_relation).with(exportable_path, :group, group.to_json(group_options)) + + subject.execute + end + end + + context 'with array relation' do + let(:project_member) { create(:project_member, user: user) } + let(:include) do + [{ project_members: { include: [] } }] + end + + before do + allow(exportable).to receive(:project_members).and_return([project_member]) + end + + it 'calls json_writer.write_relation_array with proper params' do + expect(json_writer).to receive(:write_relation_array).with(exportable_path, :project_members, array_including(project_member.to_json)) + + subject.execute + end + 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 229f45e9543..e7edbc7690d 100644 --- a/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project/tree_restorer_spec.rb @@ -8,7 +8,7 @@ describe Gitlab::ImportExport::Project::TreeRestorer do let(:shared) { project.import_export_shared } describe 'restore project tree' do - before(:context) do + before_all do # Using an admin for import, so we can check assignment of existing members @user = create(:admin) @existing_members = [ diff --git a/spec/lib/gitlab/object_hierarchy_spec.rb b/spec/lib/gitlab/object_hierarchy_spec.rb index b16eccbcb2c..b72aeb6d601 100644 --- a/spec/lib/gitlab/object_hierarchy_spec.rb +++ b/spec/lib/gitlab/object_hierarchy_spec.rb @@ -165,13 +165,13 @@ describe Gitlab::ObjectHierarchy do end it 'uses ancestors_base #initialize argument for ancestors' do - relation = described_class.new(Group.where(id: child1.id), Group.where(id: Group.maximum(:id).succ)).all_objects + relation = described_class.new(Group.where(id: child1.id), Group.where(id: non_existing_record_id)).all_objects expect(relation).to include(parent) end it 'uses descendants_base #initialize argument for descendants' do - relation = described_class.new(Group.where(id: Group.maximum(:id).succ), Group.where(id: child1.id)).all_objects + relation = described_class.new(Group.where(id: non_existing_record_id), Group.where(id: child1.id)).all_objects expect(relation).to include(child2) end diff --git a/spec/lib/gitlab/project_authorizations_spec.rb b/spec/lib/gitlab/project_authorizations_spec.rb index d1c441c8605..261e44bc5fa 100644 --- a/spec/lib/gitlab/project_authorizations_spec.rb +++ b/spec/lib/gitlab/project_authorizations_spec.rb @@ -234,7 +234,7 @@ describe Gitlab::ProjectAuthorizations do end context 'unrelated project owner' do - let(:common_id) { [Project.maximum(:id).to_i, Namespace.maximum(:id).to_i].max + 999 } + let(:common_id) { non_existing_record_id } let!(:group) { create(:group, id: common_id) } let!(:unrelated_project) { create(:project, id: common_id) } let(:user) { unrelated_project.owner } diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb index a7961190ff1..8ea591c6f74 100644 --- a/spec/lib/gitlab/reference_extractor_spec.rb +++ b/spec/lib/gitlab/reference_extractor_spec.rb @@ -130,7 +130,7 @@ describe Gitlab::ReferenceExtractor do @i0 = create(:issue, project: project) @i1 = create(:issue, project: project) - subject.analyze("#{@i0.to_reference}, #{@i1.to_reference}, and #{Issue.reference_prefix}999.") + subject.analyze("#{@i0.to_reference}, #{@i1.to_reference}, and #{Issue.reference_prefix}#{non_existing_record_iid}.") expect(subject.issues).to match_array([@i0, @i1]) end @@ -139,7 +139,7 @@ describe Gitlab::ReferenceExtractor do @m0 = create(:merge_request, source_project: project, target_project: project, source_branch: 'markdown') @m1 = create(:merge_request, source_project: project, target_project: project, source_branch: 'feature_conflict') - subject.analyze("!999, !#{@m1.iid}, and !#{@m0.iid}.") + subject.analyze("!#{non_existing_record_iid}, !#{@m1.iid}, and !#{@m0.iid}.") expect(subject.merge_requests).to match_array([@m1, @m0]) end @@ -149,7 +149,7 @@ describe Gitlab::ReferenceExtractor do @l1 = create(:label, title: 'two', project: project) @l2 = create(:label) - subject.analyze("~#{@l0.id}, ~999, ~#{@l2.id}, ~#{@l1.id}") + subject.analyze("~#{@l0.id}, ~#{non_existing_record_id}, ~#{@l2.id}, ~#{@l1.id}") expect(subject.labels).to match_array([@l0, @l1]) end @@ -159,7 +159,7 @@ describe Gitlab::ReferenceExtractor do @s1 = create(:project_snippet, project: project) @s2 = create(:project_snippet) - subject.analyze("$#{@s0.id}, $999, $#{@s2.id}, $#{@s1.id}") + subject.analyze("$#{@s0.id}, $#{non_existing_record_id}, $#{@s2.id}, $#{@s1.id}") expect(subject.snippets).to match_array([@s0, @s1]) end @@ -205,7 +205,7 @@ describe Gitlab::ReferenceExtractor do end it 'returns only Jira issues if the internal one does not exists' do - subject.analyze("JIRA-123 and FOOBAR-4567 and #999") + subject.analyze("JIRA-123 and FOOBAR-4567 and ##{non_existing_record_iid}") expect(subject.issues).to eq [ExternalIssue.new('JIRA-123', project), ExternalIssue.new('FOOBAR-4567', project)] end |