From e218a8df1e85c695e35e5c7212ccea528cdcae75 Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu <heinrich@gitlab.com> Date: Wed, 24 Jul 2019 17:52:55 +0800 Subject: [PATCH] Remove code related to object hierarchy in MySQL These are not required because MySQL is not supported anymore --- app/controllers/application_controller.rb | 2 +- app/controllers/concerns/group_tree.rb | 20 ++- app/finders/group_descendants_finder.rb | 2 - app/graphql/types/group_type.rb | 8 +- app/helpers/groups_helper.rb | 4 - app/models/concerns/descendant.rb | 11 -- app/models/group.rb | 1 - app/models/namespace.rb | 2 - app/policies/group_policy.rb | 6 +- app/services/groups/nested_create_service.rb | 4 - app/services/groups/transfer_service.rb | 1 - app/services/members/destroy_service.rb | 2 +- .../refresh_authorized_projects_service.rb | 8 +- app/views/groups/settings/_advanced.html.haml | 25 ++-- .../javascripts/epic/components/epic_body.vue | 3 +- ee/app/assets/javascripts/epic/store/state.js | 1 - .../groups/epic_links_controller.rb | 6 - ee/app/helpers/ee/issuables_helper.rb | 1 - ee/app/models/ee/epic.rb | 3 - .../ee/gitlab/quick_actions/epic_actions.rb | 2 +- ee/lib/ee/gitlab/usage_data.rb | 9 +- .../admin/geo/nodes_controller_spec.rb | 2 +- .../sso_enforcement_redirect_spec.rb | 4 +- .../concerns/routable_actions_spec.rb | 4 +- .../groups/epic_links_controller_spec.rb | 2 +- .../groups/saml_providers_controller_spec.rb | 2 +- .../features/billings/billing_plans_spec.rb | 2 +- ee/spec/features/epics/epic_issues_spec.rb | 6 +- .../features/groups/group_settings_spec.rb | 2 +- ee/spec/features/labels_hierarchy.rb | 2 +- .../members/invite_group_and_members_spec.rb | 2 +- ee/spec/features/projects/new_project_spec.rb | 2 +- .../finders/boards/milestones_finder_spec.rb | 4 +- ee/spec/finders/epics_finder_spec.rb | 2 +- .../repository_verification_finder_spec.rb | 2 +- .../graphql/resolvers/epic_resolver_spec.rb | 2 +- ee/spec/helpers/ee/issuables_helper_spec.rb | 3 +- ee/spec/helpers/ee/namespaces_helper_spec.rb | 2 +- .../ee/api/entities/geo_node_status_spec.rb | 2 +- .../lib/gitlab/custom_file_templates_spec.rb | 4 +- .../database/load_balancing/host_spec.rb | 2 +- .../lib/gitlab/geo/log_cursor/daemon_spec.rb | 2 +- .../gitlab/geo/log_cursor/event_logs_spec.rb | 2 +- .../events/cache_invalidation_event_spec.rb | 2 +- .../hashed_storage_attachments_event_spec.rb | 2 +- .../hashed_storage_migrated_event_spec.rb | 2 +- .../events/job_artifact_deleted_event_spec.rb | 2 +- .../events/lfs_object_deleted_event_spec.rb | 2 +- .../events/repositories_changed_event_spec.rb | 2 +- .../events/repository_created_event_spec.rb | 2 +- .../events/repository_deleted_event_spec.rb | 2 +- .../events/repository_renamed_event_spec.rb | 2 +- .../events/repository_updated_event_spec.rb | 2 +- .../events/reset_checksum_event_spec.rb | 2 +- .../events/upload_deleted_event_spec.rb | 2 +- .../insights/finders/issuable_finder_spec.rb | 2 +- ee/spec/lib/gitlab/usage_data_spec.rb | 2 +- ee/spec/models/burndown_spec.rb | 2 +- .../models/concerns/elastic/project_spec.rb | 2 +- ee/spec/models/epic_spec.rb | 16 +-- ee/spec/models/gitlab_subscription_spec.rb | 4 +- ee/spec/models/namespace_spec.rb | 16 +-- ee/spec/models/pg_replication_slot_spec.rb | 8 +- ee/spec/models/project_spec.rb | 4 +- ee/spec/models/user_spec.rb | 2 +- ee/spec/policies/group_policy_spec.rb | 2 +- ee/spec/presenters/epic_presenter_spec.rb | 4 +- ee/spec/requests/api/geo_spec.rb | 2 +- ee/spec/requests/api/v3/github_spec.rb | 2 +- ee/spec/requests/groups_controller_spec.rb | 2 +- .../geo_project_registry_entity_spec.rb | 2 +- .../serializers/storage_shard_entity_spec.rb | 2 +- .../services/ci/register_job_service_spec.rb | 2 +- .../epic_issues/create_service_spec.rb | 2 +- .../epic_links/create_service_spec.rb | 2 +- .../epic_links/destroy_service_spec.rb | 2 +- .../services/epic_links/list_service_spec.rb | 2 +- .../groups/autocomplete_service_spec.rb | 18 +-- .../groups/participants_service_spec.rb | 2 +- .../services/groups/update_service_spec.rb | 2 +- .../create_from_template_service_spec.rb | 2 +- .../quick_actions/interpret_service_spec.rb | 4 +- .../update_build_minutes_service_spec.rb | 2 +- .../models/member_shared_examples.rb | 2 +- .../admin/groups/_form.html.haml_spec.rb | 2 +- ee/spec/views/groups/edit.html.haml_spec.rb | 2 +- ...lear_shared_runners_minutes_worker_spec.rb | 2 +- .../primary/batch_worker_spec.rb | 2 +- .../primary/shard_worker_spec.rb | 2 +- .../primary/single_worker_spec.rb | 2 +- .../secondary/scheduler_worker_spec.rb | 2 +- .../secondary/single_worker_spec.rb | 2 +- ...or_gitlab_com_subscriptions_worker_spec.rb | 2 +- lib/api/entities.rb | 5 +- lib/api/groups.rb | 5 +- lib/gitlab/object_hierarchy.rb | 17 --- lib/gitlab/project_authorizations.rb | 121 +++++++++++++++++ .../with_nested_groups.rb | 125 ------------------ .../without_nested_groups.rb | 35 ----- .../boards/issues_controller_spec.rb | 2 +- spec/controllers/concerns/group_tree_spec.rb | 4 +- .../dashboard/groups_controller_spec.rb | 2 +- .../groups/children_controller_spec.rb | 4 +- .../groups/labels_controller_spec.rb | 4 +- spec/controllers/groups_controller_spec.rb | 6 +- .../import/bitbucket_controller_spec.rb | 6 +- .../import/gitlab_controller_spec.rb | 6 +- .../projects/milestones_controller_spec.rb | 2 +- spec/features/dashboard/groups_list_spec.rb | 6 +- spec/features/groups/empty_states_spec.rb | 2 +- spec/features/groups/group_settings_spec.rb | 2 +- spec/features/groups/issues_spec.rb | 2 +- .../groups/members/list_members_spec.rb | 4 +- spec/features/groups/share_lock_spec.rb | 2 +- spec/features/groups/show_spec.rb | 38 +----- spec/features/groups_spec.rb | 4 +- spec/features/ide_spec.rb | 2 +- spec/features/import/manifest_import_spec.rb | 2 +- spec/features/labels_hierarchy_spec.rb | 2 +- .../projects/members/invite_group_spec.rb | 4 +- spec/features/projects/new_project_spec.rb | 2 +- .../settings/pipelines_settings_spec.rb | 2 +- .../settings/user_transfers_a_project_spec.rb | 2 +- .../projects/sub_group_issuables_spec.rb | 2 +- .../projects/user_creates_project_spec.rb | 2 +- spec/features/projects_spec.rb | 2 +- .../finders/autocomplete/users_finder_spec.rb | 2 +- spec/finders/cluster_ancestors_finder_spec.rb | 4 +- spec/finders/group_descendants_finder_spec.rb | 6 +- spec/finders/group_members_finder_spec.rb | 4 +- spec/finders/group_projects_finder_spec.rb | 12 +- spec/finders/groups_finder_spec.rb | 2 +- spec/finders/issues_finder_spec.rb | 2 +- spec/finders/labels_finder_spec.rb | 6 +- spec/finders/members_finder_spec.rb | 8 +- spec/finders/merge_requests_finder_spec.rb | 2 +- spec/finders/todos_finder_spec.rb | 2 +- .../namespace_projects_resolver_spec.rb | 2 +- spec/helpers/auto_devops_helper_spec.rb | 6 +- spec/helpers/groups_helper_spec.rb | 6 +- spec/helpers/namespaces_helper_spec.rb | 4 +- .../filter/milestone_reference_filter_spec.rb | 4 +- .../fix_cross_project_label_links_spec.rb | 4 +- .../bare_repository_import/importer_spec.rb | 16 +-- .../count/reltuples_count_strategy_spec.rb | 2 +- .../count/tablesample_count_strategy_spec.rb | 2 +- spec/lib/gitlab/database/grant_spec.rb | 2 +- spec/lib/gitlab/group_search_results_spec.rb | 6 +- .../gitlab/manifest_import/manifest_spec.rb | 2 +- .../manifest_import/project_creator_spec.rb | 2 +- spec/lib/gitlab/object_hierarchy_spec.rb | 2 +- spec/lib/gitlab/performance_bar_spec.rb | 4 +- .../lib/gitlab/project_authorizations_spec.rb | 38 +++--- spec/lib/gitlab/sql/cte_spec.rb | 2 +- spec/lib/gitlab/sql/recursive_cte_spec.rb | 2 +- spec/models/ci/runner_spec.rb | 2 +- spec/models/clusters/cluster_spec.rb | 2 +- .../concerns/deployment_platform_spec.rb | 2 +- spec/models/concerns/group_descendant_spec.rb | 6 +- spec/models/concerns/issuable_spec.rb | 2 +- spec/models/group_spec.rb | 28 ++-- spec/models/members/group_member_spec.rb | 2 +- spec/models/members/project_member_spec.rb | 2 +- .../namespace/root_storage_statistics_spec.rb | 2 +- spec/models/namespace_spec.rb | 20 +-- spec/models/notification_recipient_spec.rb | 2 +- .../postgresql/replication_slot_spec.rb | 2 +- spec/models/project_group_link_spec.rb | 2 +- spec/models/project_spec.rb | 28 ++-- spec/models/todo_spec.rb | 6 +- spec/models/user_spec.rb | 38 ++---- spec/policies/group_member_policy_spec.rb | 2 +- spec/policies/group_policy_spec.rb | 59 +-------- .../clusters/cluster_presenter_spec.rb | 2 +- spec/requests/api/boards_spec.rb | 2 +- .../api/graphql/namespace/projects_spec.rb | 2 +- spec/requests/api/group_labels_spec.rb | 4 +- spec/requests/api/groups_spec.rb | 10 +- .../api/issues/get_group_issues_spec.rb | 2 +- spec/requests/api/members_spec.rb | 6 +- spec/requests/api/merge_requests_spec.rb | 2 +- spec/requests/api/projects_spec.rb | 2 +- spec/requests/openid_connect_spec.rb | 2 +- spec/serializers/group_child_entity_spec.rb | 2 +- .../group_child_serializer_spec.rb | 4 +- spec/serializers/pipeline_serializer_spec.rb | 2 +- .../boards/issues/list_service_spec.rb | 2 +- .../groups/auto_devops_service_spec.rb | 2 +- spec/services/groups/create_service_spec.rb | 46 +++---- .../groups/nested_create_service_spec.rb | 30 +---- spec/services/groups/transfer_service_spec.rb | 17 +-- spec/services/groups/update_service_spec.rb | 2 +- spec/services/issues/update_service_spec.rb | 4 +- spec/services/members/destroy_service_spec.rb | 6 +- spec/services/notification_service_spec.rb | 50 +++---- .../projects/autocomplete_service_spec.rb | 2 +- .../destroy/entity_leave_service_spec.rb | 2 +- .../destroy/group_private_service_spec.rb | 2 +- ...efresh_authorized_projects_service_spec.rb | 4 +- spec/spec_helper.rb | 8 -- ...ubish_import_controller_shared_examples.rb | 6 +- .../policies/group_policy_shared_context.rb | 2 +- spec/views/groups/edit.html.haml_spec.rb | 2 +- .../layouts/header/_new_dropdown.haml_spec.rb | 2 +- 204 files changed, 515 insertions(+), 841 deletions(-) delete mode 100644 app/models/concerns/descendant.rb create mode 100644 lib/gitlab/project_authorizations.rb delete mode 100644 lib/gitlab/project_authorizations/with_nested_groups.rb delete mode 100644 lib/gitlab/project_authorizations/without_nested_groups.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9534ad568619..0d166619dd7b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -421,7 +421,7 @@ def gitlab_project_import_enabled? end def manifest_import_enabled? - Group.supports_nested_objects? && Gitlab::CurrentSettings.import_sources.include?('manifest') + Gitlab::CurrentSettings.import_sources.include?('manifest') end def phabricator_import_enabled? diff --git a/app/controllers/concerns/group_tree.rb b/app/controllers/concerns/group_tree.rb index e9a7d6a31524..d076c62c707a 100644 --- a/app/controllers/concerns/group_tree.rb +++ b/app/controllers/concerns/group_tree.rb @@ -32,18 +32,14 @@ def render_group_tree(groups) def filtered_groups_with_ancestors(groups) filtered_groups = groups.search(params[:filter]).page(params[:page]) - if Group.supports_nested_objects? - # We find the ancestors by ID of the search results here. - # Otherwise the ancestors would also have filters applied, - # which would cause them not to be preloaded. - # - # Pagination needs to be applied before loading the ancestors to - # make sure ancestors are not cut off by pagination. - Gitlab::ObjectHierarchy.new(Group.where(id: filtered_groups.select(:id))) - .base_and_ancestors - else - filtered_groups - end + # We find the ancestors by ID of the search results here. + # Otherwise the ancestors would also have filters applied, + # which would cause them not to be preloaded. + # + # Pagination needs to be applied before loading the ancestors to + # make sure ancestors are not cut off by pagination. + Gitlab::ObjectHierarchy.new(Group.where(id: filtered_groups.select(:id))) + .base_and_ancestors end # rubocop: enable CodeReuse/ActiveRecord end diff --git a/app/finders/group_descendants_finder.rb b/app/finders/group_descendants_finder.rb index ec340f38450f..4e489a9c930e 100644 --- a/app/finders/group_descendants_finder.rb +++ b/app/finders/group_descendants_finder.rb @@ -132,8 +132,6 @@ def ancestors_of_filtered_subgroups end def subgroups - return Group.none unless Group.supports_nested_objects? - # When filtering subgroups, we want to find all matches within the tree of # descendants to show to the user groups = if params[:filter] diff --git a/app/graphql/types/group_type.rb b/app/graphql/types/group_type.rb index 2181b9320f59..0e539bd6b30f 100644 --- a/app/graphql/types/group_type.rb +++ b/app/graphql/types/group_type.rb @@ -14,11 +14,9 @@ class GroupType < NamespaceType group.avatar_url(only_path: false) end - if ::Group.supports_nested_objects? - field :parent, GroupType, - null: true, - resolve: -> (obj, _args, _ctx) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Group, obj.parent_id).find } - end + field :parent, GroupType, + null: true, + resolve: -> (obj, _args, _ctx) { Gitlab::Graphql::Loaders::BatchModelLoader.new(Group, obj.parent_id).find } end end diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb index 1a09ccce1f9d..27499d5b74c7 100644 --- a/app/helpers/groups_helper.rb +++ b/app/helpers/groups_helper.rb @@ -127,10 +127,6 @@ def parent_group_options(current_group) groups.to_json end - def supports_nested_groups? - Group.supports_nested_objects? - end - private def get_group_sidebar_links diff --git a/app/models/concerns/descendant.rb b/app/models/concerns/descendant.rb deleted file mode 100644 index 4c4365221223..000000000000 --- a/app/models/concerns/descendant.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -module Descendant - extend ActiveSupport::Concern - - class_methods do - def supports_nested_objects? - Gitlab::Database.postgresql? - end - end -end diff --git a/app/models/group.rb b/app/models/group.rb index b5e95e01bb31..72d999626a10 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -10,7 +10,6 @@ class Group < Namespace include Referable include SelectForProjectAuthorization include LoadedInGroupList - include Descendant include GroupDescendant include TokenAuthenticatable include WithUploads diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 8429493a7bfb..ad00d660a983 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -332,8 +332,6 @@ def sync_share_with_group_lock_with_parent end def force_share_with_group_lock_on_descendants - return unless Group.supports_nested_objects? - # We can't use `descendants.update_all` since Rails will throw away the WITH # RECURSIVE statement. We also can't use WHERE EXISTS since we can't use # different table aliases, hence we're just using WHERE IN. Since we have a diff --git a/app/policies/group_policy.rb b/app/policies/group_policy.rb index 03e18dd7be32..2b67339a062b 100644 --- a/app/policies/group_policy.rb +++ b/app/policies/group_policy.rb @@ -16,8 +16,6 @@ class GroupPolicy < BasePolicy condition(:maintainer) { access_level >= GroupMember::MAINTAINER } condition(:reporter) { access_level >= GroupMember::REPORTER } - condition(:nested_groups_supported, scope: :global) { Group.supports_nested_objects? } - condition(:has_parent, scope: :subject) { @subject.has_parent? } condition(:share_with_group_locked, scope: :subject) { @subject.share_with_group_lock? } condition(:parent_share_with_group_locked, scope: :subject) { @subject.parent&.share_with_group_lock? } @@ -108,8 +106,8 @@ class GroupPolicy < BasePolicy enable :read_nested_project_resources end - rule { owner & nested_groups_supported }.enable :create_subgroup - rule { maintainer & maintainer_can_create_group & nested_groups_supported }.enable :create_subgroup + rule { owner }.enable :create_subgroup + rule { maintainer & maintainer_can_create_group }.enable :create_subgroup rule { public_group | logged_in_viewable }.enable :view_globally diff --git a/app/services/groups/nested_create_service.rb b/app/services/groups/nested_create_service.rb index 01bd685712bb..a51ac9aa593f 100644 --- a/app/services/groups/nested_create_service.rb +++ b/app/services/groups/nested_create_service.rb @@ -18,10 +18,6 @@ def execute return namespace end - if group_path.include?('/') && !Group.supports_nested_objects? - raise 'Nested groups are not supported on MySQL' - end - create_group_path end diff --git a/app/services/groups/transfer_service.rb b/app/services/groups/transfer_service.rb index 98e7c3115721..fe7e07ef9f08 100644 --- a/app/services/groups/transfer_service.rb +++ b/app/services/groups/transfer_service.rb @@ -43,7 +43,6 @@ def proceed_to_transfer def ensure_allowed_transfer raise_transfer_error(:group_is_already_root) if group_is_already_root? - raise_transfer_error(:database_not_supported) unless Group.supports_nested_objects? raise_transfer_error(:same_parent_as_current) if same_parent? raise_transfer_error(:invalid_policies) unless valid_policies? raise_transfer_error(:namespace_with_same_path) if namespace_with_same_path? diff --git a/app/services/members/destroy_service.rb b/app/services/members/destroy_service.rb index 00a087b05ab5..6687b319dbfc 100644 --- a/app/services/members/destroy_service.rb +++ b/app/services/members/destroy_service.rb @@ -31,7 +31,7 @@ def delete_subresources(member) return unless member.is_a?(GroupMember) && member.user && member.group delete_project_members(member) - delete_subgroup_members(member) if Group.supports_nested_objects? + delete_subgroup_members(member) end def delete_project_members(member) diff --git a/app/services/users/refresh_authorized_projects_service.rb b/app/services/users/refresh_authorized_projects_service.rb index 4a26d2be2af1..ae67b4f52569 100644 --- a/app/services/users/refresh_authorized_projects_service.rb +++ b/app/services/users/refresh_authorized_projects_service.rb @@ -102,13 +102,7 @@ def current_authorizations end def fresh_authorizations - klass = if Group.supports_nested_objects? - Gitlab::ProjectAuthorizations::WithNestedGroups - else - Gitlab::ProjectAuthorizations::WithoutNestedGroups - end - - klass.new(user).calculate + Gitlab::ProjectAuthorizations.new(user).calculate end end end diff --git a/app/views/groups/settings/_advanced.html.haml b/app/views/groups/settings/_advanced.html.haml index 5d211d0e186b..d1eb64789977 100644 --- a/app/views/groups/settings/_advanced.html.haml +++ b/app/views/groups/settings/_advanced.html.haml @@ -23,20 +23,19 @@ = f.submit 'Change group path', class: 'btn btn-warning' -- if supports_nested_groups? - .sub-section - %h4.warning-title Transfer group - = form_for @group, url: transfer_group_path(@group), method: :put do |f| - .form-group - = dropdown_tag('Select parent group', options: { toggle_class: 'js-groups-dropdown', title: 'Parent Group', filter: true, dropdown_class: 'dropdown-open-top dropdown-group-transfer', placeholder: 'Search groups', data: { data: parent_group_options(@group) } }) - = hidden_field_tag 'new_parent_group_id' +.sub-section + %h4.warning-title Transfer group + = form_for @group, url: transfer_group_path(@group), method: :put do |f| + .form-group + = dropdown_tag('Select parent group', options: { toggle_class: 'js-groups-dropdown', title: 'Parent Group', filter: true, dropdown_class: 'dropdown-open-top dropdown-group-transfer', placeholder: 'Search groups', data: { data: parent_group_options(@group) } }) + = hidden_field_tag 'new_parent_group_id' - %ul - %li Be careful. Changing a group's parent can have unintended #{link_to 'side effects', 'https://docs.gitlab.com/ce/user/project/index.html#redirects-when-changing-repository-paths', target: 'blank'}. - %li You can only transfer the group to a group you manage. - %li You will need to update your local repositories to point to the new location. - %li If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility. - = f.submit 'Transfer group', class: 'btn btn-warning' + %ul + %li Be careful. Changing a group's parent can have unintended #{link_to 'side effects', 'https://docs.gitlab.com/ce/user/project/index.html#redirects-when-changing-repository-paths', target: 'blank'}. + %li You can only transfer the group to a group you manage. + %li You will need to update your local repositories to point to the new location. + %li If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility. + = f.submit 'Transfer group', class: 'btn btn-warning' .sub-section %h4.danger-title= _('Remove group') diff --git a/ee/app/assets/javascripts/epic/components/epic_body.vue b/ee/app/assets/javascripts/epic/components/epic_body.vue index c5ff3d520344..c25f397a2121 100644 --- a/ee/app/assets/javascripts/epic/components/epic_body.vue +++ b/ee/app/assets/javascripts/epic/components/epic_body.vue @@ -25,7 +25,6 @@ export default { 'canUpdate', 'canDestroy', 'canAdmin', - 'subepicsSupported', 'initialTitleHtml', 'initialTitleText', 'initialDescriptionHtml', @@ -64,7 +63,7 @@ export default { /> </div> <related-items - v-if="subepicsSupported && !isEpicTreeEnabled" + v-if="!isEpicTreeEnabled" :endpoint="epicLinksEndpoint" :can-admin="canAdmin" :can-reorder="canAdmin" diff --git a/ee/app/assets/javascripts/epic/store/state.js b/ee/app/assets/javascripts/epic/store/state.js index 8c6a6a28d6ab..674b92f1e3af 100644 --- a/ee/app/assets/javascripts/epic/store/state.js +++ b/ee/app/assets/javascripts/epic/store/state.js @@ -21,7 +21,6 @@ export default () => ({ canUpdate: false, canDestroy: false, canAdmin: false, - subepicsSupported: false, // Epic Information epicId: 0, diff --git a/ee/app/controllers/groups/epic_links_controller.rb b/ee/app/controllers/groups/epic_links_controller.rb index 513d5d16118c..eff2e1de08b0 100644 --- a/ee/app/controllers/groups/epic_links_controller.rb +++ b/ee/app/controllers/groups/epic_links_controller.rb @@ -3,8 +3,6 @@ class Groups::EpicLinksController < Groups::ApplicationController include EpicRelations - before_action :check_nested_support! - def update result = EpicLinks::UpdateService.new(child_epic, current_user, params[:epic]).execute @@ -30,8 +28,4 @@ def list_service def child_epic @child_epic ||= Epic.find(params[:id]) end - - def check_nested_support! - render_404 unless Epic.supports_nested_objects? - end end diff --git a/ee/app/helpers/ee/issuables_helper.rb b/ee/app/helpers/ee/issuables_helper.rb index 72f345f70f3c..61da5f2bf57b 100644 --- a/ee/app/helpers/ee/issuables_helper.rb +++ b/ee/app/helpers/ee/issuables_helper.rb @@ -21,7 +21,6 @@ def issuable_initial_data(issuable) if parent.is_a?(Group) data[:issueLinksEndpoint] = group_epic_issues_path(parent, issuable) data[:epicLinksEndpoint] = group_epic_links_path(parent, issuable) - data[:subepicsSupported] = ::Epic.supports_nested_objects? data[:fullPath] = parent.full_path end diff --git a/ee/app/models/ee/epic.rb b/ee/app/models/ee/epic.rb index 2d24f6415f08..afa17d826d68 100644 --- a/ee/app/models/ee/epic.rb +++ b/ee/app/models/ee/epic.rb @@ -12,7 +12,6 @@ module Epic include Referable include Awardable include LabelEventable - include Descendant include RelativePositioning enum state: { opened: 1, closed: 2 } @@ -164,8 +163,6 @@ def relative_positioning_parent_column # epic2 - parent: epic1 # Returns: 2 def deepest_relationship_level - return unless supports_nested_objects? - ::Gitlab::ObjectHierarchy.new(self.where(parent_id: nil)).max_descendants_depth end diff --git a/ee/lib/ee/gitlab/quick_actions/epic_actions.rb b/ee/lib/ee/gitlab/quick_actions/epic_actions.rb index 23a021d5914a..097802e433a9 100644 --- a/ee/lib/ee/gitlab/quick_actions/epic_actions.rb +++ b/ee/lib/ee/gitlab/quick_actions/epic_actions.rb @@ -82,7 +82,7 @@ def extract_epic(params) end def action_allowed? - ::Epic.supports_nested_objects? && quick_action_target.group&.feature_available?(:epics) && + quick_action_target.group&.feature_available?(:epics) && current_user.can?(:"admin_#{quick_action_target.to_ability_name}", quick_action_target) end end diff --git a/ee/lib/ee/gitlab/usage_data.rb b/ee/lib/ee/gitlab/usage_data.rb index 35b180f0a2b0..1c644007c4f6 100644 --- a/ee/lib/ee/gitlab/usage_data.rb +++ b/ee/lib/ee/gitlab/usage_data.rb @@ -136,12 +136,9 @@ def system_usage_data projects_with_packages: count(::Packages::Package.select('distinct project_id')), projects_with_prometheus_alerts: count(PrometheusAlert.distinct_projects), projects_with_tracing_enabled: count(ProjectTracingSetting) - }).merge(service_desk_counts).merge(security_products_usage) - - # MySql does not support recursive queries so we can't retrieve epics relationship depth - if ::Group.supports_nested_objects? - usage_data[:counts] = usage_data[:counts].merge(epics_deepest_relationship_level) - end + }).merge(service_desk_counts) + .merge(security_products_usage) + .merge(epics_deepest_relationship_level) usage_data end diff --git a/ee/spec/controllers/admin/geo/nodes_controller_spec.rb b/ee/spec/controllers/admin/geo/nodes_controller_spec.rb index 097a7695b71c..ab9f6878793c 100644 --- a/ee/spec/controllers/admin/geo/nodes_controller_spec.rb +++ b/ee/spec/controllers/admin/geo/nodes_controller_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -describe Admin::Geo::NodesController, :postgresql do +describe Admin::Geo::NodesController do shared_examples 'unlicensed geo action' do it 'redirects to the license page' do expect(response).to redirect_to(admin_license_path) diff --git a/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb b/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb index 14366941b849..8b596f1ffa5c 100644 --- a/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb +++ b/ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb @@ -93,7 +93,7 @@ it_behaves_like 'a routable SSO url' end - context 'with a nested group', :nested_groups do + context 'with a nested group' do subject { described_class.new(nested_group) } it_behaves_like 'a routable SSO url' @@ -105,7 +105,7 @@ it_behaves_like 'a routable SSO url' end - context 'with a nested project', :nested_groups do + context 'with a nested project' do subject { described_class.new(nested_project) } it_behaves_like 'a routable SSO url' diff --git a/ee/spec/controllers/concerns/routable_actions_spec.rb b/ee/spec/controllers/concerns/routable_actions_spec.rb index 06758b1b53e0..4ea2f5741775 100644 --- a/ee/spec/controllers/concerns/routable_actions_spec.rb +++ b/ee/spec/controllers/concerns/routable_actions_spec.rb @@ -58,7 +58,7 @@ def request_params(routable) include_examples 'sso redirects' end - describe 'for a nested group', :nested_groups do + describe 'for a nested group' do let(:routable) { create(:group, :private, parent: root_group) } include_examples 'sso redirects' @@ -70,7 +70,7 @@ def request_params(routable) include_examples 'sso redirects' end - describe 'for a nested project', :nested_groups do + describe 'for a nested project' do let(:routable) { create(:project, :private, group: create(:group, :private, parent: root_group)) } include_examples 'sso redirects' diff --git a/ee/spec/controllers/groups/epic_links_controller_spec.rb b/ee/spec/controllers/groups/epic_links_controller_spec.rb index 6f2c21156718..84e08920ccf6 100644 --- a/ee/spec/controllers/groups/epic_links_controller_spec.rb +++ b/ee/spec/controllers/groups/epic_links_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Groups::EpicLinksController, :postgresql do +describe Groups::EpicLinksController do let(:group) { create(:group, :public) } let(:parent_epic) { create(:epic, group: group) } let(:epic1) { create(:epic, group: group) } diff --git a/ee/spec/controllers/groups/saml_providers_controller_spec.rb b/ee/spec/controllers/groups/saml_providers_controller_spec.rb index eec2919c6907..654e5390372f 100644 --- a/ee/spec/controllers/groups/saml_providers_controller_spec.rb +++ b/ee/spec/controllers/groups/saml_providers_controller_spec.rb @@ -96,7 +96,7 @@ def stub_saml_config(enabled:) expect(assigns(:scim_token_url)).to eq("http://localhost/api/scim/v2/groups/#{group.full_path}") end - context 'not on a top level group', :nested_groups do + context 'not on a top level group' do let(:group) { create(:group, :nested) } it_behaves_like '404 status' diff --git a/ee/spec/features/billings/billing_plans_spec.rb b/ee/spec/features/billings/billing_plans_spec.rb index c57765d7879d..73fbe1165652 100644 --- a/ee/spec/features/billings/billing_plans_spec.rb +++ b/ee/spec/features/billings/billing_plans_spec.rb @@ -158,7 +158,7 @@ end end - context 'on sub-group', :nested_groups do + context 'on sub-group' do let(:user2) { create(:user) } let(:user3) { create(:user) } let(:group) { create(:group, plan: :bronze_plan) } diff --git a/ee/spec/features/epics/epic_issues_spec.rb b/ee/spec/features/epics/epic_issues_spec.rb index da6884b1a878..b874ae1a0541 100644 --- a/ee/spec/features/epics/epic_issues_spec.rb +++ b/ee/spec/features/epics/epic_issues_spec.rb @@ -55,7 +55,7 @@ def visit_epic expect(page).not_to have_selector('.related-items-tree-container .js-add-issues-button') end - it 'user cannot add new epics to the epic', :postgresql do + it 'user cannot add new epics to the epic' do expect(page).not_to have_selector('.related-items-tree-container .js-add-epics-button') end end @@ -109,7 +109,7 @@ def add_epics(references) end end - it 'user can see all epics of the group and delete the associations', :postgresql do + it 'user can see all epics of the group and delete the associations' do within('.related-items-tree-container ul.related-items-list') do expect(page).to have_selector('li.js-item-type-epic', count: 2) expect(page).to have_content(nested_epics[0].title) @@ -146,7 +146,7 @@ def add_epics(references) end end - it 'user can add new epics to the epic', :postgresql do + it 'user can add new epics to the epic' do references = "#{epic_to_add.to_reference(full: true)}" add_epics(references) diff --git a/ee/spec/features/groups/group_settings_spec.rb b/ee/spec/features/groups/group_settings_spec.rb index 1ea5c6ab2c4d..cdddf30415b0 100644 --- a/ee/spec/features/groups/group_settings_spec.rb +++ b/ee/spec/features/groups/group_settings_spec.rb @@ -148,7 +148,7 @@ end end - context 'when custom_project_templates feature', :postgresql do + context 'when custom_project_templates feature' do let!(:subgroup) { create(:group, :public, parent: group) } let!(:subgroup_1) { create(:group, :public, parent: subgroup) } diff --git a/ee/spec/features/labels_hierarchy.rb b/ee/spec/features/labels_hierarchy.rb index 7961c93f5120..424138739eb9 100644 --- a/ee/spec/features/labels_hierarchy.rb +++ b/ee/spec/features/labels_hierarchy.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe 'Labels Hierarchy', :js, :nested_groups do +describe 'Labels Hierarchy', :js do let!(:user) { create(:user) } let!(:grandparent) { create(:group) } let!(:parent) { create(:group, parent: grandparent) } diff --git a/ee/spec/features/projects/members/invite_group_and_members_spec.rb b/ee/spec/features/projects/members/invite_group_and_members_spec.rb index 1535ca40df20..5fb688dc6640 100644 --- a/ee/spec/features/projects/members/invite_group_and_members_spec.rb +++ b/ee/spec/features/projects/members/invite_group_and_members_spec.rb @@ -104,7 +104,7 @@ end end - context 'for a project in a subgroup', :nested_groups do + context 'for a project in a subgroup' do let(:root_group) { create(:group) } let(:subgroup) { create(:group, parent: root_group) } let(:project) { create(:project, namespace: subgroup) } diff --git a/ee/spec/features/projects/new_project_spec.rb b/ee/spec/features/projects/new_project_spec.rb index a3d6131b0b1c..c018c50fc181 100644 --- a/ee/spec/features/projects/new_project_spec.rb +++ b/ee/spec/features/projects/new_project_spec.rb @@ -177,7 +177,7 @@ end end - context 'Group-level project templates', :js, :postgresql do + context 'Group-level project templates', :js do def visit_create_from_group_template_tab visit url click_link 'Create from template' diff --git a/ee/spec/finders/boards/milestones_finder_spec.rb b/ee/spec/finders/boards/milestones_finder_spec.rb index cb651040680a..170af2548032 100644 --- a/ee/spec/finders/boards/milestones_finder_spec.rb +++ b/ee/spec/finders/boards/milestones_finder_spec.rb @@ -18,7 +18,7 @@ let(:user) { create(:user) } let(:finder) { described_class.new(board, user) } - context 'when project board', :nested_groups do + context 'when project board' do let(:board) { create(:board, project: nested_group_project, group: nil) } it 'returns milestones from board project and ancestors groups' do @@ -32,7 +32,7 @@ end end - context 'when group board', :nested_groups do + context 'when group board' do let(:board) { create(:board, project: nil, group: nested_group) } it 'returns milestones from board group and its ancestors' do diff --git a/ee/spec/finders/epics_finder_spec.rb b/ee/spec/finders/epics_finder_spec.rb index c55d460eedf5..067c9497ea62 100644 --- a/ee/spec/finders/epics_finder_spec.rb +++ b/ee/spec/finders/epics_finder_spec.rb @@ -110,7 +110,7 @@ def epics(params = {}) end end - context 'when subgroups are supported', :nested_groups do + context 'when subgroups are supported' do let(:subgroup) { create(:group, :private, parent: group) } let(:subgroup2) { create(:group, :private, parent: subgroup) } let!(:subepic1) { create(:epic, group: subgroup) } diff --git a/ee/spec/finders/geo/repository_verification_finder_spec.rb b/ee/spec/finders/geo/repository_verification_finder_spec.rb index 5626768dcbcf..c7d8b1b6f6e0 100644 --- a/ee/spec/finders/geo/repository_verification_finder_spec.rb +++ b/ee/spec/finders/geo/repository_verification_finder_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Geo::RepositoryVerificationFinder, :postgresql do +describe Geo::RepositoryVerificationFinder do set(:project) { create(:project) } describe '#find_failed_repositories' do diff --git a/ee/spec/graphql/resolvers/epic_resolver_spec.rb b/ee/spec/graphql/resolvers/epic_resolver_spec.rb index 7c1ad20b426e..e95a41a474d8 100644 --- a/ee/spec/graphql/resolvers/epic_resolver_spec.rb +++ b/ee/spec/graphql/resolvers/epic_resolver_spec.rb @@ -60,7 +60,7 @@ end end - context 'with subgroups', :nested_groups do + context 'with subgroups' do let(:sub_group) { create(:group, parent: group) } let(:iids) { [epic1, epic2].map(&:iid) } let!(:epic3) { create(:epic, group: sub_group, iid: epic1.iid) } diff --git a/ee/spec/helpers/ee/issuables_helper_spec.rb b/ee/spec/helpers/ee/issuables_helper_spec.rb index 434c2ff09e78..265fafd495dc 100644 --- a/ee/spec/helpers/ee/issuables_helper_spec.rb +++ b/ee/spec/helpers/ee/issuables_helper_spec.rb @@ -35,8 +35,7 @@ initialTitleText: epic.title, initialDescriptionHtml: '<p dir="auto">epic text</p>', initialDescriptionText: 'epic text', - initialTaskStatus: '0 of 0 tasks completed', - subepicsSupported: Gitlab::Database.postgresql? + initialTaskStatus: '0 of 0 tasks completed' } expect(helper.issuable_initial_data(epic)).to eq(expected_data) end diff --git a/ee/spec/helpers/ee/namespaces_helper_spec.rb b/ee/spec/helpers/ee/namespaces_helper_spec.rb index 6c45e1a8fb7c..78b0dcb02039 100644 --- a/ee/spec/helpers/ee/namespaces_helper_spec.rb +++ b/ee/spec/helpers/ee/namespaces_helper_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -describe EE::NamespacesHelper, :postgresql do +describe EE::NamespacesHelper do let!(:admin) { create(:admin) } let!(:admin_project_creation_level) { nil } let!(:admin_group) do diff --git a/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb b/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb index a214f98bdc6e..2dd8848e9b29 100644 --- a/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb +++ b/ee/spec/lib/ee/api/entities/geo_node_status_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe EE::API::Entities::GeoNodeStatus, :postgresql do +describe EE::API::Entities::GeoNodeStatus do include ::EE::GeoHelpers let(:geo_node_status) { build(:geo_node_status) } diff --git a/ee/spec/lib/gitlab/custom_file_templates_spec.rb b/ee/spec/lib/gitlab/custom_file_templates_spec.rb index 3763b2621c3c..fcea31fbf4a4 100644 --- a/ee/spec/lib/gitlab/custom_file_templates_spec.rb +++ b/ee/spec/lib/gitlab/custom_file_templates_spec.rb @@ -83,7 +83,7 @@ def template_files(prefix) end end - context 'in a subgroup', :nested_groups do + context 'in a subgroup' do set(:subgroup) { create(:group, parent: group) } set(:subproject) { create(:project, namespace: subgroup) } set(:subgroup_template_project) { create(:project, :custom_repo, namespace: subgroup, files: template_files('subgroup')) } @@ -151,7 +151,7 @@ def be_template(key, category) end end - context 'in a subgroup', :nested_groups do + context 'in a subgroup' do let(:subgroup) { create(:group, parent: group) } let(:subproject) { create(:project, namespace: subgroup) } let(:subgroup_template_project) { create(:project, :custom_repo, namespace: subgroup, files: template_files('subgroup')) } diff --git a/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb b/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb index 2392c3f7b836..d32eed52f5e4 100644 --- a/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb +++ b/ee/spec/lib/gitlab/database/load_balancing/host_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Database::LoadBalancing::Host, :postgresql do +describe Gitlab::Database::LoadBalancing::Host do let(:load_balancer) do Gitlab::Database::LoadBalancing::LoadBalancer.new(%w[localhost]) end diff --git a/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb index 347db221a480..4ad642be235d 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/daemon_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Daemon, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Daemon, :clean_gitlab_redis_shared_state do include ::EE::GeoHelpers include ExclusiveLeaseHelpers diff --git a/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb index 0e7c5b917f34..7f523945620f 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/event_logs_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::EventLogs, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::EventLogs, :clean_gitlab_redis_shared_state do subject { described_class.new } describe '#fetch_in_batches' do diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb index 949628ae20d2..4a9a770d8a83 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/cache_invalidation_event_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::CacheInvalidationEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::CacheInvalidationEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :cache_invalidation_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb index 69f9325cd946..0056d86ce266 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_attachments_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::HashedStorageAttachmentsEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::HashedStorageAttachmentsEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :hashed_storage_attachments_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb index 1432953a1357..965c2ae0d903 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/hashed_storage_migrated_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::HashedStorageMigratedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::HashedStorageMigratedEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :hashed_storage_migration_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb index f140b86decf9..a1de7cf500f7 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/job_artifact_deleted_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::JobArtifactDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::JobArtifactDeletedEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :job_artifact_deleted_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb index d8dd96f92159..45a9f6e51079 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/lfs_object_deleted_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::LfsObjectDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::LfsObjectDeletedEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :lfs_object_deleted_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb index 15895e69ab4c..0c4481624d92 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repositories_changed_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::RepositoriesChangedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::RepositoriesChangedEvent, :clean_gitlab_redis_shared_state do include ::EE::GeoHelpers let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb index adc68ac7b89c..58391434d797 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_created_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::RepositoryCreatedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::RepositoryCreatedEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:project) { create(:project) } let(:repository_created_event) { create(:geo_repository_created_event, project: project) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb index e9df8cfeca39..19f62b1b8ea7 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_deleted_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::RepositoryDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::RepositoryDeletedEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :deleted_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb index aa0419a6e7d6..9e70dae47c96 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_renamed_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::RepositoryRenamedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::RepositoryRenamedEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :renamed_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb index d22de7ed5e4e..28e9b24d4b6f 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/repository_updated_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::RepositoryUpdatedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::RepositoryUpdatedEvent, :clean_gitlab_redis_shared_state do include ::EE::GeoHelpers let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb index 74be80878243..2e0d8b0fcf76 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/reset_checksum_event_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::ResetChecksumEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::ResetChecksumEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:event_log) { create(:geo_event_log, :reset_checksum_event) } let!(:event_log_state) { create(:geo_event_log_state, event_id: event_log.id - 1) } diff --git a/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb b/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb index b97f28f79286..7f6a7d90e3a9 100644 --- a/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb +++ b/ee/spec/lib/gitlab/geo/log_cursor/events/upload_deleted_event_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::Geo::LogCursor::Events::UploadDeletedEvent, :postgresql, :clean_gitlab_redis_shared_state do +describe Gitlab::Geo::LogCursor::Events::UploadDeletedEvent, :clean_gitlab_redis_shared_state do let(:logger) { Gitlab::Geo::LogCursor::Logger.new(described_class, Logger::INFO) } let(:project) { create(:project) } let(:upload_deleted_event) { create(:geo_upload_deleted_event, project: project) } diff --git a/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb b/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb index dbc1591cdc6f..2962f6aff624 100644 --- a/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb +++ b/ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb @@ -166,7 +166,7 @@ def find(entity, opts) end end - context 'for a group with subgroups', :nested_groups do + context 'for a group with subgroups' do include_examples 'group tests' do let(:project) { create(:project, :public, group: create(:group, parent: entity)) } end diff --git a/ee/spec/lib/gitlab/usage_data_spec.rb b/ee/spec/lib/gitlab/usage_data_spec.rb index 466f23b5c4a7..0a3ae0a5395b 100644 --- a/ee/spec/lib/gitlab/usage_data_spec.rb +++ b/ee/spec/lib/gitlab/usage_data_spec.rb @@ -88,7 +88,7 @@ expect(count_data[:feature_flags]).to eq(1) end - it 'gathers deepest epic relationship level', :postgresql do + it 'gathers deepest epic relationship level' do expect(count_data.keys).to include(:epics_deepest_relationship_level) end diff --git a/ee/spec/models/burndown_spec.rb b/ee/spec/models/burndown_spec.rb index 67364ca32f8b..ee0a4ddabc51 100644 --- a/ee/spec/models/burndown_spec.rb +++ b/ee/spec/models/burndown_spec.rb @@ -169,7 +169,7 @@ let(:parent_group_milestone) { create(:milestone, project: nil, group: parent_group, start_date: start_date, due_date: due_date) } let(:group_milestone) { create(:milestone, group: group, start_date: start_date, due_date: due_date) } - context 'when nested group milestone', :nested_groups do + context 'when nested group milestone' do before do parent_group.add_developer(user) end diff --git a/ee/spec/models/concerns/elastic/project_spec.rb b/ee/spec/models/concerns/elastic/project_spec.rb index 93f387948839..20d1433a9c78 100644 --- a/ee/spec/models/concerns/elastic/project_spec.rb +++ b/ee/spec/models/concerns/elastic/project_spec.rb @@ -74,7 +74,7 @@ end end - it 'indexes only projects under the group', :nested_groups do + it 'indexes only projects under the group' do Sidekiq::Testing.inline! do create :project, name: 'test1', group: create(:group, parent: group) create :project, name: 'test2', description: 'awesome project' diff --git a/ee/spec/models/epic_spec.rb b/ee/spec/models/epic_spec.rb index b6b0d46540b1..7b966f398776 100644 --- a/ee/spec/models/epic_spec.rb +++ b/ee/spec/models/epic_spec.rb @@ -118,7 +118,7 @@ def epics(order_by) expect(epic.valid_parent?).to be_falsey end - it 'returns false when level is too deep', :nested_groups do + it 'returns false when level is too deep' do epic1 = create(:epic, group: group) epic2 = create(:epic, group: group, parent: epic1) epic3 = create(:epic, group: group, parent: epic2) @@ -142,7 +142,7 @@ def epics(order_by) expect(epic.valid_parent?).to be_truthy end - it 'returns false when total depth after adding would exceed limit', :nested_groups do + it 'returns false when total depth after adding would exceed limit' do child_epic2 = create(:epic, group: group, parent: child_epic1) child_epic3 = create(:epic, group: group, parent: child_epic2) child_epic4 = create(:epic, group: group, parent: child_epic3) @@ -166,7 +166,7 @@ def epics(order_by) expect(epic.valid_parent?).to be_truthy end - it 'returns false when total depth after adding would exceed limit', :nested_groups do + it 'returns false when total depth after adding would exceed limit' do root_epic.update(parent: create(:epic, group: group)) create(:epic, group: group, parent: child_epic1) @@ -185,14 +185,14 @@ def epics(order_by) expect(epic.valid_parent?).to be_falsey end - it 'returns false when child epic is parent of the given parent', :nested_groups do + it 'returns false when child epic is parent of the given parent' do epic1 = create(:epic, group: group, parent: epic) epic.parent = epic1 expect(epic.valid_parent?).to be_falsey end - it 'returns false when child epic is an ancestor of the given parent', :nested_groups do + it 'returns false when child epic is an ancestor of the given parent' do epic1 = create(:epic, group: group, parent: epic) epic2 = create(:epic, group: group, parent: epic1) epic.parent = epic2 @@ -207,7 +207,7 @@ def epics(order_by) let(:epic2) { create(:epic, group: group, parent: epic1) } let(:epic3) { create(:epic, group: group, parent: epic2) } - describe '#ancestors', :nested_groups do + describe '#ancestors' do it 'returns all ancestors for an epic' do expect(epic3.ancestors).to eq [epic2, epic1] end @@ -217,7 +217,7 @@ def epics(order_by) end end - describe '#descendants', :nested_groups do + describe '#descendants' do it 'returns all descendants for an epic' do expect(epic1.descendants).to match_array([epic2, epic3]) end @@ -576,7 +576,7 @@ def setup_control_group end end - describe '.deepest_relationship_level', :postgresql do + describe '.deepest_relationship_level' do context 'when there are no epics' do it 'returns nil' do expect(described_class.deepest_relationship_level).to be_nil diff --git a/ee/spec/models/gitlab_subscription_spec.rb b/ee/spec/models/gitlab_subscription_spec.rb index ada7d847bed4..ac74629d810e 100644 --- a/ee/spec/models/gitlab_subscription_spec.rb +++ b/ee/spec/models/gitlab_subscription_spec.rb @@ -48,14 +48,14 @@ expect(gitlab_subscription.seats_in_use).to eq(1) end - it 'also counts users from subgroups', :postgresql do + it 'also counts users from subgroups' do group.add_developer(user_1) subgroup_1.add_developer(user_2) expect(gitlab_subscription.seats_in_use).to eq(2) end - it 'does not count duplicated members', :postgresql do + it 'does not count duplicated members' do group.add_developer(user_1) subgroup_1.add_developer(user_2) subgroup_2.add_developer(user_2) diff --git a/ee/spec/models/namespace_spec.rb b/ee/spec/models/namespace_spec.rb index f45712fb5898..e402b6775e62 100644 --- a/ee/spec/models/namespace_spec.rb +++ b/ee/spec/models/namespace_spec.rb @@ -213,13 +213,11 @@ end end - if Group.supports_nested_objects? - context 'when license is applied to parent group' do - let(:child_group) { create :group, parent: group } + context 'when license is applied to parent group' do + let(:child_group) { create :group, parent: group } - it 'child group has feature available' do - expect(child_group.feature_available?(feature)).to be_truthy - end + it 'child group has feature available' do + expect(child_group.feature_available?(feature)).to be_truthy end end end @@ -460,7 +458,7 @@ it { is_expected.to be_truthy } - context 'when is subgroup', :nested_groups do + context 'when is subgroup' do before do namespace.parent = build(:group) end @@ -478,7 +476,7 @@ describe '#shared_runners_enabled?' do subject { namespace.shared_runners_enabled? } - context 'subgroup with shared runners enabled project', :nested_groups do + context 'subgroup with shared runners enabled project' do let(:subgroup) { create(:group, parent: namespace) } let!(:subproject) { create(:project, namespace: subgroup, shared_runners_enabled: true) } @@ -776,7 +774,7 @@ end end - describe '#membership_lock with subgroups', :nested_groups do + describe '#membership_lock with subgroups' do context 'when creating a subgroup' do let(:subgroup) { create(:group, parent: root_group) } diff --git a/ee/spec/models/pg_replication_slot_spec.rb b/ee/spec/models/pg_replication_slot_spec.rb index 541dc1ea91a3..8f334496eba3 100644 --- a/ee/spec/models/pg_replication_slot_spec.rb +++ b/ee/spec/models/pg_replication_slot_spec.rb @@ -1,13 +1,13 @@ require 'spec_helper' -describe PgReplicationSlot, :postgresql do +describe PgReplicationSlot do if Gitlab::Database.replication_slots_supported? describe 'with replication slot support' do it '#max_replication_slots' do expect(described_class.max_replication_slots).to be >= 0 end - skip_examples = PgReplicationSlot.max_replication_slots <= PgReplicationSlot.count + skip_examples = described_class.max_replication_slots <= described_class.count context 'with enough slots available' do before(:all) do skip('max_replication_slots too small') if skip_examples @@ -37,11 +37,11 @@ end it '#max_retained_wal' do - expect(PgReplicationSlot.max_retained_wal).not_to be_nil + expect(described_class.max_retained_wal).not_to be_nil end it '#slots_retained_bytes' do - slot = PgReplicationSlot.slots_retained_bytes.find {|x| x['slot_name'] == 'test_slot' } + slot = described_class.slots_retained_bytes.find {|x| x['slot_name'] == 'test_slot' } expect(slot).not_to be_nil expect(slot['retained_bytes']).to be_nil diff --git a/ee/spec/models/project_spec.rb b/ee/spec/models/project_spec.rb index 4902eae314c6..c82e3b310ba7 100644 --- a/ee/spec/models/project_spec.rb +++ b/ee/spec/models/project_spec.rb @@ -598,7 +598,7 @@ subject { project.root_namespace } - context 'when namespace has parent group', :nested_groups do + context 'when namespace has parent group' do let(:root_ancestor) { create(:group) } let(:parent) { create(:group, parent: root_ancestor) } @@ -616,7 +616,7 @@ end end - describe '#shared_runners_limit_namespace', :nested_groups do + describe '#shared_runners_limit_namespace' do set(:root_ancestor) { create(:group) } set(:group) { create(:group, parent: root_ancestor) } let(:project) { create(:project, namespace: group) } diff --git a/ee/spec/models/user_spec.rb b/ee/spec/models/user_spec.rb index 81baccd18836..849ca839d157 100644 --- a/ee/spec/models/user_spec.rb +++ b/ee/spec/models/user_spec.rb @@ -329,7 +329,7 @@ end end - describe '#available_subgroups_with_custom_project_templates', :postgresql do + describe '#available_subgroups_with_custom_project_templates' do let(:user) { create(:user) } context 'without Groups with custom project templates' do diff --git a/ee/spec/policies/group_policy_spec.rb b/ee/spec/policies/group_policy_spec.rb index 0d676bc25645..e87edba006f4 100644 --- a/ee/spec/policies/group_policy_spec.rb +++ b/ee/spec/policies/group_policy_spec.rb @@ -348,7 +348,7 @@ end end - describe 'private nested group use the highest access level from the group and inherited permissions', :nested_groups do + describe 'private nested group use the highest access level from the group and inherited permissions' do let(:nested_group) { create(:group, :private, parent: group) } before do diff --git a/ee/spec/presenters/epic_presenter_spec.rb b/ee/spec/presenters/epic_presenter_spec.rb index 4ddf12d8b22b..18194a2280cf 100644 --- a/ee/spec/presenters/epic_presenter_spec.rb +++ b/ee/spec/presenters/epic_presenter_spec.rb @@ -29,7 +29,7 @@ expect(presenter.show_data.keys).to match_array([:initial, :meta]) end - it 'has correct ancestors', :nested_groups do + it 'has correct ancestors' do metadata = JSON.parse(presenter.show_data[:meta]) ancestor_url = metadata['ancestors'].first['url'] @@ -48,7 +48,7 @@ expect(data[:meta]).to match_schema('epic_meta_data', dir: 'ee') end - it 'avoids N+1 database queries', :nested_groups do + it 'avoids N+1 database queries' do group1 = create(:group) group2 = create(:group, parent: group1) epic1 = create(:epic, group: group1) diff --git a/ee/spec/requests/api/geo_spec.rb b/ee/spec/requests/api/geo_spec.rb index e4412173ddfd..a04ccc638bcf 100644 --- a/ee/spec/requests/api/geo_spec.rb +++ b/ee/spec/requests/api/geo_spec.rb @@ -244,7 +244,7 @@ end end - describe 'POST /geo/status', :postgresql do + describe 'POST /geo/status' do let(:geo_base_request) { Gitlab::Geo::BaseRequest.new(scope: ::Gitlab::Geo::API_SCOPE) } let(:data) do diff --git a/ee/spec/requests/api/v3/github_spec.rb b/ee/spec/requests/api/v3/github_spec.rb index 5284ad0f7f23..6ec434c604dd 100644 --- a/ee/spec/requests/api/v3/github_spec.rb +++ b/ee/spec/requests/api/v3/github_spec.rb @@ -308,7 +308,7 @@ def expect_project_under_namespace(projects, namespace, user) end end - context 'nested group namespace', :nested_groups do + context 'nested group namespace' do let(:group) { create(:group, :nested) } let!(:parent_group_project) { create(:project, group: group.parent, name: 'parent_group_project') } let!(:child_group_project) { create(:project, group: group, name: 'child_group_project') } diff --git a/ee/spec/requests/groups_controller_spec.rb b/ee/spec/requests/groups_controller_spec.rb index cd67dc1bab71..ab0998324d24 100644 --- a/ee/spec/requests/groups_controller_spec.rb +++ b/ee/spec/requests/groups_controller_spec.rb @@ -91,7 +91,7 @@ end end - context 'subgroup', :nested_groups do + context 'subgroup' do let(:group) { create(:group, :nested) } it 'does not create ip restriction' do diff --git a/ee/spec/serializers/geo_project_registry_entity_spec.rb b/ee/spec/serializers/geo_project_registry_entity_spec.rb index 7112632fda6f..5cfaec6cf493 100644 --- a/ee/spec/serializers/geo_project_registry_entity_spec.rb +++ b/ee/spec/serializers/geo_project_registry_entity_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe GeoProjectRegistryEntity, :postgresql do +describe GeoProjectRegistryEntity do let(:registry) { create(:geo_project_registry, :synced) } let(:entity) do diff --git a/ee/spec/serializers/storage_shard_entity_spec.rb b/ee/spec/serializers/storage_shard_entity_spec.rb index 76a179ebff0f..a5f4679bc5ab 100644 --- a/ee/spec/serializers/storage_shard_entity_spec.rb +++ b/ee/spec/serializers/storage_shard_entity_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe StorageShardEntity, :postgresql do +describe StorageShardEntity do let(:entity) { described_class.new(StorageShard.new, request: double) } subject { entity.as_json } diff --git a/ee/spec/services/ci/register_job_service_spec.rb b/ee/spec/services/ci/register_job_service_spec.rb index 035b11dd8da9..a68a321bb672 100644 --- a/ee/spec/services/ci/register_job_service_spec.rb +++ b/ee/spec/services/ci/register_job_service_spec.rb @@ -86,7 +86,7 @@ end end - context 'when group is subgroup', :nested_groups do + context 'when group is subgroup' do let!(:root_ancestor) { create(:group) } let!(:group) { create(:group, parent: root_ancestor) } let!(:project) { create :project, shared_runners_enabled: true, group: group } diff --git a/ee/spec/services/epic_issues/create_service_spec.rb b/ee/spec/services/epic_issues/create_service_spec.rb index e3fa5cc996c3..2f520eaee795 100644 --- a/ee/spec/services/epic_issues/create_service_spec.rb +++ b/ee/spec/services/epic_issues/create_service_spec.rb @@ -152,7 +152,7 @@ def assign_issue(references) include_examples 'returns success' end - context 'when a link of an issue in a subgroup is given', :nested_groups do + context 'when a link of an issue in a subgroup is given' do let(:subgroup) { create(:group, parent: group) } let(:project2) { create(:project, group: subgroup) } let(:issue) { create(:issue, project: project2) } diff --git a/ee/spec/services/epic_links/create_service_spec.rb b/ee/spec/services/epic_links/create_service_spec.rb index 40dc6cf57d51..b75e5d6ea943 100644 --- a/ee/spec/services/epic_links/create_service_spec.rb +++ b/ee/spec/services/epic_links/create_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe EpicLinks::CreateService, :postgresql do +describe EpicLinks::CreateService do describe '#execute' do let(:group) { create(:group) } let(:user) { create(:user) } diff --git a/ee/spec/services/epic_links/destroy_service_spec.rb b/ee/spec/services/epic_links/destroy_service_spec.rb index 58e8f0ef57d4..dee3303c4929 100644 --- a/ee/spec/services/epic_links/destroy_service_spec.rb +++ b/ee/spec/services/epic_links/destroy_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe EpicLinks::DestroyService, :postgresql do +describe EpicLinks::DestroyService do describe '#execute' do let(:group) { create(:group) } let(:user) { create(:user) } diff --git a/ee/spec/services/epic_links/list_service_spec.rb b/ee/spec/services/epic_links/list_service_spec.rb index 06d9ec97f711..b95f99788989 100644 --- a/ee/spec/services/epic_links/list_service_spec.rb +++ b/ee/spec/services/epic_links/list_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe EpicLinks::ListService, :postgresql do +describe EpicLinks::ListService do let(:user) { create :user } let(:group) { create(:group, :public) } let(:parent_epic) { create(:epic, group: group) } diff --git a/ee/spec/services/groups/autocomplete_service_spec.rb b/ee/spec/services/groups/autocomplete_service_spec.rb index 8bcfbd35297f..c211bd86695c 100644 --- a/ee/spec/services/groups/autocomplete_service_spec.rb +++ b/ee/spec/services/groups/autocomplete_service_spec.rb @@ -54,7 +54,7 @@ def expect_labels_to_equal(labels, expected_labels) end end - describe '#issues', :nested_groups do + describe '#issues' do let(:project) { create(:project, group: group) } let(:sub_group_project) { create(:project, group: sub_group) } @@ -67,7 +67,7 @@ def expect_labels_to_equal(labels, expected_labels) end end - describe '#merge_requests', :nested_groups do + describe '#merge_requests' do let(:project) { create(:project, :repository, group: group) } let(:sub_group_project) { create(:project, :repository, group: sub_group) } @@ -104,10 +104,10 @@ def expect_labels_to_equal(labels, expected_labels) end it 'returns available commands' do - available_commands = [:todo, :unsubscribe, :award, :shrug, :tableflip, :cc, :title, :close] - if ::Epic.supports_nested_objects? - available_commands += [:child_epic, :remove_child_epic, :parent_epic, :remove_parent_epic] - end + available_commands = [ + :todo, :unsubscribe, :award, :shrug, :tableflip, :cc, :title, :close, + :child_epic, :remove_child_epic, :parent_epic, :remove_parent_epic + ] expect(subject.commands(epic).map { |c| c[:name] }).to match_array(available_commands) end @@ -131,7 +131,7 @@ def expect_labels_to_equal(labels, expected_labels) subgroup_milestone.update(group: public_subgroup) end - it 'returns milestones from groups and subgroups', :nested_groups do + it 'returns milestones from groups and subgroups' do subject = described_class.new(public_subgroup, user) expect(subject.milestones.map(&:iid)).to contain_exactly(group_milestone.iid, subgroup_milestone.iid) @@ -144,14 +144,14 @@ def expect_labels_to_equal(labels, expected_labels) expect(subject.milestones.map(&:title)).to contain_exactly(group_milestone.title) end - it 'returns milestones from groups and subgroups', :nested_groups do + it 'returns milestones from groups and subgroups' do milestones = described_class.new(sub_group, user).milestones expect(milestones.map(&:iid)).to contain_exactly(group_milestone.iid, subgroup_milestone.iid) expect(milestones.map(&:title)).to contain_exactly(group_milestone.title, subgroup_milestone.title) end - it 'returns only milestones that user can read', :nested_groups do + it 'returns only milestones that user can read' do user = create(:user) sub_group.add_guest(user) diff --git a/ee/spec/services/groups/participants_service_spec.rb b/ee/spec/services/groups/participants_service_spec.rb index d3ea80ff1433..5af9e7e054f1 100644 --- a/ee/spec/services/groups/participants_service_spec.rb +++ b/ee/spec/services/groups/participants_service_spec.rb @@ -47,7 +47,7 @@ def user_to_autocompletable(user) end end - describe '#group_members', :nested_groups do + describe '#group_members' do let(:parent_group) { create(:group) } let(:group) { create(:group, parent: parent_group) } let(:subgroup) { create(:group_with_members, parent: group) } diff --git a/ee/spec/services/groups/update_service_spec.rb b/ee/spec/services/groups/update_service_spec.rb index d46e658e3fb9..d88aaac871e3 100644 --- a/ee/spec/services/groups/update_service_spec.rb +++ b/ee/spec/services/groups/update_service_spec.rb @@ -108,7 +108,7 @@ def update_file_template_project_id(id) expect(group.errors[:file_template_project_id]).to include('is invalid') end - context 'in a subgroup', :nested_groups do + context 'in a subgroup' do let(:parent_group) { create(:group) } let(:hidden_project) { create(:project, :private, namespace: parent_group) } let(:group) { create(:group, parent: parent_group) } diff --git a/ee/spec/services/projects/create_from_template_service_spec.rb b/ee/spec/services/projects/create_from_template_service_spec.rb index 8b2d3bfee7a3..05d79738cf63 100644 --- a/ee/spec/services/projects/create_from_template_service_spec.rb +++ b/ee/spec/services/projects/create_from_template_service_spec.rb @@ -113,7 +113,7 @@ it_behaves_like 'creates project from custom template', nil it_behaves_like 'creates project from custom template', '' - describe 'creating project from a Group project template', :postgresql do + describe 'creating project from a Group project template' do let(:project_name) { project_template.name } let(:group_with_project_templates_id) { subgroup_1_2.id } let(:group2) { create(:group) } diff --git a/ee/spec/services/quick_actions/interpret_service_spec.rb b/ee/spec/services/quick_actions/interpret_service_spec.rb index bac72f4a9d9e..e6513d762f6e 100644 --- a/ee/spec/services/quick_actions/interpret_service_spec.rb +++ b/ee/spec/services/quick_actions/interpret_service_spec.rb @@ -298,7 +298,7 @@ end end - context 'child_epic command', :nested_groups do + context 'child_epic command' do let(:subgroup) { create(:group, parent: group) } let(:another_group) { create(:group) } let(:merge_request) { create(:merge_request, source_project: project) } @@ -427,7 +427,7 @@ end end - context 'remove_child_epic command', :nested_groups do + context 'remove_child_epic command' do let(:subgroup) { create(:group, parent: group) } let(:another_group) { create(:group) } let(:merge_request) { create(:merge_request, source_project: project) } diff --git a/ee/spec/services/update_build_minutes_service_spec.rb b/ee/spec/services/update_build_minutes_service_spec.rb index 6e5ae6cb4334..73088f709762 100644 --- a/ee/spec/services/update_build_minutes_service_spec.rb +++ b/ee/spec/services/update_build_minutes_service_spec.rb @@ -43,7 +43,7 @@ end end - context 'when namespace is subgroup', :nested_groups do + context 'when namespace is subgroup' do let(:root_ancestor) { create(:group, shared_runners_minutes_limit: 100) } let(:namespace) { create(:namespace, parent: root_ancestor) } diff --git a/ee/spec/support/shared_examples/models/member_shared_examples.rb b/ee/spec/support/shared_examples/models/member_shared_examples.rb index addb8e3c519a..862d39514e45 100644 --- a/ee/spec/support/shared_examples/models/member_shared_examples.rb +++ b/ee/spec/support/shared_examples/models/member_shared_examples.rb @@ -31,7 +31,7 @@ expect(member.errors.messages[:user]).to eq(['is not linked to a SAML account']) end - context 'subgroups', :nested_groups do + context 'subgroups' do let!(:subgroup) { create(:group, parent: group) } before do diff --git a/ee/spec/views/admin/groups/_form.html.haml_spec.rb b/ee/spec/views/admin/groups/_form.html.haml_spec.rb index 1fcef2bc2013..1b37df9c98fb 100644 --- a/ee/spec/views/admin/groups/_form.html.haml_spec.rb +++ b/ee/spec/views/admin/groups/_form.html.haml_spec.rb @@ -10,7 +10,7 @@ allow(view).to receive(:visibility_level) { group.visibility_level } end - context 'when sub group is used', :nested_groups do + context 'when sub group is used' do let(:root_ancestor) { create(:group) } let(:group) { build(:group, parent: root_ancestor) } diff --git a/ee/spec/views/groups/edit.html.haml_spec.rb b/ee/spec/views/groups/edit.html.haml_spec.rb index 0d8f15ec29d8..3f087facf90c 100644 --- a/ee/spec/views/groups/edit.html.haml_spec.rb +++ b/ee/spec/views/groups/edit.html.haml_spec.rb @@ -33,7 +33,7 @@ end end - context 'subgroup', :nested_groups do + context 'subgroup' do let(:group) { create(:group, :nested) } before do diff --git a/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb b/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb index a73906f84d2d..b2ad2fbd073a 100644 --- a/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb +++ b/ee/spec/workers/clear_shared_runners_minutes_worker_spec.rb @@ -48,7 +48,7 @@ end end - context 'when namespace has extra shared runner minutes', :postgresql do + context 'when namespace has extra shared runner minutes' do let!(:namespace) do create(:namespace, shared_runners_minutes_limit: 100, extra_shared_runners_minutes_limit: 10 ) end diff --git a/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb b/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb index ebf649c9a4a2..fe642054e294 100644 --- a/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb +++ b/ee/spec/workers/geo/repository_verification/primary/batch_worker_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Geo::RepositoryVerification::Primary::BatchWorker, :postgresql, :clean_gitlab_redis_cache do +describe Geo::RepositoryVerification::Primary::BatchWorker, :clean_gitlab_redis_cache do include ::EE::GeoHelpers set(:healthy_not_verified) { create(:project) } diff --git a/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb b/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb index a8ce9af53a87..a81bc7c0efe8 100644 --- a/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb +++ b/ee/spec/workers/geo/repository_verification/primary/shard_worker_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Geo::RepositoryVerification::Primary::ShardWorker, :postgresql, :clean_gitlab_redis_cache do +describe Geo::RepositoryVerification::Primary::ShardWorker, :clean_gitlab_redis_cache do include ::EE::GeoHelpers include ExclusiveLeaseHelpers diff --git a/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb b/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb index 65279c8de42a..9fafb4cb0fb2 100644 --- a/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb +++ b/ee/spec/workers/geo/repository_verification/primary/single_worker_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Geo::RepositoryVerification::Primary::SingleWorker, :postgresql, :clean_gitlab_redis_cache do +describe Geo::RepositoryVerification::Primary::SingleWorker, :clean_gitlab_redis_cache do include ::EE::GeoHelpers include ExclusiveLeaseHelpers diff --git a/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb b/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb index 7e8dfe61793e..d56d05ebe176 100644 --- a/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb +++ b/ee/spec/workers/geo/repository_verification/secondary/scheduler_worker_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Geo::RepositoryVerification::Secondary::SchedulerWorker, :postgresql, :clean_gitlab_redis_cache do +describe Geo::RepositoryVerification::Secondary::SchedulerWorker, :clean_gitlab_redis_cache do include ::EE::GeoHelpers set(:healthy_not_verified) { create(:project) } diff --git a/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb b/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb index a1b2ca229d25..7888ec41550d 100644 --- a/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb +++ b/ee/spec/workers/geo/repository_verification/secondary/single_worker_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Geo::RepositoryVerification::Secondary::SingleWorker, :postgresql, :clean_gitlab_redis_cache do +describe Geo::RepositoryVerification::Secondary::SingleWorker, :clean_gitlab_redis_cache do include ::EE::GeoHelpers include ExclusiveLeaseHelpers diff --git a/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb b/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb index 81062dae1e75..815b90c64831 100644 --- a/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb +++ b/ee/spec/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe UpdateMaxSeatsUsedForGitlabComSubscriptionsWorker, :postgresql do +describe UpdateMaxSeatsUsedForGitlabComSubscriptionsWorker do subject { described_class.new } let!(:user) { create(:user) } diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 10c81dd51047..300cb215af2e 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -366,10 +366,7 @@ class Group < BasicGroupDetails end expose :request_access_enabled expose :full_name, :full_path - - if ::Group.supports_nested_objects? - expose :parent_id - end + expose :parent_id expose :custom_attributes, using: 'API::Entities::CustomAttribute', if: :with_custom_attributes diff --git a/lib/api/groups.rb b/lib/api/groups.rb index d0c7c4ade43e..ef95a9e5d8f4 100644 --- a/lib/api/groups.rb +++ b/lib/api/groups.rb @@ -114,10 +114,7 @@ def present_groups(params, groups) params do requires :name, type: String, desc: 'The name of the group' requires :path, type: String, desc: 'The path of the group' - - if ::Group.supports_nested_objects? - optional :parent_id, type: Integer, desc: 'The parent group id for creating nested group' - end + optional :parent_id, type: Integer, desc: 'The parent group id for creating nested group' use :optional_params end diff --git a/lib/gitlab/object_hierarchy.rb b/lib/gitlab/object_hierarchy.rb index e3d67f40ec81..4f2f330ae3f8 100644 --- a/lib/gitlab/object_hierarchy.rb +++ b/lib/gitlab/object_hierarchy.rb @@ -32,11 +32,6 @@ def descendants # Returns the maximum depth starting from the base # A base object with no children has a maximum depth of `1` def max_descendants_depth - unless hierarchy_supported? - # This makes the return value consistent with the case where hierarchy is supported - return descendants_base.exists? ? 1 : nil - end - base_and_descendants(with_depth: true).maximum(DEPTH_COLUMN) end @@ -66,8 +61,6 @@ def ancestors(upto: nil, hierarchy_order: nil) # each parent. # rubocop: disable CodeReuse/ActiveRecord def base_and_ancestors(upto: nil, hierarchy_order: nil) - return ancestors_base unless hierarchy_supported? - recursive_query = base_and_ancestors_cte(upto, hierarchy_order).apply_to(model.all) recursive_query = recursive_query.order(depth: hierarchy_order) if hierarchy_order @@ -81,10 +74,6 @@ def base_and_ancestors(upto: nil, hierarchy_order: nil) # When `with_depth` is `true`, a `depth` column is included where it starts with `1` for the base objects # and incremented as we go down the descendant tree def base_and_descendants(with_depth: false) - unless hierarchy_supported? - return with_depth ? descendants_base.select("1 as #{DEPTH_COLUMN}", objects_table[Arel.star]) : descendants_base - end - read_only(base_and_descendants_cte(with_depth: with_depth).apply_to(model.all)) end @@ -112,8 +101,6 @@ def base_and_descendants(with_depth: false) # If nested objects are not supported, ancestors_base is returned. # rubocop: disable CodeReuse/ActiveRecord def all_objects - return ancestors_base unless hierarchy_supported? - ancestors = base_and_ancestors_cte descendants = base_and_descendants_cte @@ -135,10 +122,6 @@ def all_objects private - def hierarchy_supported? - Gitlab::Database.postgresql? - end - # rubocop: disable CodeReuse/ActiveRecord def base_and_ancestors_cte(stop_id = nil, hierarchy_order = nil) cte = SQL::RecursiveCTE.new(:base_and_ancestors) diff --git a/lib/gitlab/project_authorizations.rb b/lib/gitlab/project_authorizations.rb new file mode 100644 index 000000000000..a9270cd536e0 --- /dev/null +++ b/lib/gitlab/project_authorizations.rb @@ -0,0 +1,121 @@ +# frozen_string_literal: true + +# This class relies on Common Table Expressions to efficiently get all data, +# including data for nested groups. +module Gitlab + class ProjectAuthorizations + attr_reader :user + + # user - The User object for which to calculate the authorizations. + def initialize(user) + @user = user + end + + def calculate + cte = recursive_cte + cte_alias = cte.table.alias(Group.table_name) + projects = Project.arel_table + links = ProjectGroupLink.arel_table + + relations = [ + # The project a user has direct access to. + user.projects.select_for_project_authorization, + + # The personal projects of the user. + user.personal_projects.select_as_maintainer_for_project_authorization, + + # Projects that belong directly to any of the groups the user has + # access to. + Namespace + .unscoped + .select([alias_as_column(projects[:id], 'project_id'), + cte_alias[:access_level]]) + .from(cte_alias) + .joins(:projects), + + # Projects shared with any of the namespaces the user has access to. + Namespace + .unscoped + .select([ + links[:project_id], + least(cte_alias[:access_level], links[:group_access], 'access_level') + ]) + .from(cte_alias) + .joins('INNER JOIN project_group_links ON project_group_links.group_id = namespaces.id') + .joins('INNER JOIN projects ON projects.id = project_group_links.project_id') + .joins('INNER JOIN namespaces p_ns ON p_ns.id = projects.namespace_id') + .where('p_ns.share_with_group_lock IS FALSE') + ] + + ProjectAuthorization + .unscoped + .with + .recursive(cte.to_arel) + .select_from_union(relations) + end + + private + + # Builds a recursive CTE that gets all the groups the current user has + # access to, including any nested groups. + def recursive_cte + cte = Gitlab::SQL::RecursiveCTE.new(:namespaces_cte) + members = Member.arel_table + namespaces = Namespace.arel_table + + # Namespaces the user is a member of. + cte << user.groups + .select([namespaces[:id], members[:access_level]]) + .except(:order) + + # Sub groups of any groups the user is a member of. + cte << Group.select([ + namespaces[:id], + greatest(members[:access_level], cte.table[:access_level], 'access_level') + ]) + .joins(join_cte(cte)) + .joins(join_members) + .except(:order) + + cte + end + + # Builds a LEFT JOIN to join optional memberships onto the CTE. + def join_members + members = Member.arel_table + namespaces = Namespace.arel_table + + cond = members[:source_id] + .eq(namespaces[:id]) + .and(members[:source_type].eq('Namespace')) + .and(members[:requested_at].eq(nil)) + .and(members[:user_id].eq(user.id)) + + Arel::Nodes::OuterJoin.new(members, Arel::Nodes::On.new(cond)) + end + + # Builds an INNER JOIN to join namespaces onto the CTE. + def join_cte(cte) + namespaces = Namespace.arel_table + cond = cte.table[:id].eq(namespaces[:parent_id]) + + Arel::Nodes::InnerJoin.new(cte.table, Arel::Nodes::On.new(cond)) + end + + def greatest(left, right, column_alias) + sql_function('GREATEST', [left, right], column_alias) + end + + def least(left, right, column_alias) + sql_function('LEAST', [left, right], column_alias) + end + + def sql_function(name, args, column_alias) + alias_as_column(Arel::Nodes::NamedFunction.new(name, args), column_alias) + end + + def alias_as_column(value, alias_to) + Arel::Nodes::As.new(value, Arel::Nodes::SqlLiteral.new(alias_to)) + end + end +end diff --git a/lib/gitlab/project_authorizations/with_nested_groups.rb b/lib/gitlab/project_authorizations/with_nested_groups.rb deleted file mode 100644 index 2372a316ab0f..000000000000 --- a/lib/gitlab/project_authorizations/with_nested_groups.rb +++ /dev/null @@ -1,125 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module ProjectAuthorizations - # Calculating new project authorizations when supporting nested groups. - # - # This class relies on Common Table Expressions to efficiently get all data, - # including data for nested groups. As a result this class can only be used - # on PostgreSQL. - class WithNestedGroups - attr_reader :user - - # user - The User object for which to calculate the authorizations. - def initialize(user) - @user = user - end - - def calculate - cte = recursive_cte - cte_alias = cte.table.alias(Group.table_name) - projects = Project.arel_table - links = ProjectGroupLink.arel_table - - relations = [ - # The project a user has direct access to. - user.projects.select_for_project_authorization, - - # The personal projects of the user. - user.personal_projects.select_as_maintainer_for_project_authorization, - - # Projects that belong directly to any of the groups the user has - # access to. - Namespace - .unscoped - .select([alias_as_column(projects[:id], 'project_id'), - cte_alias[:access_level]]) - .from(cte_alias) - .joins(:projects), - - # Projects shared with any of the namespaces the user has access to. - Namespace - .unscoped - .select([links[:project_id], - least(cte_alias[:access_level], - links[:group_access], - 'access_level')]) - .from(cte_alias) - .joins('INNER JOIN project_group_links ON project_group_links.group_id = namespaces.id') - .joins('INNER JOIN projects ON projects.id = project_group_links.project_id') - .joins('INNER JOIN namespaces p_ns ON p_ns.id = projects.namespace_id') - .where('p_ns.share_with_group_lock IS FALSE') - ] - - ProjectAuthorization - .unscoped - .with - .recursive(cte.to_arel) - .select_from_union(relations) - end - - private - - # Builds a recursive CTE that gets all the groups the current user has - # access to, including any nested groups. - def recursive_cte - cte = Gitlab::SQL::RecursiveCTE.new(:namespaces_cte) - members = Member.arel_table - namespaces = Namespace.arel_table - - # Namespaces the user is a member of. - cte << user.groups - .select([namespaces[:id], members[:access_level]]) - .except(:order) - - # Sub groups of any groups the user is a member of. - cte << Group.select([namespaces[:id], - greatest(members[:access_level], - cte.table[:access_level], 'access_level')]) - .joins(join_cte(cte)) - .joins(join_members) - .except(:order) - - cte - end - - # Builds a LEFT JOIN to join optional memberships onto the CTE. - def join_members - members = Member.arel_table - namespaces = Namespace.arel_table - - cond = members[:source_id] - .eq(namespaces[:id]) - .and(members[:source_type].eq('Namespace')) - .and(members[:requested_at].eq(nil)) - .and(members[:user_id].eq(user.id)) - - Arel::Nodes::OuterJoin.new(members, Arel::Nodes::On.new(cond)) - end - - # Builds an INNER JOIN to join namespaces onto the CTE. - def join_cte(cte) - namespaces = Namespace.arel_table - cond = cte.table[:id].eq(namespaces[:parent_id]) - - Arel::Nodes::InnerJoin.new(cte.table, Arel::Nodes::On.new(cond)) - end - - def greatest(left, right, column_alias) - sql_function('GREATEST', [left, right], column_alias) - end - - def least(left, right, column_alias) - sql_function('LEAST', [left, right], column_alias) - end - - def sql_function(name, args, column_alias) - alias_as_column(Arel::Nodes::NamedFunction.new(name, args), column_alias) - end - - def alias_as_column(value, alias_to) - Arel::Nodes::As.new(value, Arel::Nodes::SqlLiteral.new(alias_to)) - end - end - end -end diff --git a/lib/gitlab/project_authorizations/without_nested_groups.rb b/lib/gitlab/project_authorizations/without_nested_groups.rb deleted file mode 100644 index 50b41b176496..000000000000 --- a/lib/gitlab/project_authorizations/without_nested_groups.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module ProjectAuthorizations - # Calculating new project authorizations when not supporting nested groups. - class WithoutNestedGroups - attr_reader :user - - # user - The User object for which to calculate the authorizations. - def initialize(user) - @user = user - end - - def calculate - relations = [ - # Projects the user is a direct member of - user.projects.select_for_project_authorization, - - # Personal projects - user.personal_projects.select_as_maintainer_for_project_authorization, - - # Projects of groups the user is a member of - user.groups_projects.select_for_project_authorization, - - # Projects shared with groups the user is a member of - user.groups.joins(:shared_projects).select_for_project_authorization - ] - - ProjectAuthorization - .unscoped - .select_from_union(relations) - end - end - end -end diff --git a/spec/controllers/boards/issues_controller_spec.rb b/spec/controllers/boards/issues_controller_spec.rb index 0db58fbefc1a..d54f7ad33cf0 100644 --- a/spec/controllers/boards/issues_controller_spec.rb +++ b/spec/controllers/boards/issues_controller_spec.rb @@ -85,7 +85,7 @@ expect { list_issues(user: user, board: group_board, list: list3) }.not_to exceed_query_limit(control_count + (2 * 8 - 1)) end - it 'avoids N+1 database queries when adding a subgroup, project, and issue', :nested_groups do + it 'avoids N+1 database queries when adding a subgroup, project, and issue' do create(:project, group: sub_group_1) create(:labeled_issue, project: project, labels: [development]) control_count = ActiveRecord::QueryRecorder.new { list_issues(user: user, board: group_board, list: list3) }.count diff --git a/spec/controllers/concerns/group_tree_spec.rb b/spec/controllers/concerns/group_tree_spec.rb index aa3cd690e3fd..835c3d9b3af6 100644 --- a/spec/controllers/concerns/group_tree_spec.rb +++ b/spec/controllers/concerns/group_tree_spec.rb @@ -30,7 +30,7 @@ def index expect(assigns(:groups)).to contain_exactly(other_group) end - context 'for subgroups', :nested_groups do + context 'for subgroups' do it 'only renders root groups when no parent was given' do create(:group, :public, parent: group) @@ -85,7 +85,7 @@ def index expect(json_response.first['id']).to eq(group.id) end - context 'nested groups', :nested_groups do + context 'nested groups' do it 'expands the tree when filtering' do subgroup = create(:group, :public, parent: group, name: 'filter') diff --git a/spec/controllers/dashboard/groups_controller_spec.rb b/spec/controllers/dashboard/groups_controller_spec.rb index 48373d29412d..20a0951423bb 100644 --- a/spec/controllers/dashboard/groups_controller_spec.rb +++ b/spec/controllers/dashboard/groups_controller_spec.rb @@ -26,7 +26,7 @@ expect(assigns(:groups)).to contain_exactly(member_of_group) end - context 'when rendering an expanded hierarchy with public groups you are not a member of', :nested_groups do + context 'when rendering an expanded hierarchy with public groups you are not a member of' do let!(:top_level_result) { create(:group, name: 'chef-top') } let!(:top_level_a) { create(:group, name: 'top-a') } let!(:sub_level_result_a) { create(:group, name: 'chef-sub-a', parent: top_level_a) } diff --git a/spec/controllers/groups/children_controller_spec.rb b/spec/controllers/groups/children_controller_spec.rb index 02fb971bd9a0..bced300a24cc 100644 --- a/spec/controllers/groups/children_controller_spec.rb +++ b/spec/controllers/groups/children_controller_spec.rb @@ -46,7 +46,7 @@ end end - context 'for subgroups', :nested_groups do + context 'for subgroups' do let!(:public_subgroup) { create(:group, :public, parent: group) } let!(:private_subgroup) { create(:group, :private, parent: group) } let!(:public_project) { create(:project, :public, namespace: group) } @@ -292,7 +292,7 @@ def get_filtered_list end end - context 'with subgroups and projects', :nested_groups do + context 'with subgroups and projects' do let!(:first_page_subgroups) { create_list(:group, per_page, :public, parent: group) } let!(:other_subgroup) { create(:group, :public, parent: group) } let!(:next_page_projects) { create_list(:project, per_page, :public, namespace: group) } diff --git a/spec/controllers/groups/labels_controller_spec.rb b/spec/controllers/groups/labels_controller_spec.rb index 3cc6fc6f066a..98a4c50fc495 100644 --- a/spec/controllers/groups/labels_controller_spec.rb +++ b/spec/controllers/groups/labels_controller_spec.rb @@ -24,7 +24,7 @@ expect(label_ids).to match_array([label_1.title, group_label_1.title]) end - context 'with ancestor group', :nested_groups do + context 'with ancestor group' do set(:subgroup) { create(:group, parent: group) } set(:subgroup_label_1) { create(:group_label, group: subgroup, title: 'subgroup_label_1') } @@ -32,7 +32,7 @@ subgroup.add_owner(user) end - it 'returns ancestor group labels', :nested_groups do + it 'returns ancestor group labels' do get :index, params: { group_id: subgroup, include_ancestor_groups: true, only_group_labels: true }, format: :json label_ids = json_response.map {|label| label['title']} diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb index d2faef5b12b4..404e61c5271e 100644 --- a/spec/controllers/groups_controller_spec.rb +++ b/spec/controllers/groups_controller_spec.rb @@ -89,7 +89,7 @@ end describe 'GET #new' do - context 'when creating subgroups', :nested_groups do + context 'when creating subgroups' do [true, false].each do |can_create_group_status| context "and can_create_group is #{can_create_group_status}" do before do @@ -166,7 +166,7 @@ end end - context 'when creating subgroups', :nested_groups do + context 'when creating subgroups' do [true, false].each do |can_create_group_status| context "and can_create_group is #{can_create_group_status}" do context 'and logged in as Owner' do @@ -584,7 +584,7 @@ def group_moved_message(redirect_route, group) end end - describe 'PUT transfer', :postgresql do + describe 'PUT transfer' do before do sign_in(user) end diff --git a/spec/controllers/import/bitbucket_controller_spec.rb b/spec/controllers/import/bitbucket_controller_spec.rb index 64a665027328..38388c217497 100644 --- a/spec/controllers/import/bitbucket_controller_spec.rb +++ b/spec/controllers/import/bitbucket_controller_spec.rb @@ -231,7 +231,7 @@ def assign_session_tokens end end - context 'user has chosen an existing nested namespace and name for the project', :postgresql do + context 'user has chosen an existing nested namespace and name for the project' do let(:parent_namespace) { create(:group, name: 'foo') } let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) } let(:test_name) { 'test_name' } @@ -250,7 +250,7 @@ def assign_session_tokens end end - context 'user has chosen a non-existent nested namespaces and name for the project', :postgresql do + context 'user has chosen a non-existent nested namespaces and name for the project' do let(:test_name) { 'test_name' } it 'takes the selected namespace and name' do @@ -281,7 +281,7 @@ def assign_session_tokens end end - context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do + context 'user has chosen existent and non-existent nested namespaces and name for the project' do let(:test_name) { 'test_name' } let!(:parent_namespace) { create(:group, name: 'foo') } diff --git a/spec/controllers/import/gitlab_controller_spec.rb b/spec/controllers/import/gitlab_controller_spec.rb index 5af7572e74ea..e465eca6c713 100644 --- a/spec/controllers/import/gitlab_controller_spec.rb +++ b/spec/controllers/import/gitlab_controller_spec.rb @@ -197,7 +197,7 @@ def assign_session_token end end - context 'user has chosen an existing nested namespace for the project', :postgresql do + context 'user has chosen an existing nested namespace for the project' do let(:parent_namespace) { create(:group, name: 'foo') } let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) } @@ -215,7 +215,7 @@ def assign_session_token end end - context 'user has chosen a non-existent nested namespaces for the project', :postgresql do + context 'user has chosen a non-existent nested namespaces for the project' do let(:test_name) { 'test_name' } it 'takes the selected namespace and name' do @@ -246,7 +246,7 @@ def assign_session_token end end - context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do + context 'user has chosen existent and non-existent nested namespaces and name for the project' do let(:test_name) { 'test_name' } let!(:parent_namespace) { create(:group, name: 'foo') } diff --git a/spec/controllers/projects/milestones_controller_spec.rb b/spec/controllers/projects/milestones_controller_spec.rb index 767cee7d54ac..9b2025b836c7 100644 --- a/spec/controllers/projects/milestones_controller_spec.rb +++ b/spec/controllers/projects/milestones_controller_spec.rb @@ -115,7 +115,7 @@ def render_index(project:, page:, search_title: '') end end - context 'with nested groups', :nested_groups do + context 'with nested groups' do let!(:subgroup) { create(:group, :public, parent: group) } let!(:subgroup_milestone) { create(:milestone, group: subgroup) } diff --git a/spec/features/dashboard/groups_list_spec.rb b/spec/features/dashboard/groups_list_spec.rb index fb76e2b00146..bdab3c632443 100644 --- a/spec/features/dashboard/groups_list_spec.rb +++ b/spec/features/dashboard/groups_list_spec.rb @@ -27,7 +27,7 @@ def click_group_caret(group) expect(page).not_to have_content(another_group.name) end - it 'shows subgroups the user is member of', :nested_groups do + it 'shows subgroups the user is member of' do group.add_owner(user) nested_group.add_owner(user) @@ -40,7 +40,7 @@ def click_group_caret(group) expect(page).to have_content(nested_group.name) end - context 'when filtering groups', :nested_groups do + context 'when filtering groups' do before do group.add_owner(user) nested_group.add_owner(user) @@ -79,7 +79,7 @@ def click_group_caret(group) end end - context 'with subgroups', :nested_groups do + context 'with subgroups' do let!(:subgroup) { create(:group, :public, parent: group) } before do diff --git a/spec/features/groups/empty_states_spec.rb b/spec/features/groups/empty_states_spec.rb index e4eb0d355d16..3fbc0f78d38b 100644 --- a/spec/features/groups/empty_states_spec.rb +++ b/spec/features/groups/empty_states_spec.rb @@ -110,7 +110,7 @@ end context 'group without a project' do - context 'group has a subgroup', :nested_groups do + context 'group has a subgroup' do let(:subgroup) { create(:group, parent: group) } let(:subgroup_project) { create(:project, namespace: subgroup) } diff --git a/spec/features/groups/group_settings_spec.rb b/spec/features/groups/group_settings_spec.rb index 676769c25fe2..257aeae7e23b 100644 --- a/spec/features/groups/group_settings_spec.rb +++ b/spec/features/groups/group_settings_spec.rb @@ -121,7 +121,7 @@ expect(find(:css, '.group-root-path').text).to eq(root_url) end - it 'has a parent group URL label for a subgroup group', :postgresql do + it 'has a parent group URL label for a subgroup group' do subgroup = create(:group, parent: group) visit edit_group_path(subgroup) diff --git a/spec/features/groups/issues_spec.rb b/spec/features/groups/issues_spec.rb index 0ada530781c4..a16004c79cae 100644 --- a/spec/features/groups/issues_spec.rb +++ b/spec/features/groups/issues_spec.rb @@ -50,7 +50,7 @@ end end - context 'issues list', :nested_groups do + context 'issues list' do let(:subgroup) { create(:group, parent: group) } let(:subgroup_project) { create(:project, :public, group: subgroup)} let(:user_in_group) { create(:group_member, :maintainer, user: create(:user), group: group ).user } diff --git a/spec/features/groups/members/list_members_spec.rb b/spec/features/groups/members/list_members_spec.rb index 4ba7161601e7..ffff755793ff 100644 --- a/spec/features/groups/members/list_members_spec.rb +++ b/spec/features/groups/members/list_members_spec.rb @@ -13,7 +13,7 @@ sign_in(user1) end - it 'show members from current group and parent', :nested_groups do + it 'show members from current group and parent' do group.add_developer(user1) nested_group.add_developer(user2) @@ -23,7 +23,7 @@ expect(second_row.text).to include(user2.name) end - it 'show user once if member of both current group and parent', :nested_groups do + it 'show user once if member of both current group and parent' do group.add_developer(user1) nested_group.add_developer(user1) diff --git a/spec/features/groups/share_lock_spec.rb b/spec/features/groups/share_lock_spec.rb index 704d9f128889..86b523fbdd9e 100644 --- a/spec/features/groups/share_lock_spec.rb +++ b/spec/features/groups/share_lock_spec.rb @@ -9,7 +9,7 @@ sign_in(root_owner) end - context 'with a subgroup', :nested_groups do + context 'with a subgroup' do let!(:subgroup) { create(:group, parent: root_group) } context 'when enabling the parent group share with group lock' do diff --git a/spec/features/groups/show_spec.rb b/spec/features/groups/show_spec.rb index bed998a08591..0d78bd23973e 100644 --- a/spec/features/groups/show_spec.rb +++ b/spec/features/groups/show_spec.rb @@ -75,11 +75,7 @@ sign_in(owner) end - context 'when subgroups are supported', :nested_groups do - before do - allow(Group).to receive(:supports_nested_objects?) { true } - end - + context 'when subgroups are supported' do it 'allows creating subgroups' do visit path @@ -87,19 +83,6 @@ .to have_css("li[data-text='New subgroup']", visible: false) end end - - context 'when subgroups are not supported' do - before do - allow(Group).to receive(:supports_nested_objects?) { false } - end - - it 'does not allow creating subgroups' do - visit path - - expect(page) - .not_to have_selector("li[data-text='New subgroup']", visible: false) - end - end end context 'for maintainers' do @@ -107,11 +90,7 @@ sign_in(maintainer) end - context 'when subgroups are supported', :nested_groups do - before do - allow(Group).to receive(:supports_nested_objects?) { true } - end - + context 'when subgroups are supported' do context 'when subgroup_creation_level is set to maintainers' do before do relaxed_group.add_maintainer(maintainer) @@ -141,19 +120,6 @@ end end end - - context 'when subgroups are not supported' do - before do - allow(Group).to receive(:supports_nested_objects?) { false } - end - - it 'does not allow creating subgroups' do - visit path - - expect(page) - .not_to have_selector("li[data-text='New subgroup']", visible: false) - end - end end end diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb index 8e7f78cab81d..ad645643919b 100644 --- a/spec/features/groups_spec.rb +++ b/spec/features/groups_spec.rb @@ -105,7 +105,7 @@ end end - describe 'create a nested group', :nested_groups, :js do + describe 'create a nested group', :js do let(:group) { create(:group, path: 'foo') } context 'as admin' do @@ -231,7 +231,7 @@ end end - describe 'group page with nested groups', :nested_groups, :js do + describe 'group page with nested groups', :js do let!(:group) { create(:group) } let!(:nested_group) { create(:group, parent: group) } let!(:project) { create(:project, namespace: group) } diff --git a/spec/features/ide_spec.rb b/spec/features/ide_spec.rb index 6eb59ef72c25..65989c36c1e4 100644 --- a/spec/features/ide_spec.rb +++ b/spec/features/ide_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe 'IDE', :js do - describe 'sub-groups', :nested_groups do + describe 'sub-groups' do let(:user) { create(:user) } let(:group) { create(:group) } let(:subgroup) { create(:group, parent: group) } diff --git a/spec/features/import/manifest_import_spec.rb b/spec/features/import/manifest_import_spec.rb index a90cdd8d9200..90b499efd72f 100644 --- a/spec/features/import/manifest_import_spec.rb +++ b/spec/features/import/manifest_import_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe 'Import multiple repositories by uploading a manifest file', :js, :postgresql do +describe 'Import multiple repositories by uploading a manifest file', :js do include Select2Helper let(:user) { create(:admin) } diff --git a/spec/features/labels_hierarchy_spec.rb b/spec/features/labels_hierarchy_spec.rb index 489651fea159..45bd2218ee6c 100644 --- a/spec/features/labels_hierarchy_spec.rb +++ b/spec/features/labels_hierarchy_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe 'Labels Hierarchy', :js, :nested_groups do +describe 'Labels Hierarchy', :js do include FilteredSearchHelpers let!(:user) { create(:user) } diff --git a/spec/features/projects/members/invite_group_spec.rb b/spec/features/projects/members/invite_group_spec.rb index 7432c600c1ec..c5423ec46626 100644 --- a/spec/features/projects/members/invite_group_spec.rb +++ b/spec/features/projects/members/invite_group_spec.rb @@ -58,7 +58,7 @@ end end - context 'for a project in a subgroup', :nested_groups do + context 'for a project in a subgroup' do let!(:group_to_share_with) { create(:group) } let(:root_group) { create(:group) } let(:subgroup) { create(:group, parent: root_group) } @@ -181,7 +181,7 @@ group_to_share_with.add_maintainer(maintainer) end - it 'the groups dropdown does not show ancestors', :nested_groups do + it 'the groups dropdown does not show ancestors' do visit project_settings_members_path(project) click_on 'invite-group-tab' diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb index 7602935b47e0..8cdaed43fbc2 100644 --- a/spec/features/projects/new_project_spec.rb +++ b/spec/features/projects/new_project_spec.rb @@ -294,7 +294,7 @@ end end - context 'from manifest file', :postgresql do + context 'from manifest file' do before do first('.import_manifest').click end diff --git a/spec/features/projects/settings/pipelines_settings_spec.rb b/spec/features/projects/settings/pipelines_settings_spec.rb index bf0c0de89b21..31fdd3082926 100644 --- a/spec/features/projects/settings/pipelines_settings_spec.rb +++ b/spec/features/projects/settings/pipelines_settings_spec.rb @@ -126,7 +126,7 @@ end end - context 'when auto devops is turned on group parent level', :nested_groups do + context 'when auto devops is turned on group parent level' do before do group = create(:group, parent: create(:group, :auto_devops_enabled)) project.update!(namespace: group) diff --git a/spec/features/projects/settings/user_transfers_a_project_spec.rb b/spec/features/projects/settings/user_transfers_a_project_spec.rb index 2fdbc04fa621..9af2e47a3347 100644 --- a/spec/features/projects/settings/user_transfers_a_project_spec.rb +++ b/spec/features/projects/settings/user_transfers_a_project_spec.rb @@ -68,7 +68,7 @@ def transfer_project(project, group, confirm: true) end end - context 'when nested groups are available', :nested_groups do + context 'when nested groups are available' do it 'allows transferring a project to a subgroup' do subgroup = create(:group, parent: group) diff --git a/spec/features/projects/sub_group_issuables_spec.rb b/spec/features/projects/sub_group_issuables_spec.rb index 50e7e934cf6c..8afbcf72ca7d 100644 --- a/spec/features/projects/sub_group_issuables_spec.rb +++ b/spec/features/projects/sub_group_issuables_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe 'Subgroup Issuables', :js, :nested_groups do +describe 'Subgroup Issuables', :js do let!(:group) { create(:group, name: 'group') } let!(:subgroup) { create(:group, parent: group, name: 'subgroup') } let!(:project) { create(:project, namespace: subgroup, name: 'project') } diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb index c0932539131f..19262a635ac7 100644 --- a/spec/features/projects/user_creates_project_spec.rb +++ b/spec/features/projects/user_creates_project_spec.rb @@ -26,7 +26,7 @@ expect(page).to have_content(project.url_to_repo) end - context 'in a subgroup they do not own', :nested_groups do + context 'in a subgroup they do not own' do let(:parent) { create(:group) } let!(:subgroup) { create(:group, parent: parent) } diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index b51127584754..d1e2d17e9cc3 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -314,7 +314,7 @@ end end - context 'for subgroups', :js, :nested_groups do + context 'for subgroups', :js do let(:group) { create(:group) } let(:subgroup) { create(:group, parent: group) } let(:project) { create(:project, :repository, group: subgroup) } diff --git a/spec/finders/autocomplete/users_finder_spec.rb b/spec/finders/autocomplete/users_finder_spec.rb index bcde115b1a66..f3b54ca0461d 100644 --- a/spec/finders/autocomplete/users_finder_spec.rb +++ b/spec/finders/autocomplete/users_finder_spec.rb @@ -50,7 +50,7 @@ it { is_expected.to match_array([user1]) } end - context 'when passed a subgroup', :nested_groups do + context 'when passed a subgroup' do let(:grandparent) { create(:group, :public) } let(:parent) { create(:group, :public, parent: grandparent) } let(:child) { create(:group, :public, parent: parent) } diff --git a/spec/finders/cluster_ancestors_finder_spec.rb b/spec/finders/cluster_ancestors_finder_spec.rb index 750042b6b542..4aedb41d4460 100644 --- a/spec/finders/cluster_ancestors_finder_spec.rb +++ b/spec/finders/cluster_ancestors_finder_spec.rb @@ -32,7 +32,7 @@ is_expected.to eq([project_cluster, group_cluster, instance_cluster]) end - context 'nested groups', :nested_groups do + context 'nested groups' do let(:group) { create(:group, parent: parent_group) } let(:parent_group) { create(:group) } @@ -65,7 +65,7 @@ is_expected.to eq([group_cluster, instance_cluster]) end - context 'nested groups', :nested_groups do + context 'nested groups' do let(:group) { create(:group, parent: parent_group) } let(:parent_group) { create(:group) } diff --git a/spec/finders/group_descendants_finder_spec.rb b/spec/finders/group_descendants_finder_spec.rb index c28fd7cad11e..5fb6739d6e25 100644 --- a/spec/finders/group_descendants_finder_spec.rb +++ b/spec/finders/group_descendants_finder_spec.rb @@ -19,7 +19,7 @@ expect(finder.has_children?).to be_truthy end - context 'when there are subgroups', :nested_groups do + context 'when there are subgroups' do it 'is true when there are projects' do create(:group, parent: group) @@ -99,7 +99,7 @@ ) end - context 'with nested groups', :nested_groups do + context 'with nested groups' do let!(:subgroup1) { create(:group, parent: group, name: 'a', path: 'sub-a') } let!(:subgroup2) { create(:group, parent: group, name: 'z', path: 'sub-z') } @@ -126,7 +126,7 @@ end end - context 'with nested groups', :nested_groups do + context 'with nested groups' do let!(:project) { create(:project, namespace: group) } let!(:subgroup) { create(:group, :private, parent: group) } diff --git a/spec/finders/group_members_finder_spec.rb b/spec/finders/group_members_finder_spec.rb index 8975ea0f063b..49b0e14241e9 100644 --- a/spec/finders/group_members_finder_spec.rb +++ b/spec/finders/group_members_finder_spec.rb @@ -18,7 +18,7 @@ expect(result.to_a).to match_array([member3, member2, member1]) end - it 'returns members for nested group', :nested_groups do + it 'returns members for nested group' do group.add_developer(user2) nested_group.request_access(user4) member1 = group.add_maintainer(user1) @@ -30,7 +30,7 @@ expect(result.to_a).to match_array([member1, member3, member4]) end - it 'returns members for descendant groups if requested', :nested_groups do + it 'returns members for descendant groups if requested' do member1 = group.add_maintainer(user2) member2 = group.add_maintainer(user1) nested_group.add_maintainer(user2) diff --git a/spec/finders/group_projects_finder_spec.rb b/spec/finders/group_projects_finder_spec.rb index f8fcc2d0e40c..f4bd8a3f6ba7 100644 --- a/spec/finders/group_projects_finder_spec.rb +++ b/spec/finders/group_projects_finder_spec.rb @@ -19,7 +19,7 @@ context "only owned" do let(:options) { { only_owned: true } } - context 'with subgroups projects', :nested_groups do + context 'with subgroups projects' do before do options[:include_subgroups] = true end @@ -33,7 +33,7 @@ end context "all" do - context 'with subgroups projects', :nested_groups do + context 'with subgroups projects' do before do options[:include_subgroups] = true end @@ -78,7 +78,7 @@ subgroup_private_project.add_maintainer(current_user) end - context 'with subgroups projects', :nested_groups do + context 'with subgroups projects' do before do options[:include_subgroups] = true end @@ -96,7 +96,7 @@ current_user.update(external: true) end - context 'with subgroups projects', :nested_groups do + context 'with subgroups projects' do before do options[:include_subgroups] = true end @@ -111,7 +111,7 @@ end context "all" do - context 'with subgroups projects', :nested_groups do + context 'with subgroups projects' do before do options[:include_subgroups] = true end @@ -153,7 +153,7 @@ context "only owned" do let(:options) { { only_owned: true } } - context 'with subgroups projects', :nested_groups do + context 'with subgroups projects' do before do options[:include_subgroups] = true end diff --git a/spec/finders/groups_finder_spec.rb b/spec/finders/groups_finder_spec.rb index 367ca43bdfe4..c8875d1f92db 100644 --- a/spec/finders/groups_finder_spec.rb +++ b/spec/finders/groups_finder_spec.rb @@ -65,7 +65,7 @@ end end - context 'subgroups', :nested_groups do + context 'subgroups' do let(:user) { create(:user) } let!(:parent_group) { create(:group, :public) } let!(:public_subgroup) { create(:group, :public, parent: parent_group) } diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb index bf38d083ca6b..7fbe27c19395 100644 --- a/spec/finders/issues_finder_spec.rb +++ b/spec/finders/issues_finder_spec.rb @@ -51,7 +51,7 @@ end end - context 'when include_subgroup param is true', :nested_groups do + context 'when include_subgroup param is true' do before do params[:include_subgroups] = true end diff --git a/spec/finders/labels_finder_spec.rb b/spec/finders/labels_finder_spec.rb index 98b4933fef6e..ba41ded112a3 100644 --- a/spec/finders/labels_finder_spec.rb +++ b/spec/finders/labels_finder_spec.rb @@ -89,7 +89,7 @@ end end - context 'when including labels from group ancestors', :nested_groups do + context 'when including labels from group ancestors' do it 'returns labels from group and its ancestors' do private_group_1.add_developer(user) private_subgroup_1.add_developer(user) @@ -108,7 +108,7 @@ end end - context 'when including labels from group descendants', :nested_groups do + context 'when including labels from group descendants' do it 'returns labels from group and its descendants' do private_group_1.add_developer(user) private_subgroup_1.add_developer(user) @@ -128,7 +128,7 @@ end end - context 'filtering by project_id', :nested_groups do + context 'filtering by project_id' do context 'when include_ancestor_groups is true' do let!(:sub_project) { create(:project, namespace: private_subgroup_1 ) } let!(:project_label) { create(:label, project: sub_project, title: 'Label 5') } diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb index 83348457caa7..4203f58fe81a 100644 --- a/spec/finders/members_finder_spec.rb +++ b/spec/finders/members_finder_spec.rb @@ -9,7 +9,7 @@ set(:user3) { create(:user) } set(:user4) { create(:user) } - it 'returns members for project and parent groups', :nested_groups do + it 'returns members for project and parent groups' do nested_group.request_access(user1) member1 = group.add_maintainer(user2) member2 = nested_group.add_maintainer(user3) @@ -20,7 +20,7 @@ expect(result.to_a).to match_array([member1, member2, member3]) end - it 'includes nested group members if asked', :nested_groups do + it 'includes nested group members if asked' do project = create(:project, namespace: group) nested_group.request_access(user1) member1 = group.add_maintainer(user2) @@ -32,7 +32,7 @@ expect(result.to_a).to match_array([member1, member2, member3]) end - context 'when include_invited_groups_members == true', :nested_groups do + context 'when include_invited_groups_members == true' do subject { described_class.new(project, user2).execute(include_invited_groups_members: true) } set(:linked_group) { create(:group, :public, :access_requestable) } @@ -40,7 +40,7 @@ set(:linked_group_member) { linked_group.add_developer(user1) } set(:nested_linked_group_member) { nested_linked_group.add_developer(user2) } - it 'includes all the invited_groups members including members inherited from ancestor groups', :nested_groups do + it 'includes all the invited_groups members including members inherited from ancestor groups' do create(:project_group_link, project: project, group: nested_linked_group) expect(subject).to contain_exactly(linked_group_member, nested_linked_group_member) diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb index da5e9dab0585..78224f0b9da9 100644 --- a/spec/finders/merge_requests_finder_spec.rb +++ b/spec/finders/merge_requests_finder_spec.rb @@ -42,7 +42,7 @@ expect(merge_requests).to contain_exactly(merge_request1, merge_request2) end - it 'filters by group including subgroups', :nested_groups do + it 'filters by group including subgroups' do params = { group_id: group.id, include_subgroups: true } merge_requests = described_class.new(user, params).execute diff --git a/spec/finders/todos_finder_spec.rb b/spec/finders/todos_finder_spec.rb index 22318a9946a4..f7b35e769254 100644 --- a/spec/finders/todos_finder_spec.rb +++ b/spec/finders/todos_finder_spec.rb @@ -36,7 +36,7 @@ expect(todos).to match_array([todo1]) end - context 'with subgroups', :nested_groups do + context 'with subgroups' do let(:subgroup) { create(:group, parent: group) } let!(:todo3) { create(:todo, user: user, group: subgroup, target: issue) } diff --git a/spec/graphql/resolvers/namespace_projects_resolver_spec.rb b/spec/graphql/resolvers/namespace_projects_resolver_spec.rb index 20e197e9f73e..47591445fc0f 100644 --- a/spec/graphql/resolvers/namespace_projects_resolver_spec.rb +++ b/spec/graphql/resolvers/namespace_projects_resolver_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Resolvers::NamespaceProjectsResolver, :nested_groups do +describe Resolvers::NamespaceProjectsResolver do include GraphqlHelpers let(:current_user) { create(:user) } diff --git a/spec/helpers/auto_devops_helper_spec.rb b/spec/helpers/auto_devops_helper_spec.rb index d2540696b17e..e80388f9ea7f 100644 --- a/spec/helpers/auto_devops_helper_spec.rb +++ b/spec/helpers/auto_devops_helper_spec.rb @@ -118,7 +118,7 @@ it { is_expected.to eq('instance enabled') } end - context 'with groups', :nested_groups do + context 'with groups' do before do receiver.update(parent: parent) end @@ -170,7 +170,7 @@ it { is_expected.to eq('instance enabled') } end - context 'with groups', :nested_groups do + context 'with groups' do let(:receiver) { create(:project, :repository, namespace: group) } before do @@ -203,7 +203,7 @@ it { is_expected.to be_nil } end - context 'with groups', :nested_groups do + context 'with groups' do let(:receiver) { create(:project, :repository, namespace: group) } context 'when auto devops is disabled on group level' do diff --git a/spec/helpers/groups_helper_spec.rb b/spec/helpers/groups_helper_spec.rb index 1763c46389a8..037b16c90ed6 100644 --- a/spec/helpers/groups_helper_spec.rb +++ b/spec/helpers/groups_helper_spec.rb @@ -86,7 +86,7 @@ end end - describe 'group_title', :nested_groups do + describe 'group_title' do let(:group) { create(:group) } let(:nested_group) { create(:group, parent: group) } let(:deep_nested_group) { create(:group, parent: nested_group) } @@ -99,7 +99,7 @@ end # rubocop:disable Layout/SpaceBeforeComma - describe '#share_with_group_lock_help_text', :nested_groups do + describe '#share_with_group_lock_help_text' do let!(:root_group) { create(:group) } let!(:subgroup) { create(:group, parent: root_group) } let!(:sub_subgroup) { create(:group, parent: subgroup) } @@ -230,7 +230,7 @@ end end - describe 'parent_group_options', :nested_groups do + describe 'parent_group_options' do let(:current_user) { create(:user) } let(:group) { create(:group, name: 'group') } let(:group2) { create(:group, name: 'group2') } diff --git a/spec/helpers/namespaces_helper_spec.rb b/spec/helpers/namespaces_helper_spec.rb index 601f864ef36a..e38513f6d941 100644 --- a/spec/helpers/namespaces_helper_spec.rb +++ b/spec/helpers/namespaces_helper_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe NamespacesHelper, :postgresql do +describe NamespacesHelper do let!(:admin) { create(:admin) } let!(:admin_project_creation_level) { nil } let!(:admin_group) do @@ -109,7 +109,7 @@ expect(options).to include(user_group.name) end - context 'when nested groups are available', :nested_groups do + context 'when nested groups are available' do it 'includes groups nested in groups the user can administer' do allow(helper).to receive(:current_user).and_return(user) child_group = create(:group, :private, parent: user_group) diff --git a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb index f0a5dc8d0d7e..91edadfa234b 100644 --- a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb @@ -363,7 +363,7 @@ expect(doc.css('a')).to be_empty end - it 'supports parent group references', :nested_groups do + it 'supports parent group references' do milestone.update!(group: parent_group) doc = reference_filter("See #{reference}") @@ -396,7 +396,7 @@ context 'when group milestone' do let(:group_milestone) { create(:milestone, title: 'group_milestone', group: group) } - context 'for subgroups', :nested_groups do + context 'for subgroups' do let(:sub_group) { create(:group, parent: group) } let(:sub_group_milestone) { create(:milestone, title: 'sub_group_milestone', group: sub_group) } diff --git a/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb b/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb index 20af63bc6c82..84ccd57a50b9 100644 --- a/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb +++ b/spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb @@ -75,7 +75,7 @@ def create_resource(target_type, id, project_id) create_resource(target_type, 1, 2) end - it 'ignores label links referencing ancestor group labels', :nested_groups do + it 'ignores label links referencing ancestor group labels' do labels_table.create(id: 4, title: 'bug', color: 'red', project_id: 2, type: 'ProjectLabel') label_links_table.create(label_id: 4, target_type: target_type, target_id: 1) link = label_links_table.create(label_id: 1, target_type: target_type, target_id: 1) @@ -85,7 +85,7 @@ def create_resource(target_type, id, project_id) expect(link.reload.label_id).to eq(1) end - it 'checks also issues and MRs in subgroups', :nested_groups do + it 'checks also issues and MRs in subgroups' do link = label_links_table.create(label_id: 2, target_type: target_type, target_id: 1) subject.perform(1, 100) diff --git a/spec/lib/gitlab/bare_repository_import/importer_spec.rb b/spec/lib/gitlab/bare_repository_import/importer_spec.rb index f4759b695387..ebd3c28f130f 100644 --- a/spec/lib/gitlab/bare_repository_import/importer_spec.rb +++ b/spec/lib/gitlab/bare_repository_import/importer_spec.rb @@ -103,7 +103,7 @@ end end - context 'with subgroups', :nested_groups do + context 'with subgroups' do let(:project_path) { 'a-group/a-sub-group/a-project' } let(:existing_group) do @@ -188,20 +188,6 @@ end end - context 'when subgroups are not available' do - let(:project_path) { 'a-group/a-sub-group/a-project' } - - before do - expect(Group).to receive(:supports_nested_objects?) { false } - end - - describe '#create_project_if_needed' do - it 'raises an error' do - expect { importer.create_project_if_needed }.to raise_error('Nested groups are not supported on MySQL') - end - end - end - def prepare_repository(project_path, source_project) repo_path = File.join(base_dir, project_path) diff --git a/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb b/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb index a528707c9dc7..959f3fdc2893 100644 --- a/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb +++ b/spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb @@ -8,7 +8,7 @@ subject { described_class.new(models).count } - describe '#count', :postgresql do + describe '#count' do let(:models) { [Project, Identity] } context 'when reltuples is up to date' do diff --git a/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb b/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb index a57f033b5edd..cc9d778e5799 100644 --- a/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb +++ b/spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb @@ -12,7 +12,7 @@ subject { strategy.count } - describe '#count', :postgresql do + describe '#count' do let(:estimates) do { Project => threshold + 1, diff --git a/spec/lib/gitlab/database/grant_spec.rb b/spec/lib/gitlab/database/grant_spec.rb index 5ebf3f399b60..9e62dc14d77b 100644 --- a/spec/lib/gitlab/database/grant_spec.rb +++ b/spec/lib/gitlab/database/grant_spec.rb @@ -8,7 +8,7 @@ expect(described_class.create_and_execute_trigger?('users')).to eq(true) end - it 'returns false when the user can not create and/or execute a trigger', :postgresql do + it 'returns false when the user can not create and/or execute a trigger' do # In case of MySQL the user may have SUPER permissions, making it # impossible to have `false` returned when running tests; hence we only # run these tests on PostgreSQL. diff --git a/spec/lib/gitlab/group_search_results_spec.rb b/spec/lib/gitlab/group_search_results_spec.rb index 2734fcef0a0e..53a91a35ec99 100644 --- a/spec/lib/gitlab/group_search_results_spec.rb +++ b/spec/lib/gitlab/group_search_results_spec.rb @@ -20,7 +20,7 @@ expect(result).to eq [user1] end - it 'returns the user belonging to the subgroup matching the search query', :nested_groups do + it 'returns the user belonging to the subgroup matching the search query' do user1 = create(:user, username: 'gob_bluth') subgroup = create(:group, parent: group) create(:group_member, :developer, user: user1, group: subgroup) @@ -32,7 +32,7 @@ expect(result).to eq [user1] end - it 'returns the user belonging to the parent group matching the search query', :nested_groups do + it 'returns the user belonging to the parent group matching the search query' do user1 = create(:user, username: 'gob_bluth') parent_group = create(:group, children: [group]) create(:group_member, :developer, user: user1, group: parent_group) @@ -44,7 +44,7 @@ expect(result).to eq [user1] end - it 'does not return the user belonging to the private subgroup', :nested_groups do + it 'does not return the user belonging to the private subgroup' do user1 = create(:user, username: 'gob_bluth') subgroup = create(:group, :private, parent: group) create(:group_member, :developer, user: user1, group: subgroup) diff --git a/spec/lib/gitlab/manifest_import/manifest_spec.rb b/spec/lib/gitlab/manifest_import/manifest_spec.rb index ab305fb23161..ded93e23c087 100644 --- a/spec/lib/gitlab/manifest_import/manifest_spec.rb +++ b/spec/lib/gitlab/manifest_import/manifest_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::ManifestImport::Manifest, :postgresql do +describe Gitlab::ManifestImport::Manifest do let(:file) { File.open(Rails.root.join('spec/fixtures/aosp_manifest.xml')) } let(:manifest) { described_class.new(file) } diff --git a/spec/lib/gitlab/manifest_import/project_creator_spec.rb b/spec/lib/gitlab/manifest_import/project_creator_spec.rb index 1d01d4375355..a7487972f512 100644 --- a/spec/lib/gitlab/manifest_import/project_creator_spec.rb +++ b/spec/lib/gitlab/manifest_import/project_creator_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::ManifestImport::ProjectCreator, :postgresql do +describe Gitlab::ManifestImport::ProjectCreator do let(:group) { create(:group) } let(:user) { create(:user) } let(:repository) do diff --git a/spec/lib/gitlab/object_hierarchy_spec.rb b/spec/lib/gitlab/object_hierarchy_spec.rb index 4154f9cbe800..737fd62a8553 100644 --- a/spec/lib/gitlab/object_hierarchy_spec.rb +++ b/spec/lib/gitlab/object_hierarchy_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::ObjectHierarchy, :postgresql do +describe Gitlab::ObjectHierarchy do let!(:parent) { create(:group) } let!(:child1) { create(:group, parent: parent) } let!(:child2) { create(:group, parent: child1) } diff --git a/spec/lib/gitlab/performance_bar_spec.rb b/spec/lib/gitlab/performance_bar_spec.rb index ee3c571c9c05..71c109db1f1d 100644 --- a/spec/lib/gitlab/performance_bar_spec.rb +++ b/spec/lib/gitlab/performance_bar_spec.rb @@ -96,7 +96,7 @@ end end - context 'when allowed group is nested', :nested_groups do + context 'when allowed group is nested' do let!(:nested_my_group) { create(:group, parent: create(:group, path: 'my-org'), path: 'my-group') } before do @@ -110,7 +110,7 @@ end end - context 'when a nested group has the same path', :nested_groups do + context 'when a nested group has the same path' do before do create(:group, :nested, path: 'my-group').add_developer(user) end diff --git a/spec/lib/gitlab/project_authorizations_spec.rb b/spec/lib/gitlab/project_authorizations_spec.rb index bd0bc2c90443..75e2d5e1319b 100644 --- a/spec/lib/gitlab/project_authorizations_spec.rb +++ b/spec/lib/gitlab/project_authorizations_spec.rb @@ -20,13 +20,7 @@ def map_access_levels(rows) end let(:authorizations) do - klass = if Group.supports_nested_objects? - Gitlab::ProjectAuthorizations::WithNestedGroups - else - Gitlab::ProjectAuthorizations::WithoutNestedGroups - end - - klass.new(user).calculate + described_class.new(user).calculate end it 'returns the correct number of authorizations' do @@ -46,28 +40,26 @@ def map_access_levels(rows) expect(mapping[group_project.id]).to eq(Gitlab::Access::DEVELOPER) end - if Group.supports_nested_objects? - context 'with nested groups' do - let!(:nested_group) { create(:group, parent: group) } - let!(:nested_project) { create(:project, namespace: nested_group) } + context 'with nested groups' do + let!(:nested_group) { create(:group, parent: group) } + let!(:nested_project) { create(:project, namespace: nested_group) } - it 'includes nested groups' do - expect(authorizations.pluck(:project_id)).to include(nested_project.id) - end + it 'includes nested groups' do + expect(authorizations.pluck(:project_id)).to include(nested_project.id) + end - it 'inherits access levels when the user is not a member of a nested group' do - mapping = map_access_levels(authorizations) + it 'inherits access levels when the user is not a member of a nested group' do + mapping = map_access_levels(authorizations) - expect(mapping[nested_project.id]).to eq(Gitlab::Access::DEVELOPER) - end + expect(mapping[nested_project.id]).to eq(Gitlab::Access::DEVELOPER) + end - it 'uses the greatest access level when a user is a member of a nested group' do - nested_group.add_maintainer(user) + it 'uses the greatest access level when a user is a member of a nested group' do + nested_group.add_maintainer(user) - mapping = map_access_levels(authorizations) + mapping = map_access_levels(authorizations) - expect(mapping[nested_project.id]).to eq(Gitlab::Access::MAINTAINER) - end + expect(mapping[nested_project.id]).to eq(Gitlab::Access::MAINTAINER) end end end diff --git a/spec/lib/gitlab/sql/cte_spec.rb b/spec/lib/gitlab/sql/cte_spec.rb index d6763c7b2e1d..5d2164491b5d 100644 --- a/spec/lib/gitlab/sql/cte_spec.rb +++ b/spec/lib/gitlab/sql/cte_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::SQL::CTE, :postgresql do +describe Gitlab::SQL::CTE do describe '#to_arel' do it 'generates an Arel relation for the CTE body' do relation = User.where(id: 1) diff --git a/spec/lib/gitlab/sql/recursive_cte_spec.rb b/spec/lib/gitlab/sql/recursive_cte_spec.rb index 7fe39dd5a963..407a4d8a2474 100644 --- a/spec/lib/gitlab/sql/recursive_cte_spec.rb +++ b/spec/lib/gitlab/sql/recursive_cte_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe Gitlab::SQL::RecursiveCTE, :postgresql do +describe Gitlab::SQL::RecursiveCTE do let(:cte) { described_class.new(:cte_name) } describe '#to_arel' do diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb index 24ea059e871e..78b151631c1d 100644 --- a/spec/models/ci/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -146,7 +146,7 @@ expect(described_class.belonging_to_parent_group_of_project(project.id)).to contain_exactly(runner) end - context 'with a parent group with a runner', :nested_groups do + context 'with a parent group with a runner' do let(:runner) { create(:ci_runner, :group, groups: [parent_group]) } let(:project) { create(:project, group: group) } let(:group) { create(:group, parent: parent_group) } diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb index 52661178d769..8f2f1b200e49 100644 --- a/spec/models/clusters/cluster_spec.rb +++ b/spec/models/clusters/cluster_spec.rb @@ -342,7 +342,7 @@ end end - context 'when sub-group has configured kubernetes cluster', :nested_groups do + context 'when sub-group has configured kubernetes cluster' do let(:sub_group_cluster) { create(:cluster, :provided_by_gcp, :group) } let(:sub_group) { sub_group_cluster.group } let(:project) { create(:project, group: sub_group) } diff --git a/spec/models/concerns/deployment_platform_spec.rb b/spec/models/concerns/deployment_platform_spec.rb index c4f9f62ece51..27f535487c8b 100644 --- a/spec/models/concerns/deployment_platform_spec.rb +++ b/spec/models/concerns/deployment_platform_spec.rb @@ -45,7 +45,7 @@ is_expected.to eq(group_cluster.platform_kubernetes) end - context 'when child group has configured kubernetes cluster', :nested_groups do + context 'when child group has configured kubernetes cluster' do let(:child_group1) { create(:group, parent: group) } let!(:child_group1_cluster) { create(:cluster_for_group, groups: [child_group1]) } diff --git a/spec/models/concerns/group_descendant_spec.rb b/spec/models/concerns/group_descendant_spec.rb index 194caac3fce7..192e884f3e88 100644 --- a/spec/models/concerns/group_descendant_spec.rb +++ b/spec/models/concerns/group_descendant_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe GroupDescendant, :nested_groups do +describe GroupDescendant do let(:parent) { create(:group) } let(:subgroup) { create(:group, parent: parent) } let(:subsub_group) { create(:group, parent: subgroup) } @@ -84,7 +84,7 @@ def all_preloaded_groups(*groups) it 'tracks the exception when a parent was not preloaded' do expect(Gitlab::Sentry).to receive(:track_exception).and_call_original - expect { GroupDescendant.build_hierarchy([subsub_group]) }.to raise_error(ArgumentError) + expect { described_class.build_hierarchy([subsub_group]) }.to raise_error(ArgumentError) end it 'recovers if a parent was not reloaded by querying for the parent' do @@ -93,7 +93,7 @@ def all_preloaded_groups(*groups) # this does not raise in production, so stubbing it here. allow(Gitlab::Sentry).to receive(:track_exception) - expect(GroupDescendant.build_hierarchy([subsub_group])).to eq(expected_hierarchy) + expect(described_class.build_hierarchy([subsub_group])).to eq(expected_hierarchy) end it 'raises an error if not all elements were preloaded' do diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb index e19da41c3feb..39680c0e51af 100644 --- a/spec/models/concerns/issuable_spec.rb +++ b/spec/models/concerns/issuable_spec.rb @@ -128,7 +128,7 @@ def build_issuable(milestone_id) expect(build_issuable(milestone.id).milestone_available?).to be_truthy end - it 'returns true with a milestone from the the parent of the issue project group', :nested_groups do + it 'returns true with a milestone from the the parent of the issue project group' do parent = create(:group) group.update(parent: parent) milestone = create(:milestone, group: parent) diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 90e0900445e1..7e9bbf5a4079 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -71,7 +71,7 @@ end end - describe '#notification_settings', :nested_groups do + describe '#notification_settings' do let(:user) { create(:user) } let(:group) { create(:group) } let(:sub_group) { create(:group, parent_id: group.id) } @@ -237,7 +237,7 @@ 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' do let!(:private_subgroup) { create(:group, :private, parent: private_group) } before do @@ -416,7 +416,7 @@ it { expect(group.last_owner?(@members[:owner])).to be_falsy } end - context 'with owners from a parent', :postgresql do + context 'with owners from a parent' do before do parent_group = create(:group) create(:group_member, :owner, group: parent_group) @@ -524,7 +524,7 @@ def setup_group_members(group) it { expect(subject.parent).to be_kind_of(described_class) } end - describe '#members_with_parents', :nested_groups do + describe '#members_with_parents' 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) } @@ -535,7 +535,7 @@ def setup_group_members(group) end end - describe '#direct_and_indirect_members', :nested_groups do + describe '#direct_and_indirect_members' do let!(:group) { create(:group, :nested) } let!(:sub_group) { create(:group, parent: group) } let!(:maintainer) { group.parent.add_user(create(:user), GroupMember::MAINTAINER) } @@ -552,7 +552,7 @@ def setup_group_members(group) end end - describe '#users_with_descendants', :nested_groups do + describe '#users_with_descendants' do let(:user_a) { create(:user) } let(:user_b) { create(:user) } @@ -571,7 +571,7 @@ def setup_group_members(group) end end - describe '#direct_and_indirect_users', :nested_groups do + describe '#direct_and_indirect_users' do let(:user_a) { create(:user) } let(:user_b) { create(:user) } let(:user_c) { create(:user) } @@ -601,7 +601,7 @@ def setup_group_members(group) end end - describe '#project_users_with_descendants', :nested_groups do + describe '#project_users_with_descendants' do let(:user_a) { create(:user) } let(:user_b) { create(:user) } let(:user_c) { create(:user) } @@ -678,7 +678,7 @@ def setup_group_members(group) end end - context 'sub groups and projects', :nested_groups do + context 'sub groups and projects' do it 'enables two_factor_requirement for group member' do group.add_user(user, GroupMember::OWNER) @@ -687,7 +687,7 @@ def setup_group_members(group) expect(user.reload.require_two_factor_authentication_from_group).to be_truthy end - context 'expanded group members', :nested_groups do + context 'expanded group members' do let(:indirect_user) { create(:user) } it 'enables two_factor_requirement for subgroup member' do @@ -720,7 +720,7 @@ def setup_group_members(group) expect(user.reload.require_two_factor_authentication_from_group).to be_falsey end - it 'does not enable two_factor_requirement for subgroup child project member', :nested_groups do + it 'does not enable two_factor_requirement for subgroup child project member' do subgroup = create(:group, :nested, parent: group) project = create(:project, group: subgroup) project.add_maintainer(user) @@ -820,7 +820,7 @@ def setup_group_members(group) it_behaves_like 'ref is protected' end - context 'when group has children', :postgresql do + context 'when group has children' 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) } @@ -843,7 +843,7 @@ def setup_group_members(group) end end - describe '#highest_group_member', :nested_groups do + describe '#highest_group_member' do let(:nested_group) { create(:group, parent: group) } let(:nested_group_2) { create(:group, parent: nested_group) } let(:user) { create(:user) } @@ -932,7 +932,7 @@ def setup_group_members(group) it { is_expected.to eq(config) } end - context 'with parent groups', :nested_groups do + context 'with parent groups' do where(:instance_value, :parent_value, :group_value, :config) do # Instance level enabled true | nil | nil | { status: true, scope: :instance } diff --git a/spec/models/members/group_member_spec.rb b/spec/models/members/group_member_spec.rb index f227abd3daea..ebb0bfca369b 100644 --- a/spec/models/members/group_member_spec.rb +++ b/spec/models/members/group_member_spec.rb @@ -69,7 +69,7 @@ end end - context 'access levels', :nested_groups do + context 'access levels' do context 'with parent group' do it_behaves_like 'inherited access level as a member of entity' do let(:entity) { create(:group, parent: parent_entity) } diff --git a/spec/models/members/project_member_spec.rb b/spec/models/members/project_member_spec.rb index 497764b68254..79c39b81196d 100644 --- a/spec/models/members/project_member_spec.rb +++ b/spec/models/members/project_member_spec.rb @@ -130,7 +130,7 @@ end end - context 'with parent group and a subgroup', :nested_groups do + context 'with parent group and a subgroup' do it_behaves_like 'inherited access level as a member of entity' do let(:subgroup) { create(:group, parent: parent_entity) } let(:entity) { create(:project, group: subgroup) } diff --git a/spec/models/namespace/root_storage_statistics_spec.rb b/spec/models/namespace/root_storage_statistics_spec.rb index 3229a32234e5..5341278db7c2 100644 --- a/spec/models/namespace/root_storage_statistics_spec.rb +++ b/spec/models/namespace/root_storage_statistics_spec.rb @@ -56,7 +56,7 @@ it_behaves_like 'data refresh' - context 'with subgroups', :nested_groups do + context 'with subgroups' do let(:subgroup1) { create(:group, parent: namespace)} let(:subgroup2) { create(:group, parent: subgroup1)} diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index f908f3504e00..2b9c3c43af98 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -191,7 +191,7 @@ end end - describe '#ancestors_upto', :nested_groups do + describe '#ancestors_upto' do let(:parent) { create(:group) } let(:child) { create(:group, parent: parent) } let(:child2) { create(:group, parent: child) } @@ -271,7 +271,7 @@ end end - context 'with subgroups', :nested_groups do + context 'with subgroups' 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) } @@ -475,7 +475,7 @@ def project_rugged(project) end end - describe '#self_and_hierarchy', :nested_groups do + describe '#self_and_hierarchy' do let!(:group) { create(:group, path: 'git_lab') } let!(:nested_group) { create(:group, parent: group) } let!(:deep_nested_group) { create(:group, parent: nested_group) } @@ -490,7 +490,7 @@ def project_rugged(project) end end - describe '#ancestors', :nested_groups do + describe '#ancestors' do let(:group) { create(:group) } let(:nested_group) { create(:group, parent: group) } let(:deep_nested_group) { create(:group, parent: nested_group) } @@ -504,7 +504,7 @@ def project_rugged(project) end end - describe '#self_and_ancestors', :nested_groups do + describe '#self_and_ancestors' do let(:group) { create(:group) } let(:nested_group) { create(:group, parent: group) } let(:deep_nested_group) { create(:group, parent: nested_group) } @@ -518,7 +518,7 @@ def project_rugged(project) end end - describe '#descendants', :nested_groups do + describe '#descendants' do let!(:group) { create(:group, path: 'git_lab') } let!(:nested_group) { create(:group, parent: group) } let!(:deep_nested_group) { create(:group, parent: nested_group) } @@ -534,7 +534,7 @@ def project_rugged(project) end end - describe '#self_and_descendants', :nested_groups do + describe '#self_and_descendants' do let!(:group) { create(:group, path: 'git_lab') } let!(:nested_group) { create(:group, parent: group) } let!(:deep_nested_group) { create(:group, parent: nested_group) } @@ -550,7 +550,7 @@ def project_rugged(project) end end - describe '#users_with_descendants', :nested_groups do + describe '#users_with_descendants' do let(:user_a) { create(:user) } let(:user_b) { create(:user) } @@ -597,7 +597,7 @@ def project_rugged(project) it { expect(group.all_pipelines.to_a).to match_array([pipeline1, pipeline2]) } end - describe '#share_with_group_lock with subgroups', :nested_groups do + describe '#share_with_group_lock with subgroups' do context 'when creating a subgroup' do let(:subgroup) { create(:group, parent: root_group )} @@ -738,7 +738,7 @@ def project_rugged(project) end describe '#root_ancestor' do - it 'returns the top most ancestor', :nested_groups do + it 'returns the top most ancestor' do root_group = create(:group) nested_group = create(:group, parent: root_group) deep_nested_group = create(:group, parent: nested_group) diff --git a/spec/models/notification_recipient_spec.rb b/spec/models/notification_recipient_spec.rb index 20278d81f6d8..4122736c148c 100644 --- a/spec/models/notification_recipient_spec.rb +++ b/spec/models/notification_recipient_spec.rb @@ -49,7 +49,7 @@ end context '#notification_setting' do - context 'for child groups', :nested_groups do + context 'for child groups' do let!(:moved_group) { create(:group) } let(:group) { create(:group) } let(:sub_group_1) { create(:group, parent: group) } diff --git a/spec/models/postgresql/replication_slot_spec.rb b/spec/models/postgresql/replication_slot_spec.rb index 95ae204a8a82..d435fccc09a6 100644 --- a/spec/models/postgresql/replication_slot_spec.rb +++ b/spec/models/postgresql/replication_slot_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Postgresql::ReplicationSlot, :postgresql do +describe Postgresql::ReplicationSlot do describe '.in_use?' do it 'returns true when replication slots are present' do expect(described_class).to receive(:exists?).and_return(true) diff --git a/spec/models/project_group_link_spec.rb b/spec/models/project_group_link_spec.rb index dad5506900ba..cd997224122c 100644 --- a/spec/models/project_group_link_spec.rb +++ b/spec/models/project_group_link_spec.rb @@ -25,7 +25,7 @@ expect(project_group_link).not_to be_valid end - it "doesn't allow a project to be shared with an ancestor of the group it is in", :nested_groups do + it "doesn't allow a project to be shared with an ancestor of the group it is in" do project_group_link.group = parent_group expect(project_group_link).not_to be_valid diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 7d458324c200..15a7d943009c 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2292,7 +2292,7 @@ end end - describe '#ancestors_upto', :nested_groups do + describe '#ancestors_upto' do let(:parent) { create(:group) } let(:child) { create(:group, parent: parent) } let(:child2) { create(:group, parent: child) } @@ -2331,7 +2331,7 @@ it { is_expected.to eq(group) } end - context 'in a nested group', :nested_groups do + context 'in a nested group' do let(:root) { create(:group) } let(:child) { create(:group, parent: root) } let(:project) { create(:project, group: child) } @@ -2479,7 +2479,7 @@ expect(forked_project.in_fork_network_of?(project)).to be_truthy end - it 'is true for a fork of a fork', :postgresql do + it 'is true for a fork of a fork' do other_fork = fork_project(forked_project) expect(other_fork.in_fork_network_of?(project)).to be_truthy @@ -3801,7 +3801,7 @@ def enable_lfs end end - context 'when enabled on root parent', :nested_groups do + context 'when enabled on root parent' do let(:parent_group) { create(:group, parent: create(:group, :auto_devops_enabled)) } context 'when auto devops instance enabled' do @@ -3821,7 +3821,7 @@ def enable_lfs end end - context 'when disabled on root parent', :nested_groups do + context 'when disabled on root parent' do let(:parent_group) { create(:group, parent: create(:group, :auto_devops_disabled)) } context 'when auto devops instance enabled' do @@ -4264,18 +4264,16 @@ def enable_lfs expect(project.badges.count).to eq 3 end - if Group.supports_nested_objects? - context 'with nested_groups' do - let(:parent_group) { create(:group) } + context 'with nested_groups' do + let(:parent_group) { create(:group) } - before do - create_list(:group_badge, 2, group: project_group) - project_group.update(parent: parent_group) - end + before do + create_list(:group_badge, 2, group: project_group) + project_group.update(parent: parent_group) + end - it 'returns the project and the project nested groups badges' do - expect(project.badges.count).to eq 5 - end + it 'returns the project and the project nested groups badges' do + expect(project.badges.count).to eq 5 end end end diff --git a/spec/models/todo_spec.rb b/spec/models/todo_spec.rb index b5bf294790a2..9aeef7c3b4b5 100644 --- a/spec/models/todo_spec.rb +++ b/spec/models/todo_spec.rb @@ -262,11 +262,7 @@ todo2 = create(:todo, group: child_group) todos = described_class.for_group_and_descendants(parent_group) - expect(todos).to include(todo1) - - # Nested groups only work on PostgreSQL, so on MySQL todo2 won't be - # present. - expect(todos).to include(todo2) if Gitlab::Database.postgresql? + expect(todos).to contain_exactly(todo1, todo2) end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2d20f8c78cce..35c335c5b5c4 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -985,7 +985,7 @@ it { expect(user.namespaces).to contain_exactly(user.namespace, group) } it { expect(user.manageable_namespaces).to contain_exactly(user.namespace, group) } - context 'with child groups', :nested_groups do + context 'with child groups' do let!(:subgroup) { create(:group, parent: group) } describe '#manageable_namespaces' do @@ -2082,11 +2082,7 @@ subject { user.membership_groups } - if Group.supports_nested_objects? - it { is_expected.to contain_exactly parent_group, child_group } - else - it { is_expected.to contain_exactly parent_group } - end + it { is_expected.to contain_exactly parent_group, child_group } end describe '#authorizations_for_projects' do @@ -2386,7 +2382,7 @@ def add_user(access) it_behaves_like :member end - context 'with subgroup with different owner for project runner', :nested_groups do + context 'with subgroup with different owner for project runner' do let(:group) { create(:group) } let(:another_user) { create(:user) } let(:subgroup) { create(:group, parent: group) } @@ -2490,22 +2486,16 @@ def add_user(access) group.add_owner(user) end - if Group.supports_nested_objects? - it 'returns all groups' do - is_expected.to match_array [ - group, - nested_group_1, nested_group_1_1, - nested_group_2, nested_group_2_1 - ] - end - else - it 'returns the top-level groups' do - is_expected.to match_array [group] - end + it 'returns all groups' do + is_expected.to match_array [ + group, + nested_group_1, nested_group_1_1, + nested_group_2, nested_group_2_1 + ] end end - context 'user is member of the first child (internal node), branch 1', :nested_groups do + context 'user is member of the first child (internal node), branch 1' do before do nested_group_1.add_owner(user) end @@ -2518,7 +2508,7 @@ def add_user(access) end end - context 'user is member of the first child (internal node), branch 2', :nested_groups do + context 'user is member of the first child (internal node), branch 2' do before do nested_group_2.add_owner(user) end @@ -2531,7 +2521,7 @@ def add_user(access) end end - context 'user is member of the last child (leaf node)', :nested_groups do + context 'user is member of the last child (leaf node)' do before do nested_group_1_1.add_owner(user) end @@ -2687,7 +2677,7 @@ def add_user(access) end end - context 'with 2FA requirement from expanded groups', :nested_groups do + context 'with 2FA requirement from expanded groups' do let!(:group1) { create :group, require_two_factor_authentication: true } let!(:group1a) { create :group, parent: group1 } @@ -2702,7 +2692,7 @@ def add_user(access) end end - context 'with 2FA requirement on nested child group', :nested_groups do + context 'with 2FA requirement on nested child group' do let!(:group1) { create :group, require_two_factor_authentication: false } let!(:group1a) { create :group, require_two_factor_authentication: true, parent: group1 } diff --git a/spec/policies/group_member_policy_spec.rb b/spec/policies/group_member_policy_spec.rb index 7bd7184cffe5..a4f3301a0648 100644 --- a/spec/policies/group_member_policy_spec.rb +++ b/spec/policies/group_member_policy_spec.rb @@ -58,7 +58,7 @@ def expect_disallowed(*permissions) end end - context 'with the group parent', :postgresql do + context 'with the group parent' do let(:current_user) { create :user } let(:subgroup) { create(:group, :private, parent: group)} diff --git a/spec/policies/group_policy_spec.rb b/spec/policies/group_policy_spec.rb index dc3675a7b9ee..be55d94daec4 100644 --- a/spec/policies/group_policy_spec.rb +++ b/spec/policies/group_policy_spec.rb @@ -51,7 +51,7 @@ it { expect_allowed(:read_label, :read_list) } - context 'in subgroups', :nested_groups do + context 'in subgroups' do let(:subgroup) { create(:group, :private, parent: group) } let(:project) { create(:project, namespace: subgroup) } @@ -104,8 +104,6 @@ end it 'allows every maintainer permission plus creating subgroups' do - allow(Group).to receive(:supports_nested_objects?).and_return(true) - create_subgroup_permission = [:create_subgroup] updated_maintainer_permissions = maintainer_permissions + create_subgroup_permission @@ -122,8 +120,6 @@ context 'with subgroup_creation_level set to owner' do it 'allows every maintainer permission' do - allow(Group).to receive(:supports_nested_objects?).and_return(true) - expect_allowed(*guest_permissions) expect_allowed(*reporter_permissions) expect_allowed(*developer_permissions) @@ -137,8 +133,6 @@ let(:current_user) { owner } it do - allow(Group).to receive(:supports_nested_objects?).and_return(true) - expect_allowed(*guest_permissions) expect_allowed(*reporter_permissions) expect_allowed(*developer_permissions) @@ -151,8 +145,6 @@ let(:current_user) { admin } it do - allow(Group).to receive(:supports_nested_objects?).and_return(true) - expect_allowed(*guest_permissions) expect_allowed(*reporter_permissions) expect_allowed(*developer_permissions) @@ -161,52 +153,7 @@ end end - describe 'when nested group support feature is disabled' do - before do - allow(Group).to receive(:supports_nested_objects?).and_return(false) - end - - context 'admin' do - let(:current_user) { admin } - - it 'allows every owner permission except creating subgroups' do - create_subgroup_permission = [:create_subgroup] - updated_owner_permissions = - owner_permissions - create_subgroup_permission - - expect_disallowed(*create_subgroup_permission) - expect_allowed(*updated_owner_permissions) - end - end - - context 'owner' do - let(:current_user) { owner } - - it 'allows every owner permission except creating subgroups' do - create_subgroup_permission = [:create_subgroup] - updated_owner_permissions = - owner_permissions - create_subgroup_permission - - expect_disallowed(*create_subgroup_permission) - expect_allowed(*updated_owner_permissions) - end - end - - context 'maintainer' do - let(:current_user) { maintainer } - - it 'allows every maintainer permission except creating subgroups' do - create_subgroup_permission = [:create_subgroup] - updated_maintainer_permissions = - maintainer_permissions - create_subgroup_permission - - expect_disallowed(*create_subgroup_permission) - expect_allowed(*updated_maintainer_permissions) - end - end - end - - describe 'private nested group use the highest access level from the group and inherited permissions', :nested_groups do + describe 'private nested group use the highest access level from the group and inherited permissions' do let(:nested_group) do create(:group, :private, :owner_subgroup_creation_only, parent: group) end @@ -289,8 +236,6 @@ let(:current_user) { owner } it do - allow(Group).to receive(:supports_nested_objects?).and_return(true) - expect_allowed(*guest_permissions) expect_allowed(*reporter_permissions) expect_allowed(*developer_permissions) diff --git a/spec/presenters/clusters/cluster_presenter_spec.rb b/spec/presenters/clusters/cluster_presenter_spec.rb index 7054a70e2ed8..6b988e2645b6 100644 --- a/spec/presenters/clusters/cluster_presenter_spec.rb +++ b/spec/presenters/clusters/cluster_presenter_spec.rb @@ -43,7 +43,7 @@ end shared_examples 'ancestor clusters' do - context 'ancestor clusters', :nested_groups do + context 'ancestor clusters' do let(:root_group) { create(:group, name: 'Root Group') } let(:parent) { create(:group, name: 'parent', parent: root_group) } let(:child) { create(:group, name: 'child', parent: parent) } diff --git a/spec/requests/api/boards_spec.rb b/spec/requests/api/boards_spec.rb index de79e8c4c5c5..0b9c0c2ebe93 100644 --- a/spec/requests/api/boards_spec.rb +++ b/spec/requests/api/boards_spec.rb @@ -63,7 +63,7 @@ end end - describe "POST /groups/:id/boards/lists", :nested_groups do + describe "POST /groups/:id/boards/lists" do set(:group) { create(:group) } set(:board_parent) { create(:group, parent: group ) } let(:url) { "/groups/#{board_parent.id}/boards/#{board.id}/lists" } diff --git a/spec/requests/api/graphql/namespace/projects_spec.rb b/spec/requests/api/graphql/namespace/projects_spec.rb index 63fa16c79cac..815e9531ecf8 100644 --- a/spec/requests/api/graphql/namespace/projects_spec.rb +++ b/spec/requests/api/graphql/namespace/projects_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'getting projects', :nested_groups do +describe 'getting projects' do include GraphqlHelpers let(:group) { create(:group) } diff --git a/spec/requests/api/group_labels_spec.rb b/spec/requests/api/group_labels_spec.rb index 3769f8b78e49..fcea57d9df73 100644 --- a/spec/requests/api/group_labels_spec.rb +++ b/spec/requests/api/group_labels_spec.rb @@ -94,7 +94,7 @@ expect(response).to have_gitlab_http_status(400) end - it "does not delete parent's group labels", :nested_groups do + it "does not delete parent's group labels" do subgroup = create(:group, parent: group) subgroup_label = create(:group_label, title: 'feature', group: subgroup) @@ -127,7 +127,7 @@ expect(json_response['description']).to eq('test') end - it "does not update parent's group label", :nested_groups do + it "does not update parent's group label" do subgroup = create(:group, parent: group) subgroup_label = create(:group_label, title: 'feature', group: subgroup) diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb index 52d926d5484b..50f36141aed2 100644 --- a/spec/requests/api/groups_spec.rb +++ b/spec/requests/api/groups_spec.rb @@ -530,7 +530,7 @@ def response_project_ids(json_response, key) expect(json_response.length).to eq(2) end - it "returns projects including those in subgroups", :nested_groups do + it "returns projects including those in subgroups" do subgroup = create(:group, parent: group1) create(:project, group: subgroup) create(:project, group: subgroup) @@ -642,7 +642,7 @@ def response_project_ids(json_response, key) end end - describe 'GET /groups/:id/subgroups', :nested_groups do + describe 'GET /groups/:id/subgroups' do let!(:subgroup1) { create(:group, parent: group1) } let!(:subgroup2) { create(:group, :private, parent: group1) } let!(:subgroup3) { create(:group, :private, parent: group2) } @@ -786,7 +786,7 @@ def response_project_ids(json_response, key) expect(response).to have_gitlab_http_status(403) end - context 'as owner', :nested_groups do + context 'as owner' do before do group2.add_owner(user1) end @@ -798,7 +798,7 @@ def response_project_ids(json_response, key) end end - context 'as maintainer', :nested_groups do + context 'as maintainer' do before do group2.add_maintainer(user1) end @@ -825,7 +825,7 @@ def response_project_ids(json_response, key) expect(json_response["visibility"]).to eq(Gitlab::VisibilityLevel.string_level(Gitlab::CurrentSettings.current_application_settings.default_group_visibility)) end - it "creates a nested group", :nested_groups do + it "creates a nested group" do parent = create(:group) parent.add_owner(user3) group = attributes_for(:group, { parent_id: parent.id }) diff --git a/spec/requests/api/issues/get_group_issues_spec.rb b/spec/requests/api/issues/get_group_issues_spec.rb index 9a41d790945b..5916bb115166 100644 --- a/spec/requests/api/issues/get_group_issues_spec.rb +++ b/spec/requests/api/issues/get_group_issues_spec.rb @@ -82,7 +82,7 @@ end end - context 'when group has subgroups', :nested_groups do + context 'when group has subgroups' do let(:subgroup_1) { create(:group, parent: group) } let(:subgroup_2) { create(:group, parent: subgroup_1) } diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb index 55f38079b1f7..26f6e7055287 100644 --- a/spec/requests/api/members_spec.rb +++ b/spec/requests/api/members_spec.rb @@ -99,7 +99,7 @@ end end - describe 'GET /:source_type/:id/members/all', :nested_groups do + describe 'GET /:source_type/:id/members/all' do let(:nested_user) { create(:user) } let(:project_user) { create(:user) } let(:linked_group_user) { create(:user) } @@ -238,7 +238,7 @@ end context 'access levels' do - it 'does not create the member if group level is higher', :nested_groups do + it 'does not create the member if group level is higher' do parent = create(:group) group.update(parent: parent) @@ -252,7 +252,7 @@ expect(json_response['message']['access_level']).to eq(["should be greater than or equal to Developer inherited membership from group #{parent.name}"]) end - it 'creates the member if group level is lower', :nested_groups do + it 'creates the member if group level is lower' do parent = create(:group) group.update(parent: parent) diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index ced853caab47..7a6f1cd548c7 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -723,7 +723,7 @@ it_behaves_like 'merge requests list' - context 'when have subgroups', :nested_groups do + context 'when have subgroups' do let!(:group) { create(:group, :public) } let!(:subgroup) { create(:group, parent: group) } let!(:project) { create(:project, :public, :repository, creator: user, namespace: subgroup, only_allow_merge_if_pipeline_succeeds: false) } diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index fee300e9d7af..5b3a2412afff 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -1357,7 +1357,7 @@ end end - context 'nested group project', :nested_groups do + context 'nested group project' do let(:group) { create(:group) } let(:nested_group) { create(:group, parent: group) } let(:project2) { create(:project, group: nested_group) } diff --git a/spec/requests/openid_connect_spec.rb b/spec/requests/openid_connect_spec.rb index 86e41cbdf004..025568d8bead 100644 --- a/spec/requests/openid_connect_spec.rb +++ b/spec/requests/openid_connect_spec.rb @@ -104,7 +104,7 @@ def request_user_info! expect(json_response).to match(id_token_claims.merge(user_info_claims)) expected_groups = [group1.full_path, group3.full_path] - expected_groups << group4.full_path if Group.supports_nested_objects? + expected_groups << group4.full_path expect(json_response['groups']).to match_array(expected_groups) end diff --git a/spec/serializers/group_child_entity_spec.rb b/spec/serializers/group_child_entity_spec.rb index b58d95ccb439..00e2f9315493 100644 --- a/spec/serializers/group_child_entity_spec.rb +++ b/spec/serializers/group_child_entity_spec.rb @@ -62,7 +62,7 @@ it_behaves_like 'group child json' end - describe 'for a group', :nested_groups do + describe 'for a group' do let(:description) { 'Awesomeness' } let(:object) do create(:group, :nested, :with_avatar, diff --git a/spec/serializers/group_child_serializer_spec.rb b/spec/serializers/group_child_serializer_spec.rb index 5541ada37509..c9e8535585b4 100644 --- a/spec/serializers/group_child_serializer_spec.rb +++ b/spec/serializers/group_child_serializer_spec.rb @@ -16,7 +16,7 @@ end end - context 'with a hierarchy', :nested_groups do + context 'with a hierarchy' do let(:parent) { create(:group) } subject(:serializer) do @@ -75,7 +75,7 @@ expect(serializer.represent(build_list(:project, 2))).to be_kind_of(Array) end - context 'with a hierarchy', :nested_groups do + context 'with a hierarchy' do let(:parent) { create(:group) } subject(:serializer) do diff --git a/spec/serializers/pipeline_serializer_spec.rb b/spec/serializers/pipeline_serializer_spec.rb index 54e6abc2d3a4..7f9827329b3a 100644 --- a/spec/serializers/pipeline_serializer_spec.rb +++ b/spec/serializers/pipeline_serializer_spec.rb @@ -126,7 +126,7 @@ expect(subject.all? { |entry| entry[:merge_request].present? }).to be_truthy end - it 'preloads related merge requests', :postgresql do + it 'preloads related merge requests' do recorded = ActiveRecord::QueryRecorder.new { subject } expect(recorded.log) diff --git a/spec/services/boards/issues/list_service_spec.rb b/spec/services/boards/issues/list_service_spec.rb index 40878e24cb42..931b67b2950f 100644 --- a/spec/services/boards/issues/list_service_spec.rb +++ b/spec/services/boards/issues/list_service_spec.rb @@ -112,7 +112,7 @@ it_behaves_like 'issues list service' end - context 'and group is an ancestor', :nested_groups do + context 'and group is an ancestor' do let(:parent) { create(:group) } let(:group) { create(:group, parent: parent) } let!(:backlog) { create(:backlog_list, board: board) } diff --git a/spec/services/groups/auto_devops_service_spec.rb b/spec/services/groups/auto_devops_service_spec.rb index 7f8ab517cef9..7591b2f6f12d 100644 --- a/spec/services/groups/auto_devops_service_spec.rb +++ b/spec/services/groups/auto_devops_service_spec.rb @@ -47,7 +47,7 @@ expect(subgroup_1.auto_devops_enabled?).to eq(false) end - context 'when subgroups have projects', :nested_groups do + context 'when subgroups have projects' do it 'reflects changes on projects' do subgroup_1 = create(:group, parent: group) project_1 = create(:project, namespace: subgroup_1) diff --git a/spec/services/groups/create_service_spec.rb b/spec/services/groups/create_service_spec.rb index a7c954284853..0f9f20de5865 100644 --- a/spec/services/groups/create_service_spec.rb +++ b/spec/services/groups/create_service_spec.rb @@ -44,7 +44,7 @@ end end - describe 'creating subgroup', :nested_groups do + describe 'creating subgroup' do let!(:group) { create(:group) } let!(:service) { described_class.new(user, group_params.merge(parent_id: group.id)) } @@ -54,47 +54,31 @@ end it { is_expected.to be_persisted } + end - context 'when nested groups feature is disabled' do - it 'does not save group and returns an error' do - allow(Group).to receive(:supports_nested_objects?).and_return(false) + context 'as guest' do + it 'does not save group and returns an error' do + is_expected.not_to be_persisted - is_expected.not_to be_persisted - expect(subject.errors[:parent_id]).to include('You don’t have permission to create a subgroup in this group.') - expect(subject.parent_id).to be_nil - end + expect(subject.errors[:parent_id].first).to eq('You don’t have permission to create a subgroup in this group.') + expect(subject.parent_id).to be_nil end end - context 'when nested groups feature is enabled' do + context 'as owner' do before do - allow(Group).to receive(:supports_nested_objects?).and_return(true) - end - - context 'as guest' do - it 'does not save group and returns an error' do - is_expected.not_to be_persisted - - expect(subject.errors[:parent_id].first).to eq('You don’t have permission to create a subgroup in this group.') - expect(subject.parent_id).to be_nil - end + group.add_owner(user) end - context 'as owner' do - before do - group.add_owner(user) - end + it { is_expected.to be_persisted } + end - it { is_expected.to be_persisted } + context 'as maintainer' do + before do + group.add_maintainer(user) end - context 'as maintainer' do - before do - group.add_maintainer(user) - end - - it { is_expected.to be_persisted } - end + it { is_expected.to be_persisted } end end diff --git a/spec/services/groups/nested_create_service_spec.rb b/spec/services/groups/nested_create_service_spec.rb index 13acf9e055bd..b30392c1b12f 100644 --- a/spec/services/groups/nested_create_service_spec.rb +++ b/spec/services/groups/nested_create_service_spec.rb @@ -28,35 +28,7 @@ end end - describe 'without subgroups' do - let(:params) { { group_path: 'a-group' } } - - before do - allow(Group).to receive(:supports_nested_objects?) { false } - end - - it 'creates the group' do - group = service.execute - - expect(group).to be_persisted - end - - it 'returns the group if it already existed' do - existing_group = create(:group, path: 'a-group') - - expect(service.execute).to eq(existing_group) - end - - it 'raises an error when tring to create a subgroup' do - service = described_class.new(user, group_path: 'a-group/a-sub-group') - - expect { service.execute }.to raise_error('Nested groups are not supported on MySQL') - end - - it_behaves_like 'with a visibility level' - end - - describe 'with subgroups', :nested_groups do + describe 'with subgroups' do let(:params) { { group_path: 'a-group/a-sub-group' } } describe "#execute" do diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb index b5708ebba76a..f3af8cf5f3b3 100644 --- a/spec/services/groups/transfer_service_spec.rb +++ b/spec/services/groups/transfer_service_spec.rb @@ -2,28 +2,13 @@ require 'rails_helper' -describe Groups::TransferService, :postgresql do +describe Groups::TransferService do let(:user) { create(:user) } let(:new_parent_group) { create(:group, :public) } let!(:group_member) { create(:group_member, :owner, group: group, user: user) } let(:transfer_service) { described_class.new(group, user) } shared_examples 'ensuring allowed transfer for a group' do - context 'with other database than PostgreSQL' do - before do - allow(Group).to receive(:supports_nested_objects?).and_return(false) - end - - it 'returns false' do - expect(transfer_service.execute(new_parent_group)).to be_falsy - end - - it 'adds an error on group' do - transfer_service.execute(new_parent_group) - expect(transfer_service.error).to eq('Transfer failed: Database is not supported.') - end - end - context "when there's an exception on GitLab shell directories" do let(:new_parent_group) { create(:group, :public) } diff --git a/spec/services/groups/update_service_spec.rb b/spec/services/groups/update_service_spec.rb index d081c20f6696..5d4576139f7c 100644 --- a/spec/services/groups/update_service_spec.rb +++ b/spec/services/groups/update_service_spec.rb @@ -133,7 +133,7 @@ end end - context 'for a subgroup', :nested_groups do + context 'for a subgroup' do let(:subgroup) { create(:group, :private, parent: private_group) } context 'when the parent group share_with_group_lock is enabled' do diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb index 68b791320963..3ae7c7b1c1db 100644 --- a/spec/services/issues/update_service_spec.rb +++ b/spec/services/issues/update_service_spec.rb @@ -116,7 +116,7 @@ def update_issue(opts) expect(issue.relative_position).to be_between(issue1.relative_position, issue2.relative_position) end - context 'when moving issue between issues from different projects', :nested_groups do + context 'when moving issue between issues from different projects' do let(:group) { create(:group) } let(:subgroup) { create(:group, parent: group) } @@ -703,7 +703,7 @@ def update_issue(opts) end end - context 'when moving an issue ', :nested_groups do + context 'when moving an issue ' do it 'raises an error for invalid move ids within a project' do opts = { move_between_ids: [9000, 9999] } diff --git a/spec/services/members/destroy_service_spec.rb b/spec/services/members/destroy_service_spec.rb index 52f9a305d8f5..7dce7f035d40 100644 --- a/spec/services/members/destroy_service_spec.rb +++ b/spec/services/members/destroy_service_spec.rb @@ -267,15 +267,15 @@ expect(group.members.map(&:user)).not_to include(member_user) end - it 'removes the subgroup membership', :postgresql do + it 'removes the subgroup membership' do expect(subgroup.members.map(&:user)).not_to include(member_user) end - it 'removes the subsubgroup membership', :postgresql do + it 'removes the subsubgroup membership' do expect(subsubgroup.members.map(&:user)).not_to include(member_user) end - it 'removes the subsubproject membership', :postgresql do + it 'removes the subsubproject membership' do expect(subsubproject.members.map(&:user)).not_to include(member_user) end diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index c20de1fd0798..1dcade1de0d7 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -111,7 +111,7 @@ should_email(participant) end - context 'for subgroups', :nested_groups do + context 'for subgroups' do before do build_group(project) end @@ -337,7 +337,7 @@ it_behaves_like 'new note notifications' - context 'which is a subgroup', :nested_groups do + context 'which is a subgroup' do let!(:parent) { create(:group) } let!(:group) { create(:group, parent: parent) } @@ -388,7 +388,7 @@ should_email(admin) end - context 'on project that belongs to subgroup', :nested_groups do + context 'on project that belongs to subgroup' do let(:group_reporter) { create(:user) } let(:group_guest) { create(:user) } let(:parent_group) { create(:group) } @@ -458,7 +458,7 @@ should_not_email_nested_group_user(@pg_disabled) end - it 'notifies parent group members with mention level', :nested_groups do + it 'notifies parent group members with mention level' do note = create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: "@#{@pg_mention.username}") notification.new_note(note) @@ -2410,52 +2410,40 @@ def build_group(project, visibility: :public) group end - # Creates a nested group only if supported - # to avoid errors on MySQL def create_nested_group(visibility) - if Group.supports_nested_objects? - parent_group = create(:group, visibility) - child_group = create(:group, visibility, parent: parent_group) + parent_group = create(:group, visibility) + child_group = create(:group, visibility, parent: parent_group) - # Parent group member: global=disabled, parent_group=watch, child_group=global - @pg_watcher ||= create_user_with_notification(:watch, 'parent_group_watcher', parent_group) - @pg_watcher.notification_settings_for(nil).disabled! + # Parent group member: global=disabled, parent_group=watch, child_group=global + @pg_watcher ||= create_user_with_notification(:watch, 'parent_group_watcher', parent_group) + @pg_watcher.notification_settings_for(nil).disabled! - # Parent group member: global=global, parent_group=disabled, child_group=global - @pg_disabled ||= create_user_with_notification(:disabled, 'parent_group_disabled', parent_group) - @pg_disabled.notification_settings_for(nil).global! + # Parent group member: global=global, parent_group=disabled, child_group=global + @pg_disabled ||= create_user_with_notification(:disabled, 'parent_group_disabled', parent_group) + @pg_disabled.notification_settings_for(nil).global! - # Parent group member: global=global, parent_group=mention, child_group=global - @pg_mention ||= create_user_with_notification(:mention, 'parent_group_mention', parent_group) - @pg_mention.notification_settings_for(nil).global! + # Parent group member: global=global, parent_group=mention, child_group=global + @pg_mention ||= create_user_with_notification(:mention, 'parent_group_mention', parent_group) + @pg_mention.notification_settings_for(nil).global! - # Parent group member: global=global, parent_group=participating, child_group=global - @pg_participant ||= create_user_with_notification(:participating, 'parent_group_participant', parent_group) - @pg_mention.notification_settings_for(nil).global! + # Parent group member: global=global, parent_group=participating, child_group=global + @pg_participant ||= create_user_with_notification(:participating, 'parent_group_participant', parent_group) + @pg_mention.notification_settings_for(nil).global! - child_group - else - create(:group, visibility) - end + child_group end def add_member_for_parent_group(user, project) - return unless Group.supports_nested_objects? - project.reload project.group.parent.add_maintainer(user) end def should_email_nested_group_user(user, times: 1, recipients: email_recipients) - return unless Group.supports_nested_objects? - should_email(user, times: 1, recipients: email_recipients) end def should_not_email_nested_group_user(user, recipients: email_recipients) - return unless Group.supports_nested_objects? - should_not_email(user, recipients: email_recipients) end diff --git a/spec/services/projects/autocomplete_service_spec.rb b/spec/services/projects/autocomplete_service_spec.rb index 2f70c8ea94d7..b625653bc77e 100644 --- a/spec/services/projects/autocomplete_service_spec.rb +++ b/spec/services/projects/autocomplete_service_spec.rb @@ -118,7 +118,7 @@ expect(milestone_titles).to eq([group_milestone2.title, group_milestone1.title]) end - context 'with nested groups', :nested_groups do + context 'with nested groups' do let(:subgroup) { create(:group, :public, parent: group) } let!(:subgroup_milestone) { create(:milestone, group: subgroup) } diff --git a/spec/services/todos/destroy/entity_leave_service_spec.rb b/spec/services/todos/destroy/entity_leave_service_spec.rb index 2a553e188078..ce809bbf6c5e 100644 --- a/spec/services/todos/destroy/entity_leave_service_spec.rb +++ b/spec/services/todos/destroy/entity_leave_service_spec.rb @@ -176,7 +176,7 @@ end end - context 'with nested groups', :nested_groups do + context 'with nested groups' do let(:subgroup) { create(:group, :private, parent: group) } let(:subgroup2) { create(:group, :private, parent: group) } let(:subproject) { create(:project, group: subgroup) } diff --git a/spec/services/todos/destroy/group_private_service_spec.rb b/spec/services/todos/destroy/group_private_service_spec.rb index a1798686d7c1..7dd495847b3a 100644 --- a/spec/services/todos/destroy/group_private_service_spec.rb +++ b/spec/services/todos/destroy/group_private_service_spec.rb @@ -35,7 +35,7 @@ expect(project_member.todos).to match_array([todo_project_member]) end - context 'with nested groups', :nested_groups do + context 'with nested groups' do let(:parent_group) { create(:group) } let(:subgroup) { create(:group, :private, parent: group) } let(:subproject) { create(:project, group: subgroup) } diff --git a/spec/services/users/refresh_authorized_projects_service_spec.rb b/spec/services/users/refresh_authorized_projects_service_spec.rb index 0287a24808d2..f5a914bb482b 100644 --- a/spec/services/users/refresh_authorized_projects_service_spec.rb +++ b/spec/services/users/refresh_authorized_projects_service_spec.rb @@ -135,7 +135,7 @@ end end - context 'projects of subgroups of groups the user is a member of', :nested_groups do + context 'projects of subgroups of groups the user is a member of' do let(:group) { create(:group) } let(:nested_group) { create(:group, parent: group) } let!(:other_project) { create(:project, group: nested_group) } @@ -163,7 +163,7 @@ end end - context 'projects shared with subgroups of groups the user is a member of', :nested_groups do + context 'projects shared with subgroups of groups the user is a member of' do let(:group) { create(:group) } let(:nested_group) { create(:group, parent: group) } let(:other_project) { create(:project) } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index cfecdb06f330..0255e1505431 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -260,14 +260,6 @@ Gitlab::CurrentSettings.clear_in_memory_application_settings! end - config.around(:each, :nested_groups) do |example| - example.run if Group.supports_nested_objects? - end - - config.around(:each, :postgresql) do |example| - example.run if Gitlab::Database.postgresql? - end - # This makes sure the `ApplicationController#can?` method is stubbed with the # original implementation for all view specs. config.before(:each, type: :view) do diff --git a/spec/support/controllers/githubish_import_controller_shared_examples.rb b/spec/support/controllers/githubish_import_controller_shared_examples.rb index 5bb1269a19df..5fd303e73364 100644 --- a/spec/support/controllers/githubish_import_controller_shared_examples.rb +++ b/spec/support/controllers/githubish_import_controller_shared_examples.rb @@ -321,7 +321,7 @@ def assign_session_token(provider) end end - context 'user has chosen an existing nested namespace and name for the project', :postgresql do + context 'user has chosen an existing nested namespace and name for the project' do let(:parent_namespace) { create(:group, name: 'foo') } let(:nested_namespace) { create(:group, name: 'bar', parent: parent_namespace) } let(:test_name) { 'test_name' } @@ -340,7 +340,7 @@ def assign_session_token(provider) end end - context 'user has chosen a non-existent nested namespaces and name for the project', :postgresql do + context 'user has chosen a non-existent nested namespaces and name for the project' do let(:test_name) { 'test_name' } it 'takes the selected namespace and name' do @@ -371,7 +371,7 @@ def assign_session_token(provider) end end - context 'user has chosen existent and non-existent nested namespaces and name for the project', :postgresql do + context 'user has chosen existent and non-existent nested namespaces and name for the project' do let(:test_name) { 'test_name' } let!(:parent_namespace) { create(:group, name: 'foo') } diff --git a/spec/support/shared_contexts/policies/group_policy_shared_context.rb b/spec/support/shared_contexts/policies/group_policy_shared_context.rb index 74389c4d82bc..c11725c63d23 100644 --- a/spec/support/shared_contexts/policies/group_policy_shared_context.rb +++ b/spec/support/shared_contexts/policies/group_policy_shared_context.rb @@ -31,7 +31,7 @@ :admin_group_member, :change_visibility_level, :set_note_created_at, - (Gitlab::Database.postgresql? ? :create_subgroup : nil) + :create_subgroup ].compact end diff --git a/spec/views/groups/edit.html.haml_spec.rb b/spec/views/groups/edit.html.haml_spec.rb index 29e15960fb80..47804411b9d2 100644 --- a/spec/views/groups/edit.html.haml_spec.rb +++ b/spec/views/groups/edit.html.haml_spec.rb @@ -35,7 +35,7 @@ it_behaves_like '"Share with group lock" setting', { disabled: false, checked: false } end - context 'for a subgroup', :nested_groups do + context 'for a subgroup' do let!(:subgroup) { create(:group, parent: root_group) } let(:sub_owner) { create(:user) } let(:test_group) { subgroup } diff --git a/spec/views/layouts/header/_new_dropdown.haml_spec.rb b/spec/views/layouts/header/_new_dropdown.haml_spec.rb index 2e19d0cec260..26e429ac5d03 100644 --- a/spec/views/layouts/header/_new_dropdown.haml_spec.rb +++ b/spec/views/layouts/header/_new_dropdown.haml_spec.rb @@ -28,7 +28,7 @@ ) end - it 'has a "New subgroup" link', :nested_groups do + it 'has a "New subgroup" link' do render expect(rendered).to have_link( -- GitLab