diff --git a/ee/spec/finders/approval_rules/group_finder_spec.rb b/ee/spec/finders/approval_rules/group_finder_spec.rb index 1d04ecc37b30bfec628a6e74c5d09f46827b0684..2c07e1075845c389a7757e2be166854d91c38f89 100644 --- a/ee/spec/finders/approval_rules/group_finder_spec.rb +++ b/ee/spec/finders/approval_rules/group_finder_spec.rb @@ -5,20 +5,30 @@ RSpec.describe ApprovalRules::GroupFinder, feature_category: :source_code_management do let_it_be_with_reload(:rule) { create(:approval_project_rule) } let_it_be(:user) { create(:user) } + let_it_be(:organization) { create(:organization) } + + let_it_be(:public_group) { create(:group, name: 'public_group', organization: organization) } + let_it_be(:private_inaccessible_group) do + create(:group, :private, name: 'private_inaccessible_group', organization: organization) + end + + let_it_be(:private_accessible_group) do + create(:group, :private, name: 'private_accessible_group', owners: user, organization: organization) + end - let_it_be(:public_group) { create(:group, name: 'public_group') } - let_it_be(:private_inaccessible_group) { create(:group, :private, name: 'private_inaccessible_group') } - let_it_be(:private_accessible_group) { create(:group, :private, name: 'private_accessible_group', owners: user) } let_it_be(:private_accessible_subgroup) do create(:group, :private, parent: private_accessible_group, name: 'private_accessible_subgroup') end - let_it_be(:private_shared_group) { create(:group, :private, name: 'private_shared_group') } + let_it_be(:private_shared_group) do + create(:group, :private, name: 'private_shared_group', organization: organization) + end + let_it_be(:private_shared_group_link) do create(:project_group_link, project: rule.project, group: private_shared_group) end - let_it_be(:public_shared_group) { create(:group, name: 'public_shared_group') } + let_it_be(:public_shared_group) { create(:group, name: 'public_shared_group', organization: organization) } let_it_be(:public_shared_group_link) do create(:project_group_link, project: rule.project, group: public_shared_group) end @@ -106,7 +116,13 @@ rule.reload RequestStore.clear! - rule.groups << create(:group, :private, parent: private_accessible_group, name: 'private_accessible_subgroup2') + rule.groups << create( + :group, + :private, + parent: private_accessible_group, + name: 'private_accessible_subgroup2', + organization: organization + ) expect { described_class.new(rule, user).visible_groups }.not_to exceed_query_limit(control) end diff --git a/ee/spec/finders/epics_finder_spec.rb b/ee/spec/finders/epics_finder_spec.rb index 55e80dc956595f2caf38866255554bb6e4aa09c0..8891ad391c674f1dca5c629976c3e2febc03f46d 100644 --- a/ee/spec/finders/epics_finder_spec.rb +++ b/ee/spec/finders/epics_finder_spec.rb @@ -59,8 +59,8 @@ def epics(params = {}) expect(epics).to contain_exactly(epic1, epic2, epic3, epic5) end - it 'does not execute more than 5 SQL queries' do - expect { epics.to_a }.not_to exceed_all_query_limit(5) + it 'does not execute more than 6 SQL queries' do + expect { epics.to_a }.not_to exceed_all_query_limit(6) end context 'sorting' do @@ -286,18 +286,18 @@ def epics(params = {}) end end - it 'does not execute more than 5 SQL queries' do - expect { epics.to_a }.not_to exceed_all_query_limit(5) + it 'does not execute more than 6 SQL queries' do + expect { epics.to_a }.not_to exceed_all_query_limit(6) end - it 'does not execute more than 6 SQL queries when checking namespace plans', :saas do + it 'does not execute more than 7 SQL queries when checking namespace plans', :saas do allow(Gitlab::CurrentSettings) .to receive(:should_check_namespace_plan?) .and_return(true) create(:gitlab_subscription, :ultimate, namespace: group) - expect { epics.to_a }.not_to exceed_all_query_limit(6) + expect { epics.to_a }.not_to exceed_all_query_limit(7) end end diff --git a/ee/spec/requests/api/graphql/current_user/groups_query_spec.rb b/ee/spec/requests/api/graphql/current_user/groups_query_spec.rb index 03ba56e3309b87f07088985579a8f26406a42119..7a6c922a3836a2a41faae25fc04a13035f742dbe 100644 --- a/ee/spec/requests/api/graphql/current_user/groups_query_spec.rb +++ b/ee/spec/requests/api/graphql/current_user/groups_query_spec.rb @@ -6,11 +6,12 @@ include GraphqlHelpers let_it_be(:user) { create(:user) } - let_it_be(:root_parent) { create(:group, :private, name: 'root-1', path: 'root-1') } - let_it_be(:guest_group) { create(:group, name: 'public guest', path: 'public-guest', guests: user) } - let_it_be(:private_maintainer_group) { create(:group, :private, name: 'b private maintainer', path: 'b-private-maintainer', parent: root_parent, maintainers: user) } - let_it_be(:private_developer_group) { create(:group, :private, project_creation_level: nil, name: 'c public developer', path: 'c-public-developer', developers: user) } - let_it_be(:public_maintainer_group) { create(:group, :private, name: 'a public maintainer', path: 'a-public-maintainer', maintainers: user) } + let_it_be(:organization) { create(:organization) } + let_it_be(:root_parent) { create(:group, :private, name: 'root-1', path: 'root-1', organization: organization) } + let_it_be(:guest_group) { create(:group, name: 'public guest', path: 'public-guest', guests: user, organization: organization) } + let_it_be(:private_maintainer_group) { create(:group, :private, name: 'b private maintainer', path: 'b-private-maintainer', parent: root_parent, maintainers: user, organization: organization) } + let_it_be(:private_developer_group) { create(:group, :private, project_creation_level: nil, name: 'c public developer', path: 'c-public-developer', developers: user, organization: organization) } + let_it_be(:public_maintainer_group) { create(:group, :private, name: 'a public maintainer', path: 'a-public-maintainer', maintainers: user, organization: organization) } let(:group_arguments) { {} } let(:current_user) { user } @@ -29,11 +30,11 @@ it 'avoids N+1 queries', :request_store do control = ActiveRecord::QueryRecorder.new { post_graphql(query, current_user: current_user) } - create(:group, :private, maintainers: current_user) - create(:group, :private, parent: private_maintainer_group) + create(:group, :private, maintainers: current_user, organization: organization) + create(:group, :private, parent: private_maintainer_group, organization: organization) another_root = create(:group, :private, name: 'root-3', path: 'root-3') - create(:group, :private, parent: another_root, maintainers: current_user) + create(:group, :private, parent: another_root, maintainers: current_user, organization: organization) expect { post_graphql(query, current_user: current_user) }.not_to exceed_query_limit(control) end diff --git a/ee/spec/requests/api/graphql/gitlab_subscriptions/add_on_eligible_users_spec.rb b/ee/spec/requests/api/graphql/gitlab_subscriptions/add_on_eligible_users_spec.rb index 51e14d90afc19fcba5c8c91eef890e4625e2c23c..51d76e3b5d5e7ba8762a701158bea5cb612edb7c 100644 --- a/ee/spec/requests/api/graphql/gitlab_subscriptions/add_on_eligible_users_spec.rb +++ b/ee/spec/requests/api/graphql/gitlab_subscriptions/add_on_eligible_users_spec.rb @@ -299,6 +299,7 @@ before do other_add_on_purchase.namespace.add_owner(current_user) + other_add_on_purchase.namespace.update!(organization: add_on_purchase.namespace.organization) end it "avoids N+1 database queries", :request_store do diff --git a/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/create_spec.rb b/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/create_spec.rb index b5b18f7b8b891dfcd98bb7c2c455f5bda72daf47..19020a09142305af4d55eed6dffc45395e88ad44 100644 --- a/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/create_spec.rb +++ b/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/create_spec.rb @@ -280,6 +280,7 @@ before_all do additional_purchase.namespace.add_owner(current_user) + additional_purchase.namespace.update!(organization: add_on_purchase.namespace.organization) end it_behaves_like 'avoids N+1 database queries' diff --git a/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/remove_spec.rb b/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/remove_spec.rb index 87004f75e5419818802efc5749780fb9040ec4bb..acc03dc92cea2c1233b01502513b011a986676aa 100644 --- a/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/remove_spec.rb +++ b/ee/spec/requests/api/graphql/gitlab_subscriptions/user_add_on_assignments/remove_spec.rb @@ -6,7 +6,8 @@ include GraphqlHelpers let_it_be(:current_user) { create(:user) } - let_it_be(:namespace) { create(:group) } + let_it_be(:organization) { create(:organization) } + let_it_be(:namespace) { create(:group, organization: organization) } let_it_be(:add_on_purchase) { create(:gitlab_subscription_add_on_purchase, namespace: namespace) } let_it_be(:remove_user) { create(:user) } @@ -74,6 +75,11 @@ before do additional_purchase_1.namespace.add_owner(current_user) additional_purchase_2.namespace.add_owner(current_user) + + if add_on_purchase.namespace + additional_purchase_1.namespace.update!(organization: add_on_purchase.namespace.organization) + additional_purchase_2.namespace.update!(organization: add_on_purchase.namespace.organization) + end end it "avoids N+1 database queries", :request_store do @@ -213,10 +219,14 @@ end context 'when the namespace is nil' do - before_all do + before do add_on_purchase.update!(namespace_id: nil) end + after do + add_on_purchase.update!(namespace_id: namespace.id) + end + context 'when current_user is admin' do let(:current_user) { create(:admin) } let(:namespace_path) { nil } diff --git a/ee/spec/requests/api/graphql/mutations/issues/promote_to_epic_spec.rb b/ee/spec/requests/api/graphql/mutations/issues/promote_to_epic_spec.rb index 275d0b686f08758f52e6c1519624ac28d13be7fb..878f3b4667836bd3683bbede34d45bff194a25cf 100644 --- a/ee/spec/requests/api/graphql/mutations/issues/promote_to_epic_spec.rb +++ b/ee/spec/requests/api/graphql/mutations/issues/promote_to_epic_spec.rb @@ -8,8 +8,9 @@ let(:new_epic_group) { nil } let_it_be(:current_user) { create(:user) } - let_it_be(:group) { create(:group, developers: current_user) } - let_it_be(:project) { create(:project, group: group, developers: current_user) } + let_it_be(:organization) { create(:organization) } + let_it_be(:group) { create(:group, developers: current_user, organization: organization) } + let_it_be(:project) { create(:project, group: group, developers: current_user, organization: organization) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:user) { create(:user) } @@ -81,7 +82,7 @@ def mutation_response end context 'when epic has to be in a different group' do - let(:new_epic_group) { create(:group) } + let(:new_epic_group) { create(:group, organization: organization) } context 'when user cannot create epic in new group' do it 'does not promote the issue to epic' do @@ -94,7 +95,7 @@ def mutation_response end context 'when user can create epic in new group' do - let(:queries_count_threshold) { 129 } + let(:queries_count_threshold) { 131 } before do new_epic_group.add_developer(current_user) diff --git a/ee/spec/requests/api/graphql/namespace/compliance_frameworks_spec.rb b/ee/spec/requests/api/graphql/namespace/compliance_frameworks_spec.rb index 227870c1d24da51e79e3128c24426a8ac409a6dd..53f065bcb038feaa37f9129d3977f8634578fece 100644 --- a/ee/spec/requests/api/graphql/namespace/compliance_frameworks_spec.rb +++ b/ee/spec/requests/api/graphql/namespace/compliance_frameworks_spec.rb @@ -175,7 +175,7 @@ end context 'when querying multiple namespaces' do - let(:group) { create(:group) } + let(:group) { create(:group, organization: namespace.organization) } let(:sox_framework) { create(:compliance_framework, namespace: group, name: 'SOX') } let(:multiple_namespace_query) do <<~QUERY diff --git a/spec/finders/concerns/finder_with_group_hierarchy_spec.rb b/spec/finders/concerns/finder_with_group_hierarchy_spec.rb index 27f5192176d7c83d2f55f11749f30dffd70e0f0f..2ea3fa1a349e15885877a04a4f4705cca3b7b9cf 100644 --- a/spec/finders/concerns/finder_with_group_hierarchy_spec.rb +++ b/spec/finders/concerns/finder_with_group_hierarchy_spec.rb @@ -35,10 +35,11 @@ def read_permission end end - let_it_be(:parent_group) { create(:group) } - let_it_be(:group) { create(:group, parent: parent_group) } - let_it_be(:private_group) { create(:group, :private) } - let_it_be(:private_subgroup) { create(:group, :private, parent: private_group) } + let_it_be(:organization) { create(:organization) } + let_it_be(:parent_group) { create(:group, organization: organization) } + let_it_be(:group) { create(:group, parent: parent_group, organization: organization) } + let_it_be(:private_group) { create(:group, :private, organization: organization) } + let_it_be(:private_subgroup) { create(:group, :private, parent: private_group, organization: organization) } let!(:user) { create(:user) } diff --git a/spec/graphql/resolvers/group_labels_resolver_spec.rb b/spec/graphql/resolvers/group_labels_resolver_spec.rb index 2e583a1703df5535a6dbe55b5491f5744546a23d..c68498173f13f41b2300b74350e4665490ba0853 100644 --- a/spec/graphql/resolvers/group_labels_resolver_spec.rb +++ b/spec/graphql/resolvers/group_labels_resolver_spec.rb @@ -8,10 +8,11 @@ using RSpec::Parameterized::TableSyntax let_it_be(:current_user) { create(:user) } - let_it_be(:group, reload: true) { create(:group, :private) } - let_it_be(:subgroup, reload: true) { create(:group, :private, parent: group) } - let_it_be(:sub_subgroup, reload: true) { create(:group, :private, parent: subgroup) } - let_it_be(:project, reload: true) { create(:project, :private, group: sub_subgroup) } + let_it_be(:organization) { create(:organization) } + let_it_be(:group, reload: true) { create(:group, :private, organization: organization) } + let_it_be(:subgroup, reload: true) { create(:group, :private, parent: group, organization: organization) } + let_it_be(:sub_subgroup, reload: true) { create(:group, :private, parent: subgroup, organization: organization) } + let_it_be(:project, reload: true) { create(:project, :private, group: sub_subgroup, organization: organization) } let_it_be(:label1) { create(:label, project: project, name: 'project feature') } let_it_be(:label2) { create(:label, project: project, name: 'new project feature') } let_it_be(:group_label1) { create(:group_label, group: group, name: 'group feature') } @@ -69,8 +70,8 @@ ActiveRecord::QueryRecorder.new { resolve_labels(group, params).to_a } end - another_project = create(:project, :private, group: sub_subgroup) - another_subgroup = create(:group, :private, parent: group) + another_project = create(:project, :private, group: sub_subgroup, organization: organization) + another_subgroup = create(:group, :private, parent: group, organization: organization) create(:label, project: another_project, name: 'another project feature') create(:group_label, group: another_subgroup, name: 'another group feature') diff --git a/spec/requests/api/graphql/current_user/groups_query_spec.rb b/spec/requests/api/graphql/current_user/groups_query_spec.rb index c7bb87f4548758a869ddcf9001af5978f6e3646e..13161436c98be6f40d6ba483332668462b762452 100644 --- a/spec/requests/api/graphql/current_user/groups_query_spec.rb +++ b/spec/requests/api/graphql/current_user/groups_query_spec.rb @@ -5,13 +5,14 @@ RSpec.describe 'Query current user groups', feature_category: :groups_and_projects do include GraphqlHelpers + let_it_be(:organization) { create(:organization) } let_it_be(:user) { create(:user) } - let_it_be(:root_group) { create(:group, name: 'Root group', path: 'root-group') } - let_it_be(:guest_group) { create(:group, name: 'public guest', path: 'public-guest', guests: user) } - let_it_be(:private_maintainer_group) { create(:group, :private, name: 'b private maintainer', path: 'b-private-maintainer', parent: root_group, maintainers: user) } - let_it_be(:public_developer_group) { create(:group, project_creation_level: nil, name: 'c public developer', path: 'c-public-developer', developers: user) } - let_it_be(:public_maintainer_group) { create(:group, name: 'a public maintainer', path: 'a-public-maintainer', parent: root_group, maintainers: user) } - let_it_be(:public_owner_group) { create(:group, name: 'a public owner', path: 'a-public-owner', owners: user) } + let_it_be(:root_group) { create(:group, name: 'Root group', path: 'root-group', organization: organization) } + let_it_be(:guest_group) { create(:group, name: 'public guest', path: 'public-guest', guests: user, organization: organization) } + let_it_be(:private_maintainer_group) { create(:group, :private, name: 'b private maintainer', path: 'b-private-maintainer', parent: root_group, maintainers: user, organization: organization) } + let_it_be(:public_developer_group) { create(:group, project_creation_level: nil, name: 'c public developer', path: 'c-public-developer', developers: user, organization: organization) } + let_it_be(:public_maintainer_group) { create(:group, name: 'a public maintainer', path: 'a-public-maintainer', parent: root_group, maintainers: user, organization: organization) } + let_it_be(:public_owner_group) { create(:group, name: 'a public owner', path: 'a-public-owner', owners: user, organization: organization) } let(:group_arguments) { {} } let(:current_user) { user } @@ -37,7 +38,7 @@ it 'avoids N+1 queries', :request_store do control = ActiveRecord::QueryRecorder.new { post_graphql(query, current_user: current_user) } - new_group = create(:group, :private) + new_group = create(:group, :private, organization: organization) new_group.add_maintainer(current_user) expect { post_graphql(query, current_user: current_user) }.not_to exceed_query_limit(control)