summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/api/helpers_spec.rb4
-rw-r--r--spec/lib/banzai/filter/reference_redactor_filter_spec.rb2
-rw-r--r--spec/lib/gitlab/application_context_spec.rb6
-rw-r--r--spec/lib/gitlab/background_migration/backfill_project_fullpath_in_repo_config_spec.rb2
-rw-r--r--spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb2
-rw-r--r--spec/lib/gitlab/background_migration/populate_user_highest_roles_table_spec.rb71
-rw-r--r--spec/lib/gitlab/background_migration/recalculate_project_authorizations_spec.rb4
-rw-r--r--spec/lib/gitlab/ci/status/composite_spec.rb2
-rw-r--r--spec/lib/gitlab/import_export/group/tree_restorer_spec.rb2
-rw-r--r--spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb98
-rw-r--r--spec/lib/gitlab/import_export/project/tree_restorer_spec.rb2
-rw-r--r--spec/lib/gitlab/object_hierarchy_spec.rb4
-rw-r--r--spec/lib/gitlab/project_authorizations_spec.rb2
-rw-r--r--spec/lib/gitlab/reference_extractor_spec.rb10
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