diff options
Diffstat (limited to 'spec/models/group_spec.rb')
-rw-r--r-- | spec/models/group_spec.rb | 319 |
1 files changed, 160 insertions, 159 deletions
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 9dc32a815d8..e1346ab2a57 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -1,9 +1,9 @@ -require 'spec_helper' +require "spec_helper" describe Group do let!(:group) { create(:group, :access_requestable) } - describe 'associations' do + describe "associations" do it { is_expected.to have_many :projects } it { is_expected.to have_many(:group_members).dependent(:destroy) } it { is_expected.to have_many(:users).through(:group_members) } @@ -13,16 +13,16 @@ describe Group do it { is_expected.to have_many(:project_group_links).dependent(:destroy) } it { is_expected.to have_many(:shared_projects).through(:project_group_links) } it { is_expected.to have_many(:notification_settings).dependent(:destroy) } - it { is_expected.to have_many(:labels).class_name('GroupLabel') } - it { is_expected.to have_many(:variables).class_name('Ci::GroupVariable') } + it { is_expected.to have_many(:labels).class_name("GroupLabel") } + it { is_expected.to have_many(:variables).class_name("Ci::GroupVariable") } it { is_expected.to have_many(:uploads) } it { is_expected.to have_one(:chat_team) } - it { is_expected.to have_many(:custom_attributes).class_name('GroupCustomAttribute') } - it { is_expected.to have_many(:badges).class_name('GroupBadge') } - it { is_expected.to have_many(:cluster_groups).class_name('Clusters::Group') } - it { is_expected.to have_many(:clusters).class_name('Clusters::Cluster') } + it { is_expected.to have_many(:custom_attributes).class_name("GroupCustomAttribute") } + it { is_expected.to have_many(:badges).class_name("GroupBadge") } + it { is_expected.to have_many(:cluster_groups).class_name("Clusters::Group") } + it { is_expected.to have_many(:clusters).class_name("Clusters::Cluster") } - describe '#members & #requesters' do + describe "#members & #requesters" do let(:requester) { create(:user) } let(:developer) { create(:user) } before do @@ -30,46 +30,46 @@ describe Group do group.add_developer(developer) end - it_behaves_like 'members and requesters associations' do + it_behaves_like "members and requesters associations" do let(:namespace) { group } end end end - describe 'modules' do + describe "modules" do subject { described_class } it { is_expected.to include_module(Referable) } end - describe 'validations' do + describe "validations" do it { is_expected.to validate_presence_of :name } it { is_expected.to validate_presence_of :path } it { is_expected.not_to validate_presence_of :owner } it { is_expected.to validate_presence_of :two_factor_grace_period } it { is_expected.to validate_numericality_of(:two_factor_grace_period).is_greater_than_or_equal_to(0) } - describe 'path validation' do - it 'rejects paths reserved on the root namespace when the group has no parent' do - group = build(:group, path: 'api') + describe "path validation" do + it "rejects paths reserved on the root namespace when the group has no parent" do + group = build(:group, path: "api") expect(group).not_to be_valid end - it 'allows root paths when the group has a parent' do - group = build(:group, path: 'api', parent: create(:group)) + it "allows root paths when the group has a parent" do + group = build(:group, path: "api", parent: create(:group)) expect(group).to be_valid end - it 'rejects any wildcard paths when not a top level group' do - group = build(:group, path: 'tree', parent: create(:group)) + it "rejects any wildcard paths when not a top level group" do + group = build(:group, path: "tree", parent: create(:group)) expect(group).not_to be_valid end end - describe '#notification_settings', :nested_groups do + describe "#notification_settings", :nested_groups do let(:user) { create(:user) } let(:group) { create(:group) } let(:sub_group) { create(:group, parent_id: group.id) } @@ -79,44 +79,44 @@ describe Group do sub_group.add_maintainer(user) end - it 'also gets notification settings from parent groups' do + it "also gets notification settings from parent groups" do expect(sub_group.notification_settings.size).to eq(2) expect(sub_group.notification_settings).to include(group.notification_settings.first) end - context 'when sub group is deleted' do - it 'does not delete parent notification settings' do - expect do + context "when sub group is deleted" do + it "does not delete parent notification settings" do + expect { sub_group.destroy - end.to change { NotificationSetting.count }.by(-1) + }.to change { NotificationSetting.count }.by(-1) end end end - describe '#visibility_level_allowed_by_parent' do + describe "#visibility_level_allowed_by_parent" do let(:parent) { create(:group, :internal) } let(:sub_group) { build(:group, parent_id: parent.id) } - context 'without a parent' do - it 'is valid' do + context "without a parent" do + it "is valid" do sub_group.parent_id = nil expect(sub_group).to be_valid end end - context 'with a parent' do - context 'when visibility of sub group is greater than the parent' do - it 'is invalid' do + context "with a parent" do + context "when visibility of sub group is greater than the parent" do + it "is invalid" do sub_group.visibility_level = Gitlab::VisibilityLevel::PUBLIC expect(sub_group).to be_invalid end end - context 'when visibility of sub group is lower or equal to the parent' do + context "when visibility of sub group is lower or equal to the parent" do [Gitlab::VisibilityLevel::INTERNAL, Gitlab::VisibilityLevel::PRIVATE].each do |level| - it 'is valid' do + it "is valid" do sub_group.visibility_level = level expect(sub_group).to be_valid @@ -126,21 +126,21 @@ describe Group do end end - describe '#visibility_level_allowed_by_projects' do + describe "#visibility_level_allowed_by_projects" do let!(:internal_group) { create(:group, :internal) } let!(:internal_project) { create(:project, :internal, group: internal_group) } - context 'when group has a lower visibility' do - it 'is invalid' do + context "when group has a lower visibility" do + it "is invalid" do internal_group.visibility_level = Gitlab::VisibilityLevel::PRIVATE expect(internal_group).to be_invalid - expect(internal_group.errors[:visibility_level]).to include('private is not allowed since this group contains projects with higher visibility.') + expect(internal_group.errors[:visibility_level]).to include("private is not allowed since this group contains projects with higher visibility.") end end - context 'when group has a higher visibility' do - it 'is valid' do + context "when group has a higher visibility" do + it "is valid" do internal_group.visibility_level = Gitlab::VisibilityLevel::PUBLIC expect(internal_group).to be_valid @@ -148,21 +148,21 @@ describe Group do end end - describe '#visibility_level_allowed_by_sub_groups' do + describe "#visibility_level_allowed_by_sub_groups" do let!(:internal_group) { create(:group, :internal) } let!(:internal_sub_group) { create(:group, :internal, parent: internal_group) } - context 'when parent group has a lower visibility' do - it 'is invalid' do + context "when parent group has a lower visibility" do + it "is invalid" do internal_group.visibility_level = Gitlab::VisibilityLevel::PRIVATE expect(internal_group).to be_invalid - expect(internal_group.errors[:visibility_level]).to include('private is not allowed since there are sub-groups with higher visibility.') + expect(internal_group.errors[:visibility_level]).to include("private is not allowed since there are sub-groups with higher visibility.") end end - context 'when parent group has a higher visibility' do - it 'is valid' do + context "when parent group has a higher visibility" do + it "is valid" do internal_group.visibility_level = Gitlab::VisibilityLevel::PUBLIC expect(internal_group).to be_valid @@ -171,26 +171,26 @@ describe Group do end end - describe '.public_or_visible_to_user' do + describe ".public_or_visible_to_user" do let!(:private_group) { create(:group, :private) } let!(:internal_group) { create(:group, :internal) } subject { described_class.public_or_visible_to_user(user) } - context 'when user is nil' do + context "when user is nil" do let!(:user) { nil } it { is_expected.to match_array([group]) } end - context 'when user' do + context "when user" do let!(:user) { create(:user) } - context 'when user does not have access to any private group' do + context "when user does not have access to any private group" do it { is_expected.to match_array([internal_group, group]) } end - context 'when user is a member of private group' do + context "when user is a member of private group" do before do private_group.add_user(user, Gitlab::Access::DEVELOPER) end @@ -198,7 +198,7 @@ describe Group do it { is_expected.to match_array([private_group, internal_group, group]) } end - context 'when user is a member of private subgroup', :postgresql do + context "when user is a member of private subgroup", :postgresql do let!(:private_subgroup) { create(:group, :private, parent: private_group) } before do @@ -210,44 +210,44 @@ describe Group do end end - describe 'scopes' do + describe "scopes" do let!(:private_group) { create(:group, :private) } let!(:internal_group) { create(:group, :internal) } - describe 'public_only' do + describe "public_only" do subject { described_class.public_only.to_a } it { is_expected.to eq([group]) } end - describe 'public_and_internal_only' do + describe "public_and_internal_only" do subject { described_class.public_and_internal_only.to_a } it { is_expected.to match_array([group, internal_group]) } end - describe 'non_public_only' do + describe "non_public_only" do subject { described_class.non_public_only.to_a } it { is_expected.to match_array([private_group, internal_group]) } end end - describe '#to_reference' do - it 'returns a String reference to the object' do + describe "#to_reference" do + it "returns a String reference to the object" do expect(group.to_reference).to eq "@#{group.name}" end end - describe '#users' do + describe "#users" do it { expect(group.users).to eq(group.owners) } end - describe '#human_name' do + describe "#human_name" do it { expect(group.human_name).to eq(group.name) } end - describe '#add_user' do + describe "#add_user" do let(:user) { create(:user) } before do @@ -257,7 +257,7 @@ describe Group do it { expect(group.group_members.maintainers.map(&:user)).to include(user) } end - describe '#add_users' do + describe "#add_users" do let(:user) { create(:user) } before do @@ -272,7 +272,7 @@ describe Group do end end - describe '#avatar_type' do + describe "#avatar_type" do let(:user) { create(:user) } before do @@ -280,59 +280,59 @@ describe Group do end it "is true if avatar is image" do - group.update_attribute(:avatar, 'uploads/avatar.png') + group.update_attribute(:avatar, "uploads/avatar.png") expect(group.avatar_type).to be_truthy end it "is false if avatar is html page" do - group.update_attribute(:avatar, 'uploads/avatar.html') + group.update_attribute(:avatar, "uploads/avatar.html") expect(group.avatar_type).to eq(["file format is not supported. Please try one of the following supported formats: png, jpg, jpeg, gif, bmp, tiff, ico"]) end end - describe '#avatar_url' do + describe "#avatar_url" do let!(:group) { create(:group, :access_requestable, :with_avatar) } let(:user) { create(:user) } - context 'when avatar file is uploaded' do + context "when avatar file is uploaded" do before do group.add_maintainer(user) end - it 'shows correct avatar url' do + it "shows correct avatar url" do expect(group.avatar_url).to eq(group.avatar.url) expect(group.avatar_url(only_path: false)).to eq([Gitlab.config.gitlab.url, group.avatar.url].join) end end end - describe '.search' do - it 'returns groups with a matching name' do + describe ".search" do + it "returns groups with a matching name" do expect(described_class.search(group.name)).to eq([group]) end - it 'returns groups with a partially matching name' do + it "returns groups with a partially matching name" do expect(described_class.search(group.name[0..2])).to eq([group]) end - it 'returns groups with a matching name regardless of the casing' do + it "returns groups with a matching name regardless of the casing" do expect(described_class.search(group.name.upcase)).to eq([group]) end - it 'returns groups with a matching path' do + it "returns groups with a matching path" do expect(described_class.search(group.path)).to eq([group]) end - it 'returns groups with a partially matching path' do + it "returns groups with a partially matching path" do expect(described_class.search(group.path[0..2])).to eq([group]) end - it 'returns groups with a matching path regardless of the casing' do + it "returns groups with a matching path regardless of the casing" do expect(described_class.search(group.path.upcase)).to eq([group]) end end - describe '#has_owner?' do + describe "#has_owner?" do before do @members = setup_group_members(group) create(:group_member, :invited, :owner, group: group) @@ -347,7 +347,7 @@ describe Group do it { expect(group.has_owner?(nil)).to be_falsey } end - describe '#has_maintainer?' do + describe "#has_maintainer?" do before do @members = setup_group_members(group) create(:group_member, :invited, :maintainer, group: group) @@ -362,45 +362,45 @@ describe Group do it { expect(group.has_maintainer?(nil)).to be_falsey } end - describe '#lfs_enabled?' do - context 'LFS enabled globally' do + describe "#lfs_enabled?" do + context "LFS enabled globally" do before do allow(Gitlab.config.lfs).to receive(:enabled).and_return(true) end - it 'returns true when nothing is set' do + it "returns true when nothing is set" do expect(group.lfs_enabled?).to be_truthy end - it 'returns false when set to false' do + it "returns false when set to false" do group.update_attribute(:lfs_enabled, false) expect(group.lfs_enabled?).to be_falsey end - it 'returns true when set to true' do + it "returns true when set to true" do group.update_attribute(:lfs_enabled, true) expect(group.lfs_enabled?).to be_truthy end end - context 'LFS disabled globally' do + context "LFS disabled globally" do before do allow(Gitlab.config.lfs).to receive(:enabled).and_return(false) end - it 'returns false when nothing is set' do + it "returns false when nothing is set" do expect(group.lfs_enabled?).to be_falsey end - it 'returns false when set to false' do + it "returns false when set to false" do group.update_attribute(:lfs_enabled, false) expect(group.lfs_enabled?).to be_falsey end - it 'returns false when set to true' do + it "returns false when set to true" do group.update_attribute(:lfs_enabled, true) expect(group.lfs_enabled?).to be_falsey @@ -408,11 +408,11 @@ describe Group do end end - describe '#owners' do + describe "#owners" do let(:owner) { create(:user) } let(:developer) { create(:user) } - it 'returns the owners of a Group' do + it "returns the owners of a Group" do group.add_owner(owner) group.add_developer(developer) @@ -427,7 +427,7 @@ describe Group do developer: create(:user), reporter: create(:user), guest: create(:user), - requester: create(:user) + requester: create(:user), } group.add_user(members[:owner], GroupMember::OWNER) @@ -440,54 +440,54 @@ describe Group do members end - describe '#web_url' do - it 'returns the canonical URL' do + describe "#web_url" do + it "returns the canonical URL" do expect(group.web_url).to include("groups/#{group.name}") end - context 'nested group' do + context "nested group" do let(:nested_group) { create(:group, :nested) } it { expect(nested_group.web_url).to include("groups/#{nested_group.full_path}") } end end - describe 'nested group' do + describe "nested group" do subject { build(:group, :nested) } it { is_expected.to be_valid } it { expect(subject.parent).to be_kind_of(described_class) } end - describe '#members_with_parents', :nested_groups do + describe "#members_with_parents", :nested_groups do let!(:group) { create(:group, :nested) } let!(:maintainer) { group.parent.add_user(create(:user), GroupMember::MAINTAINER) } let!(:developer) { group.add_user(create(:user), GroupMember::DEVELOPER) } - it 'returns parents members' do + it "returns parents members" do expect(group.members_with_parents).to include(developer) expect(group.members_with_parents).to include(maintainer) end end - describe '#direct_and_indirect_members', :nested_groups do + describe "#direct_and_indirect_members", :nested_groups do let!(:group) { create(:group, :nested) } let!(:sub_group) { create(:group, parent: group) } let!(:maintainer) { group.parent.add_user(create(:user), GroupMember::MAINTAINER) } let!(:developer) { group.add_user(create(:user), GroupMember::DEVELOPER) } let!(:other_developer) { group.add_user(create(:user), GroupMember::DEVELOPER) } - it 'returns parents members' do + it "returns parents members" do expect(group.direct_and_indirect_members).to include(developer) expect(group.direct_and_indirect_members).to include(maintainer) end - it 'returns descendant members' do + it "returns descendant members" do expect(group.direct_and_indirect_members).to include(other_developer) 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) } @@ -495,7 +495,7 @@ describe Group 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) @@ -506,7 +506,7 @@ describe Group do end end - describe '#direct_and_indirect_users', :nested_groups do + describe "#direct_and_indirect_users", :nested_groups do let(:user_a) { create(:user) } let(:user_b) { create(:user) } let(:user_c) { create(:user) } @@ -525,18 +525,18 @@ describe Group do project.add_developer(user_d) end - it 'returns member users on every nest level without duplication' do + it "returns member users on every nest level without duplication" do expect(group.direct_and_indirect_users).to contain_exactly(user_a, user_b, user_c, user_d) expect(nested_group.direct_and_indirect_users).to contain_exactly(user_a, user_b, user_c) expect(deep_nested_group.direct_and_indirect_users).to contain_exactly(user_a, user_b, user_c) end - it 'does not return members of projects belonging to ancestor groups' do + it "does not return members of projects belonging to ancestor groups" do expect(nested_group.direct_and_indirect_users).not_to include(user_d) end end - describe '#project_users_with_descendants', :nested_groups do + describe "#project_users_with_descendants", :nested_groups do let(:user_a) { create(:user) } let(:user_b) { create(:user) } let(:user_c) { create(:user) } @@ -548,7 +548,7 @@ describe Group do let(:project_b) { create(:project, namespace: nested_group) } let(:project_c) { create(:project, namespace: deep_nested_group) } - it 'returns members of all projects in group and subgroups' do + it "returns members of all projects in group and subgroups" do project_a.add_developer(user_a) project_b.add_developer(user_b) project_c.add_developer(user_c) @@ -559,8 +559,8 @@ describe Group 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 maintainer = create(:user) developer = create(:user) @@ -572,32 +572,32 @@ describe Group do end end - describe '#update_two_factor_requirement' do + describe "#update_two_factor_requirement" do let(:user) { create(:user) } before do group.add_user(user, GroupMember::OWNER) end - it 'is called when require_two_factor_authentication is changed' do + it "is called when require_two_factor_authentication is changed" do expect_any_instance_of(User).to receive(:update_two_factor_requirement) group.update!(require_two_factor_authentication: true) end - it 'is called when two_factor_grace_period is changed' do + it "is called when two_factor_grace_period is changed" do expect_any_instance_of(User).to receive(:update_two_factor_requirement) group.update!(two_factor_grace_period: 23) end - it 'is not called when other attributes are changed' do + it "is not called when other attributes are changed" do expect_any_instance_of(User).not_to receive(:update_two_factor_requirement) - group.update!(description: 'foobar') + group.update!(description: "foobar") end - it 'calls #update_two_factor_requirement on each group member' do + it "calls #update_two_factor_requirement on each group member" do other_user = create(:user) group.add_user(other_user, GroupMember::OWNER) @@ -612,30 +612,30 @@ describe Group do end end - describe '#path_changed_hook' do + describe "#path_changed_hook" do let(:system_hook_service) { SystemHooksService.new } - context 'for a new group' do + context "for a new group" do let(:group) { build(:group) } before do expect(group).to receive(:system_hook_service).and_return(system_hook_service) end - it 'does not trigger system hook' do + it "does not trigger system hook" do expect(system_hook_service).to receive(:execute_hooks_for).with(group, :create) group.save! end end - context 'for an existing group' do - let(:group) { create(:group, path: 'old-path') } + context "for an existing group" do + let(:group) { create(:group, path: "old-path") } - context 'when the path is changed' do - let(:new_path) { 'very-new-path' } + context "when the path is changed" do + let(:new_path) { "very-new-path" } - it 'triggers the rename system hook' do + it "triggers the rename system hook" do expect(group).to receive(:system_hook_service).and_return(system_hook_service) expect(system_hook_service).to receive(:execute_hooks_for).with(group, :rename) @@ -643,63 +643,64 @@ describe Group do end end - context 'when the path is not changed' do - it 'does not trigger system hook' do + context "when the path is not changed" do + it "does not trigger system hook" do expect(group).not_to receive(:system_hook_service) - group.update!(name: 'new name') + group.update!(name: "new name") end end end end - describe '#ci_variables_for' do + describe "#ci_variables_for" do let(:project) { create(:project, group: group) } let!(:ci_variable) do - create(:ci_group_variable, value: 'secret', group: group) + create(:ci_group_variable, value: "secret", group: group) end let!(:protected_variable) do - create(:ci_group_variable, :protected, value: 'protected', group: group) + create(:ci_group_variable, :protected, value: "protected", group: group) end - subject { group.ci_variables_for('ref', project) } + subject { group.ci_variables_for("ref", project) } - shared_examples 'ref is protected' do - it 'contains all the variables' do + shared_examples "ref is protected" do + it "contains all the variables" do is_expected.to contain_exactly(ci_variable, protected_variable) end end - context 'when the ref is not protected' do + context "when the ref is not protected" do before do stub_application_setting( - default_branch_protection: Gitlab::Access::PROTECTION_NONE) + default_branch_protection: Gitlab::Access::PROTECTION_NONE + ) end - it 'contains only the CI variables' do + it "contains only the CI variables" do is_expected.to contain_exactly(ci_variable) end end - context 'when the ref is a protected branch' do + context "when the ref is a protected branch" do before do - allow(project).to receive(:protected_for?).with('ref').and_return(true) + allow(project).to receive(:protected_for?).with("ref").and_return(true) end - it_behaves_like 'ref is protected' + it_behaves_like "ref is protected" end - context 'when the ref is a protected tag' do + context "when the ref is a protected tag" do before do - allow(project).to receive(:protected_for?).with('ref').and_return(true) + allow(project).to receive(:protected_for?).with("ref").and_return(true) end - it_behaves_like 'ref is protected' + it_behaves_like "ref is protected" end - context 'when group has children', :postgresql do + context "when group has children", :postgresql do let(:group_child) { create(:group, parent: group) } let(:group_child_2) { create(:group, parent: group_child) } let(:group_child_3) { create(:group, parent: group_child_2) } @@ -708,13 +709,13 @@ describe Group do let(:variable_child_3) { create(:ci_group_variable, group: group_child_3) } before do - allow(project).to receive(:protected_for?).with('ref').and_return(true) + allow(project).to receive(:protected_for?).with("ref").and_return(true) end - it 'returns all variables belong to the group and parent groups' do + it "returns all variables belong to the group and parent groups" do expected_array1 = [protected_variable, ci_variable] expected_array2 = [variable_child, variable_child_2, variable_child_3] - got_array = group_child_3.ci_variables_for('ref', project).to_a + got_array = group_child_3.ci_variables_for("ref", project).to_a expect(got_array.shift(2)).to contain_exactly(*expected_array1) expect(got_array).to eq(expected_array2) @@ -722,67 +723,67 @@ describe Group do end end - describe '#highest_group_member', :nested_groups do + describe "#highest_group_member", :nested_groups do let(:nested_group) { create(:group, parent: group) } let(:nested_group_2) { create(:group, parent: nested_group) } let(:user) { create(:user) } subject(:highest_group_member) { nested_group_2.highest_group_member(user) } - context 'when the user is not a member of any group in the hierarchy' do - it 'returns nil' do + context "when the user is not a member of any group in the hierarchy" do + it "returns nil" do expect(highest_group_member).to be_nil end end - context 'when the user is only a member of one group in the hierarchy' do + context "when the user is only a member of one group in the hierarchy" do before do nested_group.add_developer(user) end - it 'returns that group member' do + it "returns that group member" do expect(highest_group_member.access_level).to eq(Gitlab::Access::DEVELOPER) end end - context 'when the user is a member of several groups in the hierarchy' do + context "when the user is a member of several groups in the hierarchy" do before do group.add_owner(user) nested_group.add_developer(user) nested_group_2.add_maintainer(user) end - it 'returns the group member with the highest access level' do + it "returns the group member with the highest access level" do expect(highest_group_member.access_level).to eq(Gitlab::Access::OWNER) end end end - describe '#has_parent?' do - context 'when the group has a parent' do - it 'should be truthy' do + describe "#has_parent?" do + context "when the group has a parent" do + it "should be truthy" do group = create(:group, :nested) expect(group.has_parent?).to be_truthy end end - context 'when the group has no parent' do - it 'should be falsy' do + context "when the group has no parent" do + it "should be falsy" do group = create(:group, parent: nil) expect(group.has_parent?).to be_falsy end end end - context 'with uploads' do - it_behaves_like 'model with uploads', true do + context "with uploads" do + it_behaves_like "model with uploads", true do let(:model_object) { create(:group, :with_avatar) } let(:upload_attribute) { :avatar } let(:uploader_class) { AttachmentUploader } end end - describe '#group_clusters_enabled?' do + describe "#group_clusters_enabled?" do before do # Override global stub in spec/spec_helper.rb expect(Feature).to receive(:enabled?).and_call_original @@ -792,7 +793,7 @@ describe Group do it { is_expected.to be_truthy } - context 'explicitly disabled for root ancestor' do + context "explicitly disabled for root ancestor" do before do feature = Feature.get(:group_clusters) feature.disable(group.root_ancestor) @@ -801,7 +802,7 @@ describe Group do it { is_expected.to be_falsey } end - context 'explicitly disabled for root ancestor' do + context "explicitly disabled for root ancestor" do before do feature = Feature.get(:group_clusters) feature.enable(group.root_ancestor) |