summaryrefslogtreecommitdiff
path: root/spec/models/namespace_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/namespace_spec.rb')
-rw-r--r--spec/models/namespace_spec.rb348
1 files changed, 174 insertions, 174 deletions
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index 475fbe56e4d..8cc303f5894 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -1,4 +1,4 @@
-require 'spec_helper'
+require "spec_helper"
describe Namespace do
include ProjectForksHelper
@@ -6,16 +6,16 @@ describe Namespace do
let!(:namespace) { create(:namespace) }
let(:gitlab_shell) { Gitlab::Shell.new }
- let(:repository_storage) { 'default' }
+ let(:repository_storage) { "default" }
- describe 'associations' do
+ describe "associations" do
it { is_expected.to have_many :projects }
it { is_expected.to have_many :project_statistics }
it { is_expected.to belong_to :parent }
it { is_expected.to have_many :children }
end
- describe 'validations' do
+ describe "validations" do
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_length_of(:name).is_at_most(255) }
it { is_expected.to validate_length_of(:description).is_at_most(255) }
@@ -23,25 +23,25 @@ describe Namespace do
it { is_expected.to validate_length_of(:path).is_at_most(255) }
it { is_expected.to validate_presence_of(:owner) }
- it 'does not allow too deep nesting' do
+ it "does not allow too deep nesting" do
ancestors = (1..21).to_a
nested = build(:namespace, parent: namespace)
allow(nested).to receive(:ancestors).and_return(ancestors)
expect(nested).not_to be_valid
- expect(nested.errors[:parent_id].first).to eq('has too deep level of nesting')
+ expect(nested.errors[:parent_id].first).to eq("has too deep level of nesting")
end
- describe 'reserved path validation' do
- context 'nested group' do
- let(:group) { build(:group, :nested, path: 'tree') }
+ describe "reserved path validation" do
+ context "nested group" do
+ let(:group) { build(:group, :nested, path: "tree") }
it { expect(group).not_to be_valid }
- it 'rejects nested paths' do
- parent = create(:group, :nested, path: 'environments')
- namespace = build(:group, path: 'folders', parent: parent)
+ it "rejects nested paths" do
+ parent = create(:group, :nested, path: "environments")
+ namespace = build(:group, path: "folders", parent: parent)
expect(namespace).not_to be_valid
end
@@ -53,8 +53,8 @@ describe Namespace do
it { expect(group).not_to be_valid }
end
- context 'top-level group' do
- let(:group) { build(:group, path: 'tree') }
+ context "top-level group" do
+ let(:group) { build(:group, path: "tree") }
it { expect(group).to be_valid }
end
@@ -67,23 +67,23 @@ describe Namespace do
it { is_expected.to respond_to(:has_parent?) }
end
- describe 'inclusions' do
+ describe "inclusions" do
it { is_expected.to include_module(Gitlab::VisibilityLevel) }
end
- describe '#visibility_level_field' do
+ describe "#visibility_level_field" do
it { expect(namespace.visibility_level_field).to eq(:visibility_level) }
end
- describe '#to_param' do
+ describe "#to_param" do
it { expect(namespace.to_param).to eq(namespace.full_path) }
end
- describe '#human_name' do
+ describe "#human_name" do
it { expect(namespace.human_name).to eq(namespace.owner_name) }
end
- describe '#first_project_with_container_registry_tags' do
+ describe "#first_project_with_container_registry_tags" do
let(:container_repository) { create(:container_repository) }
let!(:project) { create(:project, namespace: namespace, container_repositories: [container_repository]) }
@@ -91,68 +91,68 @@ describe Namespace do
stub_container_registry_config(enabled: true)
end
- it 'returns the project' do
- stub_container_registry_tags(repository: :any, tags: ['tag'])
+ it "returns the project" do
+ stub_container_registry_tags(repository: :any, tags: ["tag"])
expect(namespace.first_project_with_container_registry_tags).to eq(project)
end
- it 'returns no project' do
+ it "returns no project" do
stub_container_registry_tags(repository: :any, tags: nil)
expect(namespace.first_project_with_container_registry_tags).to be_nil
end
end
- describe '.search' do
+ describe ".search" do
let(:namespace) { create(:namespace) }
- it 'returns namespaces with a matching name' do
+ it "returns namespaces with a matching name" do
expect(described_class.search(namespace.name)).to eq([namespace])
end
- it 'returns namespaces with a partially matching name' do
+ it "returns namespaces with a partially matching name" do
expect(described_class.search(namespace.name[0..2])).to eq([namespace])
end
- it 'returns namespaces with a matching name regardless of the casing' do
+ it "returns namespaces with a matching name regardless of the casing" do
expect(described_class.search(namespace.name.upcase)).to eq([namespace])
end
- it 'returns namespaces with a matching path' do
+ it "returns namespaces with a matching path" do
expect(described_class.search(namespace.path)).to eq([namespace])
end
- it 'returns namespaces with a partially matching path' do
+ it "returns namespaces with a partially matching path" do
expect(described_class.search(namespace.path[0..2])).to eq([namespace])
end
- it 'returns namespaces with a matching path regardless of the casing' do
+ it "returns namespaces with a matching path regardless of the casing" do
expect(described_class.search(namespace.path.upcase)).to eq([namespace])
end
end
- describe '.with_statistics' do
+ describe ".with_statistics" do
let(:namespace) { create :namespace }
let(:project1) do
create(:project,
- namespace: namespace,
- statistics: build(:project_statistics,
- storage_size: 606,
- repository_size: 101,
- lfs_objects_size: 202,
- build_artifacts_size: 303))
+ namespace: namespace,
+ statistics: build(:project_statistics,
+ storage_size: 606,
+ repository_size: 101,
+ lfs_objects_size: 202,
+ build_artifacts_size: 303))
end
let(:project2) do
create(:project,
- namespace: namespace,
- statistics: build(:project_statistics,
- storage_size: 60,
- repository_size: 10,
- lfs_objects_size: 20,
- build_artifacts_size: 30))
+ namespace: namespace,
+ statistics: build(:project_statistics,
+ storage_size: 60,
+ repository_size: 10,
+ lfs_objects_size: 20,
+ build_artifacts_size: 30))
end
it "sums all project storage counters in the namespace" do
@@ -176,72 +176,72 @@ describe Namespace do
end
end
- describe '#ancestors_upto', :nested_groups do
+ describe "#ancestors_upto", :nested_groups do
let(:parent) { create(:group) }
let(:child) { create(:group, parent: parent) }
let(:child2) { create(:group, parent: child) }
- it 'returns all ancestors when no namespace is given' do
+ it "returns all ancestors when no namespace is given" do
expect(child2.ancestors_upto).to contain_exactly(child, parent)
end
- it 'includes ancestors upto but excluding the given ancestor' do
+ it "includes ancestors upto but excluding the given ancestor" do
expect(child2.ancestors_upto(parent)).to contain_exactly(child)
end
end
- describe '#move_dir', :request_store do
+ describe "#move_dir", :request_store do
shared_examples "namespace restrictions" do
context "when any project has container images" do
let(:container_repository) { create(:container_repository) }
before do
stub_container_registry_config(enabled: true)
- stub_container_registry_tags(repository: :any, tags: ['tag'])
+ stub_container_registry_tags(repository: :any, tags: ["tag"])
create(:project, namespace: namespace, container_repositories: [container_repository])
allow(namespace).to receive(:path_was).and_return(namespace.path)
- allow(namespace).to receive(:path).and_return('new_path')
+ allow(namespace).to receive(:path).and_return("new_path")
end
- it 'raises an error about not movable project' do
+ it "raises an error about not movable project" do
expect { namespace.move_dir }.to raise_error(Gitlab::UpdatePathError,
- /Namespace .* cannot be moved/)
+ /Namespace .* cannot be moved/)
end
end
end
- context 'legacy storage' do
+ context "legacy storage" do
let(:namespace) { create(:namespace) }
let!(:project) { create(:project_empty_repo, :legacy_storage, namespace: namespace) }
- it_behaves_like 'namespace restrictions'
+ it_behaves_like "namespace restrictions"
it "raises error when directory exists" do
expect { namespace.move_dir }.to raise_error("namespace directory cannot be moved")
end
it "moves dir if path changed" do
- namespace.update(path: namespace.full_path + '_new')
+ namespace.update(path: namespace.full_path + "_new")
expect(gitlab_shell.exists?(project.repository_storage, "#{namespace.path}/#{project.path}.git")).to be_truthy
end
- context 'when #write_projects_repository_config raises an error' do
- context 'in test environment' do
- it 'raises an exception' do
- expect(namespace).to receive(:write_projects_repository_config).and_raise('foo')
+ context "when #write_projects_repository_config raises an error" do
+ context "in test environment" do
+ it "raises an exception" do
+ expect(namespace).to receive(:write_projects_repository_config).and_raise("foo")
- expect do
- namespace.update(path: namespace.full_path + '_new')
- end.to raise_error('foo')
+ expect {
+ namespace.update(path: namespace.full_path + "_new")
+ }.to raise_error("foo")
end
end
- context 'in production environment' do
- it 'does not cancel later callbacks' do
- expect(namespace).to receive(:write_projects_repository_config).and_raise('foo')
+ context "in production environment" do
+ it "does not cancel later callbacks" do
+ expect(namespace).to receive(:write_projects_repository_config).and_raise("foo")
expect(namespace).to receive(:move_dir).and_wrap_original do |m, *args|
move_dir_result = m.call(*args)
@@ -251,23 +251,23 @@ describe Namespace do
end
expect(Gitlab::Sentry).to receive(:should_raise_for_dev?).and_return(false) # like prod
- namespace.update(path: namespace.full_path + '_new')
+ namespace.update(path: namespace.full_path + "_new")
end
end
end
- context 'with subgroups', :nested_groups do
- let(:parent) { create(:group, name: 'parent', path: 'parent') }
- let(:new_parent) { create(:group, name: 'new_parent', path: 'new_parent') }
- let(:child) { create(:group, name: 'child', path: 'child', parent: parent) }
- let!(:project) { create(:project_empty_repo, :legacy_storage, path: 'the-project', namespace: child, skip_disk_validation: true) }
+ context "with subgroups", :nested_groups do
+ let(:parent) { create(:group, name: "parent", path: "parent") }
+ let(:new_parent) { create(:group, name: "new_parent", path: "new_parent") }
+ let(:child) { create(:group, name: "child", path: "child", parent: parent) }
+ let!(:project) { create(:project_empty_repo, :legacy_storage, path: "the-project", namespace: child, skip_disk_validation: true) }
let(:uploads_dir) { FileUploader.root }
let(:pages_dir) { File.join(TestEnv.pages_path) }
def expect_project_directories_at(namespace_path)
- expected_repository_path = File.join(TestEnv.repos_path, namespace_path, 'the-project.git')
- expected_upload_path = File.join(uploads_dir, namespace_path, 'the-project')
- expected_pages_path = File.join(pages_dir, namespace_path, 'the-project')
+ expected_repository_path = File.join(TestEnv.repos_path, namespace_path, "the-project.git")
+ expected_upload_path = File.join(uploads_dir, namespace_path, "the-project")
+ expected_pages_path = File.join(pages_dir, namespace_path, "the-project")
expect(File.directory?(expected_repository_path)).to be_truthy
expect(File.directory?(expected_upload_path)).to be_truthy
@@ -280,84 +280,84 @@ describe Namespace do
FileUtils.mkdir_p(File.join(pages_dir, project.full_path))
end
- context 'renaming child' do
- it 'correctly moves the repository, uploads and pages' do
- child.update!(path: 'renamed')
+ context "renaming child" do
+ it "correctly moves the repository, uploads and pages" do
+ child.update!(path: "renamed")
- expect_project_directories_at('parent/renamed')
+ expect_project_directories_at("parent/renamed")
end
end
- context 'renaming parent' do
- it 'correctly moves the repository, uploads and pages' do
- parent.update!(path: 'renamed')
+ context "renaming parent" do
+ it "correctly moves the repository, uploads and pages" do
+ parent.update!(path: "renamed")
- expect_project_directories_at('renamed/child')
+ expect_project_directories_at("renamed/child")
end
end
- context 'moving from one parent to another' do
- it 'correctly moves the repository, uploads and pages' do
+ context "moving from one parent to another" do
+ it "correctly moves the repository, uploads and pages" do
child.update!(parent: new_parent)
- expect_project_directories_at('new_parent/child')
+ expect_project_directories_at("new_parent/child")
end
end
- context 'moving from having a parent to root' do
- it 'correctly moves the repository, uploads and pages' do
+ context "moving from having a parent to root" do
+ it "correctly moves the repository, uploads and pages" do
child.update!(parent: nil)
- expect_project_directories_at('child')
+ expect_project_directories_at("child")
end
end
- context 'moving from root to having a parent' do
- it 'correctly moves the repository, uploads and pages' do
+ context "moving from root to having a parent" do
+ it "correctly moves the repository, uploads and pages" do
parent.update!(parent: new_parent)
- expect_project_directories_at('new_parent/parent/child')
+ expect_project_directories_at("new_parent/parent/child")
end
end
end
end
- context 'hashed storage' do
+ context "hashed storage" do
let(:namespace) { create(:namespace) }
let!(:project) { create(:project_empty_repo, namespace: namespace) }
- it_behaves_like 'namespace restrictions'
+ it_behaves_like "namespace restrictions"
it "repository directory remains unchanged if path changed" do
before_disk_path = project.disk_path
- namespace.update(path: namespace.full_path + '_new')
+ namespace.update(path: namespace.full_path + "_new")
expect(before_disk_path).to eq(project.disk_path)
expect(gitlab_shell.exists?(project.repository_storage, "#{project.disk_path}.git")).to be_truthy
end
end
- context 'for each project inside the namespace' do
- let!(:parent) { create(:group, name: 'mygroup', path: 'mygroup') }
- let!(:subgroup) { create(:group, name: 'mysubgroup', path: 'mysubgroup', parent: parent) }
- let!(:project_in_parent_group) { create(:project, :legacy_storage, :repository, namespace: parent, name: 'foo1') }
- let!(:hashed_project_in_subgroup) { create(:project, :repository, namespace: subgroup, name: 'foo2') }
- let!(:legacy_project_in_subgroup) { create(:project, :legacy_storage, :repository, namespace: subgroup, name: 'foo3') }
+ context "for each project inside the namespace" do
+ let!(:parent) { create(:group, name: "mygroup", path: "mygroup") }
+ let!(:subgroup) { create(:group, name: "mysubgroup", path: "mysubgroup", parent: parent) }
+ let!(:project_in_parent_group) { create(:project, :legacy_storage, :repository, namespace: parent, name: "foo1") }
+ let!(:hashed_project_in_subgroup) { create(:project, :repository, namespace: subgroup, name: "foo2") }
+ let!(:legacy_project_in_subgroup) { create(:project, :legacy_storage, :repository, namespace: subgroup, name: "foo3") }
- it 'updates project full path in .git/config' do
- parent.update(path: 'mygroup_new')
+ it "updates project full path in .git/config" do
+ parent.update(path: "mygroup_new")
- expect(project_rugged(project_in_parent_group).config['gitlab.fullpath']).to eq "mygroup_new/#{project_in_parent_group.path}"
- expect(project_rugged(hashed_project_in_subgroup).config['gitlab.fullpath']).to eq "mygroup_new/mysubgroup/#{hashed_project_in_subgroup.path}"
- expect(project_rugged(legacy_project_in_subgroup).config['gitlab.fullpath']).to eq "mygroup_new/mysubgroup/#{legacy_project_in_subgroup.path}"
+ expect(project_rugged(project_in_parent_group).config["gitlab.fullpath"]).to eq "mygroup_new/#{project_in_parent_group.path}"
+ expect(project_rugged(hashed_project_in_subgroup).config["gitlab.fullpath"]).to eq "mygroup_new/mysubgroup/#{hashed_project_in_subgroup.path}"
+ expect(project_rugged(legacy_project_in_subgroup).config["gitlab.fullpath"]).to eq "mygroup_new/mysubgroup/#{legacy_project_in_subgroup.path}"
end
- it 'updates the project storage location' do
+ it "updates the project storage location" do
repository_project_in_parent_group = create(:project_repository, project: project_in_parent_group)
repository_hashed_project_in_subgroup = create(:project_repository, project: hashed_project_in_subgroup)
repository_legacy_project_in_subgroup = create(:project_repository, project: legacy_project_in_subgroup)
- parent.update(path: 'mygroup_moved')
+ parent.update(path: "mygroup_moved")
expect(repository_project_in_parent_group.reload.disk_path).to eq "mygroup_moved/#{project_in_parent_group.path}"
expect(repository_hashed_project_in_subgroup.reload.disk_path).to eq hashed_project_in_subgroup.disk_path
@@ -374,7 +374,7 @@ describe Namespace do
end
end
- describe '#rm_dir', 'callback' do
+ describe "#rm_dir", "callback" do
let(:repository_storage_path) do
Gitlab::GitalyClient::StorageSettings.allow_disk_access do
Gitlab.config.repositories.storages.default.legacy_disk_path
@@ -384,10 +384,10 @@ describe Namespace do
let(:deleted_path) { namespace.full_path.gsub(namespace.path, "#{namespace.full_path}+#{namespace.id}+deleted") }
let(:deleted_path_in_dir) { File.join(repository_storage_path, deleted_path) }
- context 'legacy storage' do
+ context "legacy storage" do
let!(:project) { create(:project_empty_repo, :legacy_storage, namespace: namespace) }
- it 'renames its dirs when deleted' do
+ it "renames its dirs when deleted" do
allow(GitlabShellWorker).to receive(:perform_in)
namespace.destroy
@@ -395,21 +395,21 @@ describe Namespace do
expect(File.exist?(deleted_path_in_dir)).to be(true)
end
- it 'schedules the namespace for deletion' do
+ it "schedules the namespace for deletion" do
expect(GitlabShellWorker).to receive(:perform_in).with(5.minutes, :rm_namespace, repository_storage, deleted_path)
namespace.destroy
end
- context 'in sub-groups' do
- let(:parent) { create(:group, path: 'parent') }
- let(:child) { create(:group, parent: parent, path: 'child') }
+ context "in sub-groups" do
+ let(:parent) { create(:group, path: "parent") }
+ let(:child) { create(:group, parent: parent, path: "child") }
let!(:project) { create(:project_empty_repo, :legacy_storage, namespace: child) }
- let(:path_in_dir) { File.join(repository_storage_path, 'parent', 'child') }
- let(:deleted_path) { File.join('parent', "child+#{child.id}+deleted") }
+ let(:path_in_dir) { File.join(repository_storage_path, "parent", "child") }
+ let(:deleted_path) { File.join("parent", "child+#{child.id}+deleted") }
let(:deleted_path_in_dir) { File.join(repository_storage_path, deleted_path) }
- it 'renames its dirs when deleted' do
+ it "renames its dirs when deleted" do
allow(GitlabShellWorker).to receive(:perform_in)
child.destroy
@@ -417,7 +417,7 @@ describe Namespace do
expect(File.exist?(deleted_path_in_dir)).to be(true)
end
- it 'schedules the namespace for deletion' do
+ it "schedules the namespace for deletion" do
expect(GitlabShellWorker).to receive(:perform_in).with(5.minutes, :rm_namespace, repository_storage, deleted_path)
child.destroy
@@ -425,10 +425,10 @@ describe Namespace do
end
end
- context 'hashed storage' do
+ context "hashed storage" do
let!(:project) { create(:project_empty_repo, namespace: namespace) }
- it 'has no repositories base directories to remove' do
+ it "has no repositories base directories to remove" do
allow(GitlabShellWorker).to receive(:perform_in)
expect(File.exist?(path_in_dir)).to be(false)
@@ -440,14 +440,14 @@ describe Namespace do
end
end
- describe '.find_by_path_or_name' do
+ describe ".find_by_path_or_name" do
before do
- @namespace = create(:namespace, name: 'WoW', path: 'woW')
+ @namespace = create(:namespace, name: "WoW", path: "woW")
end
- it { expect(described_class.find_by_path_or_name('wow')).to eq(@namespace) }
- it { expect(described_class.find_by_path_or_name('WOW')).to eq(@namespace) }
- it { expect(described_class.find_by_path_or_name('unknown')).to eq(nil) }
+ it { expect(described_class.find_by_path_or_name("wow")).to eq(@namespace) }
+ it { expect(described_class.find_by_path_or_name("WOW")).to eq(@namespace) }
+ it { expect(described_class.find_by_path_or_name("unknown")).to eq(nil) }
end
describe ".clean_path" do
@@ -460,28 +460,28 @@ describe Namespace do
end
end
- describe '#self_and_hierarchy', :nested_groups do
- let!(:group) { create(:group, path: 'git_lab') }
+ describe "#self_and_hierarchy", :nested_groups do
+ let!(:group) { create(:group, path: "git_lab") }
let!(:nested_group) { create(:group, parent: group) }
let!(:deep_nested_group) { create(:group, parent: nested_group) }
let!(:very_deep_nested_group) { create(:group, parent: deep_nested_group) }
- let!(:another_group) { create(:group, path: 'gitllab') }
- let!(:another_group_nested) { create(:group, path: 'foo', parent: another_group) }
+ let!(:another_group) { create(:group, path: "gitllab") }
+ let!(:another_group_nested) { create(:group, path: "foo", parent: another_group) }
- it 'returns the correct tree' do
+ it "returns the correct tree" do
expect(group.self_and_hierarchy).to contain_exactly(group, nested_group, deep_nested_group, very_deep_nested_group)
expect(nested_group.self_and_hierarchy).to contain_exactly(group, nested_group, deep_nested_group, very_deep_nested_group)
expect(very_deep_nested_group.self_and_hierarchy).to contain_exactly(group, nested_group, deep_nested_group, very_deep_nested_group)
end
end
- describe '#ancestors', :nested_groups do
+ describe "#ancestors", :nested_groups do
let(:group) { create(:group) }
let(:nested_group) { create(:group, parent: group) }
let(:deep_nested_group) { create(:group, parent: nested_group) }
let(:very_deep_nested_group) { create(:group, parent: deep_nested_group) }
- it 'returns the correct ancestors' do
+ it "returns the correct ancestors" do
expect(very_deep_nested_group.ancestors).to include(group, nested_group, deep_nested_group)
expect(deep_nested_group.ancestors).to include(group, nested_group)
expect(nested_group.ancestors).to include(group)
@@ -489,13 +489,13 @@ describe Namespace do
end
end
- describe '#self_and_ancestors', :nested_groups do
+ describe "#self_and_ancestors", :nested_groups do
let(:group) { create(:group) }
let(:nested_group) { create(:group, parent: group) }
let(:deep_nested_group) { create(:group, parent: nested_group) }
let(:very_deep_nested_group) { create(:group, parent: deep_nested_group) }
- it 'returns the correct ancestors' do
+ it "returns the correct ancestors" do
expect(very_deep_nested_group.self_and_ancestors).to contain_exactly(group, nested_group, deep_nested_group, very_deep_nested_group)
expect(deep_nested_group.self_and_ancestors).to contain_exactly(group, nested_group, deep_nested_group)
expect(nested_group.self_and_ancestors).to contain_exactly(group, nested_group)
@@ -503,15 +503,15 @@ describe Namespace do
end
end
- describe '#descendants', :nested_groups do
- let!(:group) { create(:group, path: 'git_lab') }
+ describe "#descendants", :nested_groups do
+ let!(:group) { create(:group, path: "git_lab") }
let!(:nested_group) { create(:group, parent: group) }
let!(:deep_nested_group) { create(:group, parent: nested_group) }
let!(:very_deep_nested_group) { create(:group, parent: deep_nested_group) }
- let!(:another_group) { create(:group, path: 'gitllab') }
- let!(:another_group_nested) { create(:group, path: 'foo', parent: another_group) }
+ let!(:another_group) { create(:group, path: "gitllab") }
+ let!(:another_group_nested) { create(:group, path: "foo", parent: another_group) }
- it 'returns the correct descendants' do
+ it "returns the correct descendants" do
expect(very_deep_nested_group.descendants.to_a).to eq([])
expect(deep_nested_group.descendants.to_a).to include(very_deep_nested_group)
expect(nested_group.descendants.to_a).to include(deep_nested_group, very_deep_nested_group)
@@ -519,15 +519,15 @@ describe Namespace do
end
end
- describe '#self_and_descendants', :nested_groups do
- let!(:group) { create(:group, path: 'git_lab') }
+ describe "#self_and_descendants", :nested_groups do
+ let!(:group) { create(:group, path: "git_lab") }
let!(:nested_group) { create(:group, parent: group) }
let!(:deep_nested_group) { create(:group, parent: nested_group) }
let!(:very_deep_nested_group) { create(:group, parent: deep_nested_group) }
- let!(:another_group) { create(:group, path: 'gitllab') }
- let!(:another_group_nested) { create(:group, path: 'foo', parent: another_group) }
+ let!(:another_group) { create(:group, path: "gitllab") }
+ let!(:another_group_nested) { create(:group, path: "foo", parent: another_group) }
- it 'returns the correct descendants' do
+ it "returns the correct descendants" do
expect(very_deep_nested_group.self_and_descendants).to contain_exactly(very_deep_nested_group)
expect(deep_nested_group.self_and_descendants).to contain_exactly(deep_nested_group, very_deep_nested_group)
expect(nested_group.self_and_descendants).to contain_exactly(nested_group, deep_nested_group, very_deep_nested_group)
@@ -535,7 +535,7 @@ describe Namespace do
end
end
- describe '#users_with_descendants', :nested_groups do
+ describe "#users_with_descendants", :nested_groups do
let(:user_a) { create(:user) }
let(:user_b) { create(:user) }
@@ -543,7 +543,7 @@ describe Namespace do
let(:nested_group) { create(:group, parent: group) }
let(:deep_nested_group) { create(:group, parent: nested_group) }
- it 'returns member users on every nest level without duplication' do
+ it "returns member users on every nest level without duplication" do
group.add_developer(user_a)
nested_group.add_developer(user_b)
deep_nested_group.add_maintainer(user_a)
@@ -554,14 +554,14 @@ describe Namespace do
end
end
- describe '#user_ids_for_project_authorizations' do
- it 'returns the user IDs for which to refresh authorizations' do
+ describe "#user_ids_for_project_authorizations" do
+ it "returns the user IDs for which to refresh authorizations" do
expect(namespace.user_ids_for_project_authorizations)
.to eq([namespace.owner_id])
end
end
- describe '#all_projects' do
+ describe "#all_projects" do
let(:group) { create(:group) }
let(:child) { create(:group, parent: group) }
let!(:project1) { create(:project_empty_repo, namespace: group) }
@@ -571,7 +571,7 @@ describe Namespace do
it { expect(child.all_projects.to_a).to match_array([project2]) }
end
- describe '#all_pipelines' do
+ describe "#all_pipelines" do
let(:group) { create(:group) }
let(:child) { create(:group, parent: group) }
let!(:project1) { create(:project_empty_repo, namespace: group) }
@@ -582,9 +582,9 @@ describe Namespace do
it { expect(group.all_pipelines.to_a).to match_array([pipeline1, pipeline2]) }
end
- describe '#share_with_group_lock with subgroups', :nested_groups do
- context 'when creating a subgroup' do
- let(:subgroup) { create(:group, parent: root_group )}
+ describe "#share_with_group_lock with subgroups", :nested_groups do
+ context "when creating a subgroup" do
+ let(:subgroup) { create(:group, parent: root_group)}
context 'under a parent with "Share with group lock" enabled' do
let(:root_group) { create(:group, share_with_group_lock: true) }
@@ -605,7 +605,7 @@ describe Namespace do
context 'when enabling the parent group "Share with group lock"' do
let(:root_group) { create(:group) }
- let!(:subgroup) { create(:group, parent: root_group )}
+ let!(:subgroup) { create(:group, parent: root_group)}
it 'the subgroup "Share with group lock" becomes enabled' do
root_group.update!(share_with_group_lock: true)
@@ -618,7 +618,7 @@ describe Namespace do
let(:root_group) { create(:group, share_with_group_lock: true) }
context 'and the subgroup "Share with group lock" is enabled' do
- let(:subgroup) { create(:group, parent: root_group, share_with_group_lock: true )}
+ let(:subgroup) { create(:group, parent: root_group, share_with_group_lock: true)}
it 'the subgroup "Share with group lock" does not change' do
root_group.update!(share_with_group_lock: false)
@@ -628,7 +628,7 @@ describe Namespace do
end
context 'but the subgroup "Share with group lock" is disabled' do
- let(:subgroup) { create(:group, parent: root_group )}
+ let(:subgroup) { create(:group, parent: root_group)}
it 'the subgroup "Share with group lock" does not change' do
root_group.update!(share_with_group_lock: false)
@@ -638,12 +638,12 @@ describe Namespace do
end
end
- context 'when a group is transferred into a root group' do
+ context "when a group is transferred into a root group" do
context 'when the root group "Share with group lock" is enabled' do
let(:root_group) { create(:group, share_with_group_lock: true) }
context 'when the subgroup "Share with group lock" is enabled' do
- let(:subgroup) { create(:group, share_with_group_lock: true )}
+ let(:subgroup) { create(:group, share_with_group_lock: true)}
it 'the subgroup "Share with group lock" does not change' do
subgroup.parent = root_group
@@ -669,7 +669,7 @@ describe Namespace do
let(:root_group) { create(:group) }
context 'when the subgroup "Share with group lock" is enabled' do
- let(:subgroup) { create(:group, share_with_group_lock: true )}
+ let(:subgroup) { create(:group, share_with_group_lock: true)}
it 'the subgroup "Share with group lock" does not change' do
subgroup.parent = root_group
@@ -693,7 +693,7 @@ describe Namespace do
end
end
- describe '#find_fork_of?' do
+ describe "#find_fork_of?" do
let(:project) { create(:project, :public) }
let!(:forked_project) { fork_project(project, namespace.owner, namespace: namespace) }
@@ -702,19 +702,19 @@ describe Namespace do
project.reload
end
- it 'knows if there is a direct fork in the namespace' do
+ it "knows if there is a direct fork in the namespace" do
expect(namespace.find_fork_of(project)).to eq(forked_project)
end
- it 'knows when there is as fork-of-fork in the namespace' do
+ it "knows when there is as fork-of-fork in the namespace" do
other_namespace = create(:namespace)
other_fork = fork_project(forked_project, other_namespace.owner, namespace: other_namespace)
expect(other_namespace.find_fork_of(project)).to eq(other_fork)
end
- context 'with request store enabled', :request_store do
- it 'only queries once' do
+ context "with request store enabled", :request_store do
+ it "only queries once" do
expect(project.fork_network).to receive(:find_forks_in).once.and_call_original
2.times { namespace.find_fork_of(project) }
@@ -722,8 +722,8 @@ describe Namespace do
end
end
- describe '#root_ancestor' do
- it 'returns the top most ancestor', :nested_groups do
+ describe "#root_ancestor" do
+ it "returns the top most ancestor", :nested_groups do
root_group = create(:group)
nested_group = create(:group, parent: root_group)
deep_nested_group = create(:group, parent: nested_group)
@@ -736,27 +736,27 @@ describe Namespace do
end
end
- describe '#full_path_was' do
- context 'when the group has no parent' do
- it 'should return the path was' do
+ describe "#full_path_was" do
+ context "when the group has no parent" do
+ it "should return the path was" do
group = create(:group, parent: nil)
expect(group.full_path_was).to eq(group.path_was)
end
end
- context 'when a parent is assigned to a group with no previous parent' do
- it 'should return the path was' do
+ context "when a parent is assigned to a group with no previous parent" do
+ it "should return the path was" do
group = create(:group, parent: nil)
parent = create(:group)
group.parent = parent
- expect(group.full_path_was).to eq("#{group.path_was}")
+ expect(group.full_path_was).to eq(group.path_was.to_s)
end
end
- context 'when a parent is removed from the group' do
- it 'should return the parent full path' do
+ context "when a parent is removed from the group" do
+ it "should return the parent full path" do
parent = create(:group)
group = create(:group, parent: parent)
group.parent = nil
@@ -765,8 +765,8 @@ describe Namespace do
end
end
- context 'when changing parents' do
- it 'should return the previous parent full path' do
+ context "when changing parents" do
+ it "should return the previous parent full path" do
parent = create(:group)
group = create(:group, parent: parent)
new_parent = create(:group)