Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/group_spec.rb')
-rw-r--r--spec/models/group_spec.rb294
1 files changed, 46 insertions, 248 deletions
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 527ee96ca86..01fd17bfe10 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -703,10 +703,6 @@ RSpec.describe Group, feature_category: :groups_and_projects do
it { expect(group.ancestors.to_sql).not_to include 'traversal_ids <@' }
end
- describe '#ancestors_upto' do
- it { expect(group.ancestors_upto.to_sql).not_to include "WITH ORDINALITY" }
- end
-
describe '.shortest_traversal_ids_prefixes' do
it { expect { described_class.shortest_traversal_ids_prefixes }.to raise_error /Feature not supported since the `:use_traversal_ids` is disabled/ }
end
@@ -737,14 +733,6 @@ RSpec.describe Group, feature_category: :groups_and_projects do
it 'hierarchy order' do
expect(group.ancestors(hierarchy_order: :asc).to_sql).to include 'ORDER BY "depth" ASC'
end
-
- context 'ancestor linear queries feature flag disabled' do
- before do
- stub_feature_flags(use_traversal_ids_for_ancestors: false)
- end
-
- it { expect(group.ancestors.to_sql).not_to include 'traversal_ids <@' }
- end
end
describe '#ancestors_upto' do
@@ -856,7 +844,29 @@ RSpec.describe Group, feature_category: :groups_and_projects do
end
it 'returns groups without integration' do
- expect(Group.without_integration(instance_integration)).to contain_exactly(another_group)
+ expect(described_class.without_integration(instance_integration)).to contain_exactly(another_group)
+ end
+ end
+
+ describe '.execute_integrations' do
+ let(:integration) { create(:integrations_slack, :group, group: group) }
+ let(:test_data) { { 'foo' => 'bar' } }
+
+ before do
+ allow(group.integrations).to receive(:public_send).and_return([])
+ allow(group.integrations).to receive(:public_send).with(:push_hooks).and_return([integration])
+ end
+
+ it 'executes integrations with a matching scope' do
+ expect(integration).to receive(:async_execute).with(test_data)
+
+ group.execute_integrations(test_data, :push_hooks)
+ end
+
+ it 'ignores integrations without a matching scope' do
+ expect(integration).not_to receive(:async_execute).with(test_data)
+
+ group.execute_integrations(test_data, :note_hooks)
end
end
@@ -1848,22 +1858,29 @@ RSpec.describe Group, feature_category: :groups_and_projects do
end
context 'user-related methods' do
- let(:user_a) { create(:user) }
- let(:user_b) { create(:user) }
- let(:user_c) { create(:user) }
- let(:user_d) { create(:user) }
+ let_it_be(:user_a) { create(:user) }
+ let_it_be(:user_b) { create(:user) }
+ let_it_be(:user_c) { create(:user) }
+ let_it_be(:user_d) { create(:user) }
- let(:group) { create(:group) }
- let(:nested_group) { create(:group, parent: group) }
- let(:deep_nested_group) { create(:group, parent: nested_group) }
- let(:project) { create(:project, namespace: group) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:nested_group) { create(:group, parent: group) }
+ let_it_be(:deep_nested_group) { create(:group, parent: nested_group) }
+ let_it_be(:project) { create(:project, namespace: group) }
- before do
+ let_it_be(:another_group) { create(:group) }
+ let_it_be(:another_user) { create(:user) }
+
+ before_all do
group.add_developer(user_a)
group.add_developer(user_c)
nested_group.add_developer(user_b)
deep_nested_group.add_developer(user_a)
project.add_developer(user_d)
+
+ another_group.add_developer(another_user)
+
+ create(:group_group_link, shared_group: group, shared_with_group: another_group)
end
describe '#direct_and_indirect_users' do
@@ -1876,6 +1893,13 @@ RSpec.describe Group, feature_category: :groups_and_projects 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
+
+ context 'when share_with_groups is true' do
+ it 'also returns members of groups invited to this group' do
+ expect(group.direct_and_indirect_users(share_with_groups: true))
+ .to contain_exactly(user_a, user_b, user_c, user_d, another_user)
+ end
+ end
end
describe '#direct_and_indirect_users_with_inactive' do
@@ -2643,232 +2667,6 @@ RSpec.describe Group, feature_category: :groups_and_projects do
end
end
- describe '#update_shared_runners_setting!' do
- context 'enabled' do
- subject { group.update_shared_runners_setting!('enabled') }
-
- context 'group that its ancestors have shared runners disabled' do
- let_it_be(:parent, reload: true) { create(:group, :shared_runners_disabled) }
- let_it_be(:group, reload: true) { create(:group, :shared_runners_disabled, parent: parent) }
- let_it_be(:project, reload: true) { create(:project, shared_runners_enabled: false, group: group) }
-
- it 'raises exception' do
- expect { subject }
- .to raise_error(ActiveRecord::RecordInvalid, 'Validation failed: Shared runners enabled cannot be enabled because parent group has shared Runners disabled')
- end
-
- it 'does not enable shared runners' do
- expect do
- begin
- subject
- rescue StandardError
- nil
- end
-
- parent.reload
- group.reload
- project.reload
- end.to not_change { parent.shared_runners_enabled }
- .and not_change { group.shared_runners_enabled }
- .and not_change { project.shared_runners_enabled }
- end
- end
-
- context 'root group with shared runners disabled' do
- let_it_be(:group) { create(:group, :shared_runners_disabled) }
- let_it_be(:sub_group) { create(:group, :shared_runners_disabled, parent: group) }
- let_it_be(:project) { create(:project, shared_runners_enabled: false, group: sub_group) }
-
- it 'enables shared Runners only for itself' do
- expect { subject_and_reload(group, sub_group, project) }
- .to change { group.shared_runners_enabled }.from(false).to(true)
- .and not_change { sub_group.shared_runners_enabled }
- .and not_change { project.shared_runners_enabled }
- end
- end
- end
-
- context 'disabled_and_unoverridable' do
- let_it_be(:group) { create(:group) }
- let_it_be(:sub_group) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners, parent: group) }
- let_it_be(:sub_group_2) { create(:group, parent: group) }
- let_it_be(:project) { create(:project, group: group, shared_runners_enabled: true) }
- let_it_be(:project_2) { create(:project, group: sub_group_2, shared_runners_enabled: true) }
-
- subject { group.update_shared_runners_setting!(Namespace::SR_DISABLED_AND_UNOVERRIDABLE) }
-
- it 'disables shared Runners for all descendant groups and projects' do
- expect { subject_and_reload(group, sub_group, sub_group_2, project, project_2) }
- .to change { group.shared_runners_enabled }.from(true).to(false)
- .and not_change { group.allow_descendants_override_disabled_shared_runners }
- .and not_change { sub_group.shared_runners_enabled }
- .and change { sub_group.allow_descendants_override_disabled_shared_runners }.from(true).to(false)
- .and change { sub_group_2.shared_runners_enabled }.from(true).to(false)
- .and not_change { sub_group_2.allow_descendants_override_disabled_shared_runners }
- .and change { project.shared_runners_enabled }.from(true).to(false)
- .and change { project_2.shared_runners_enabled }.from(true).to(false)
- end
-
- context 'with override on self' do
- let_it_be(:group) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners) }
-
- it 'disables it' do
- expect { subject_and_reload(group) }
- .to not_change { group.shared_runners_enabled }
- .and change { group.allow_descendants_override_disabled_shared_runners }.from(true).to(false)
- end
- end
- end
-
- context 'disabled_and_overridable' do
- subject { group.update_shared_runners_setting!(Namespace::SR_DISABLED_AND_OVERRIDABLE) }
-
- context 'top level group' do
- let_it_be(:group) { create(:group, :shared_runners_disabled) }
- let_it_be(:sub_group) { create(:group, :shared_runners_disabled, parent: group) }
- let_it_be(:project) { create(:project, shared_runners_enabled: false, group: sub_group) }
-
- it 'enables allow descendants to override only for itself' do
- expect { subject_and_reload(group, sub_group, project) }
- .to change { group.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
- .and not_change { group.shared_runners_enabled }
- .and not_change { sub_group.allow_descendants_override_disabled_shared_runners }
- .and not_change { sub_group.shared_runners_enabled }
- .and not_change { project.shared_runners_enabled }
- end
- end
-
- context 'group that its ancestors have shared Runners disabled but allows to override' do
- let_it_be(:parent) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners) }
- let_it_be(:group) { create(:group, :shared_runners_disabled, parent: parent) }
- let_it_be(:project) { create(:project, shared_runners_enabled: false, group: group) }
-
- it 'enables allow descendants to override' do
- expect { subject_and_reload(parent, group, project) }
- .to not_change { parent.allow_descendants_override_disabled_shared_runners }
- .and not_change { parent.shared_runners_enabled }
- .and change { group.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
- .and not_change { group.shared_runners_enabled }
- .and not_change { project.shared_runners_enabled }
- end
- end
-
- context 'when parent does not allow' do
- let_it_be(:parent, reload: true) { create(:group, :shared_runners_disabled, allow_descendants_override_disabled_shared_runners: false) }
- let_it_be(:group, reload: true) { create(:group, :shared_runners_disabled, allow_descendants_override_disabled_shared_runners: false, parent: parent) }
-
- it 'raises exception' do
- expect { subject }
- .to raise_error(ActiveRecord::RecordInvalid, 'Validation failed: Allow descendants override disabled shared runners cannot be enabled because parent group does not allow it')
- end
-
- it 'does not allow descendants to override' do
- expect do
- begin
- subject
- rescue StandardError
- nil
- end
-
- parent.reload
- group.reload
- end.to not_change { parent.allow_descendants_override_disabled_shared_runners }
- .and not_change { parent.shared_runners_enabled }
- .and not_change { group.allow_descendants_override_disabled_shared_runners }
- .and not_change { group.shared_runners_enabled }
- end
- end
-
- context 'top level group that has shared Runners enabled' do
- let_it_be(:group) { create(:group, shared_runners_enabled: true) }
- let_it_be(:sub_group) { create(:group, shared_runners_enabled: true, parent: group) }
- let_it_be(:project) { create(:project, shared_runners_enabled: true, group: sub_group) }
-
- it 'enables allow descendants to override & disables shared runners everywhere' do
- expect { subject_and_reload(group, sub_group, project) }
- .to change { group.shared_runners_enabled }.from(true).to(false)
- .and change { group.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
- .and change { sub_group.shared_runners_enabled }.from(true).to(false)
- .and change { project.shared_runners_enabled }.from(true).to(false)
- end
- end
- end
-
- context 'disabled_with_override (deprecated)' do
- subject { group.update_shared_runners_setting!(Namespace::SR_DISABLED_WITH_OVERRIDE) }
-
- context 'top level group' do
- let_it_be(:group) { create(:group, :shared_runners_disabled) }
- let_it_be(:sub_group) { create(:group, :shared_runners_disabled, parent: group) }
- let_it_be(:project) { create(:project, shared_runners_enabled: false, group: sub_group) }
-
- it 'enables allow descendants to override only for itself' do
- expect { subject_and_reload(group, sub_group, project) }
- .to change { group.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
- .and not_change { group.shared_runners_enabled }
- .and not_change { sub_group.allow_descendants_override_disabled_shared_runners }
- .and not_change { sub_group.shared_runners_enabled }
- .and not_change { project.shared_runners_enabled }
- end
- end
-
- context 'group that its ancestors have shared Runners disabled but allows to override' do
- let_it_be(:parent) { create(:group, :shared_runners_disabled, :allow_descendants_override_disabled_shared_runners) }
- let_it_be(:group) { create(:group, :shared_runners_disabled, parent: parent) }
- let_it_be(:project) { create(:project, shared_runners_enabled: false, group: group) }
-
- it 'enables allow descendants to override' do
- expect { subject_and_reload(parent, group, project) }
- .to not_change { parent.allow_descendants_override_disabled_shared_runners }
- .and not_change { parent.shared_runners_enabled }
- .and change { group.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
- .and not_change { group.shared_runners_enabled }
- .and not_change { project.shared_runners_enabled }
- end
- end
-
- context 'when parent does not allow' do
- let_it_be(:parent, reload: true) { create(:group, :shared_runners_disabled, allow_descendants_override_disabled_shared_runners: false) }
- let_it_be(:group, reload: true) { create(:group, :shared_runners_disabled, allow_descendants_override_disabled_shared_runners: false, parent: parent) }
-
- it 'raises exception' do
- expect { subject }
- .to raise_error(ActiveRecord::RecordInvalid, 'Validation failed: Allow descendants override disabled shared runners cannot be enabled because parent group does not allow it')
- end
-
- it 'does not allow descendants to override' do
- expect do
- begin
- subject
- rescue StandardError
- nil
- end
-
- parent.reload
- group.reload
- end.to not_change { parent.allow_descendants_override_disabled_shared_runners }
- .and not_change { parent.shared_runners_enabled }
- .and not_change { group.allow_descendants_override_disabled_shared_runners }
- .and not_change { group.shared_runners_enabled }
- end
- end
-
- context 'top level group that has shared Runners enabled' do
- let_it_be(:group) { create(:group, shared_runners_enabled: true) }
- let_it_be(:sub_group) { create(:group, shared_runners_enabled: true, parent: group) }
- let_it_be(:project) { create(:project, shared_runners_enabled: true, group: sub_group) }
-
- it 'enables allow descendants to override & disables shared runners everywhere' do
- expect { subject_and_reload(group, sub_group, project) }
- .to change { group.shared_runners_enabled }.from(true).to(false)
- .and change { group.allow_descendants_override_disabled_shared_runners }.from(false).to(true)
- .and change { sub_group.shared_runners_enabled }.from(true).to(false)
- .and change { project.shared_runners_enabled }.from(true).to(false)
- end
- end
- end
- end
-
describe "#default_branch_name" do
context "when group.namespace_settings does not have a default branch name" do
it "returns nil" do