From f77e51dfb49f82f0438560d297352edf9f4a1cf4 Mon Sep 17 00:00:00 2001 From: Gerardo Navarro Date: Thu, 14 Aug 2025 16:53:07 +0200 Subject: [PATCH] test: Improve test performance for Groups::UpdateService Changelog: other --- spec/services/groups/update_service_spec.rb | 61 ++++++++++++--------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/spec/services/groups/update_service_spec.rb b/spec/services/groups/update_service_spec.rb index d42f69f8162c25..167a82f8e6ac8e 100644 --- a/spec/services/groups/update_service_spec.rb +++ b/spec/services/groups/update_service_spec.rb @@ -3,10 +3,12 @@ require 'spec_helper' RSpec.describe Groups::UpdateService, feature_category: :groups_and_projects do - let!(:user) { create(:user) } - let!(:private_group) { create(:group, :private) } - let!(:internal_group) { create(:group, :internal) } - let!(:public_group) { create(:group, :public) } + let_it_be(:user) { create(:user) } + let_it_be_with_reload(:private_group, freeze: true) { create(:group, :private) } + let_it_be_with_reload(:internal_group) { create(:group, :internal) } + let_it_be_with_reload(:public_group) { create(:group, :public) } + + # let(:service) { described_class.new(group, user, params) } describe "#execute" do context 'with project' do @@ -30,7 +32,7 @@ context "project visibility_level validation" do context "public group with public projects" do - let!(:service) { described_class.new(public_group, user, visibility_level: Gitlab::VisibilityLevel::INTERNAL) } + let(:service) { described_class.new(public_group, user, visibility_level: Gitlab::VisibilityLevel::INTERNAL) } before do public_group.add_member(user, Gitlab::Access::OWNER) @@ -59,7 +61,7 @@ subject { described_class.new(public_group, user, params).execute } context 'within group' do - let(:project) { create(:project, group: public_group) } + let_it_be(:project) { create(:project, group: public_group) } context 'with path updates' do it 'does not allow the update' do @@ -88,8 +90,8 @@ end context 'within subgroup' do - let(:subgroup) { create(:group, parent: public_group) } - let(:project) { create(:project, group: subgroup) } + let_it_be(:subgroup) { create(:group, parent: public_group) } + let_it_be(:project) { create(:project, group: subgroup) } it 'does not allow path updates' do expect(subject).to be false @@ -100,7 +102,7 @@ end context "internal group with internal project" do - let!(:service) { described_class.new(internal_group, user, visibility_level: Gitlab::VisibilityLevel::PRIVATE) } + let(:service) { described_class.new(internal_group, user, visibility_level: Gitlab::VisibilityLevel::PRIVATE) } before do internal_group.add_member(user, Gitlab::Access::OWNER) @@ -116,7 +118,7 @@ end context "internal group with private project" do - let!(:service) { described_class.new(internal_group, user, visibility_level: Gitlab::VisibilityLevel::PRIVATE) } + let(:service) { described_class.new(internal_group, user, visibility_level: Gitlab::VisibilityLevel::PRIVATE) } before do internal_group.add_member(user, Gitlab::Access::OWNER) @@ -297,9 +299,10 @@ end context 'when issues do have contacts' do - let!(:issue) { create(:issue, project: create(:project, group: public_group)) } - let!(:contact) { create(:contact, group: public_group) } - let!(:issue_contact) { create(:issue_customer_relations_contact, issue: issue, contact: contact) } + let_it_be(:project) { create(:project, group: public_group) } + let_it_be(:issue) { create(:issue, project: project) } + let_it_be(:contact) { create(:contact, group: public_group) } + let_it_be(:issue_contact) { create(:issue_customer_relations_contact, issue: issue, contact: contact) } it 'returns an error and does not update crm_group' do described_class.new(public_group, user, params).execute @@ -314,7 +317,7 @@ end context "unauthorized visibility_level validation" do - let!(:service) { described_class.new(internal_group, user, visibility_level: 99) } + let(:service) { described_class.new(internal_group, user, visibility_level: 99) } before do internal_group.add_member(user, Gitlab::Access::MAINTAINER) @@ -444,7 +447,7 @@ end context 'when group is public' do - before do + before_all do public_group.add_maintainer(user) end @@ -506,7 +509,7 @@ described_class.new(internal_group, user, **params) end - before do + before_all do internal_group.add_owner(user) end @@ -526,15 +529,15 @@ end context 'when updating #allow_runner_registration_token' do - let(:params) { { allow_runner_registration_token: false } } - let!(:internal_group) { create(:group, :internal, :allow_runner_registration_token) } + let_it_be_with_reload(:internal_group) { create(:group, :internal, :allow_runner_registration_token) } + let(:params) { { allow_runner_registration_token: false } } let(:service) do described_class.new(internal_group, user, **params) end context 'for users who have the ability to update allow_runner_registration_token' do - before do + before_all do internal_group.add_owner(user) end @@ -571,6 +574,7 @@ it 'updates attribute' do internal_group.add_member(user, Gitlab::Access::OWNER) + internal_group.reload expect { service.execute }.to change { internal_group.lock_math_rendering_limits_enabled? }.to(true) end @@ -767,7 +771,7 @@ context 'rename group' do let(:new_path) { SecureRandom.hex } - let!(:service) { described_class.new(internal_group, user, path: new_path) } + let(:service) { described_class.new(internal_group, user, path: new_path) } before do internal_group.add_member(user, Gitlab::Access::MAINTAINER) @@ -780,7 +784,8 @@ end context 'for a subgroup' do - let(:subgroup) { create(:group, :private, parent: private_group) } + let_it_be_with_reload(:private_group) { create(:group, :private) } + let_it_be_with_reload(:subgroup) { create(:group, :private, parent: private_group) } context 'when the parent group share_with_group_lock is enabled' do before do @@ -790,6 +795,9 @@ context 'for the parent group owner' do it 'allows disabling share_with_group_lock' do private_group.add_owner(user) + private_group.reload + subgroup.reload + user.reload result = described_class.new(subgroup, user, share_with_group_lock: false).execute @@ -802,6 +810,9 @@ it 'does not allow disabling share_with_group_lock' do subgroup_owner = create(:user) subgroup.add_owner(subgroup_owner) + subgroup_owner.reload + subgroup.reload + private_group.reload result = described_class.new(subgroup, subgroup_owner, share_with_group_lock: false).execute @@ -814,12 +825,12 @@ end context 'change shared Runners config' do - let(:group) { create(:group) } - let(:project) { create(:project, shared_runners_enabled: true, group: group) } + let_it_be_with_reload(:group) { create(:group) } + let_it_be(:project) { create(:project, shared_runners_enabled: true, group: group) } subject { described_class.new(group, user, shared_runners_setting: Namespace::SR_DISABLED_AND_UNOVERRIDABLE).execute } - before do + before_all do group.add_owner(user) end @@ -839,7 +850,7 @@ end context 'changes allowing subgroups to establish own 2FA' do - let(:group) { create(:group) } + let_it_be_with_reload(:group) { create(:group) } let(:params) { { allow_mfa_for_subgroups: false } } subject { described_class.new(group, user, params).execute } -- GitLab