summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GITLAB_SHELL_VERSION2
-rw-r--r--app/finders/groups/user_groups_finder.rb3
-rw-r--r--app/graphql/resolvers/users/groups_resolver.rb4
-rw-r--r--app/graphql/types/user_interface.rb3
-rw-r--r--app/helpers/namespaces_helper.rb7
-rw-r--r--app/views/projects/_new_project_fields.html.haml23
-rw-r--r--config/feature_flags/development/paginatable_namespace_drop_down_for_project_creation.yml8
-rw-r--r--doc/api/graphql/reference/index.md8
-rw-r--r--qa/qa/page/project/new.rb1
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb3
-rw-r--r--qa/qa/specs/features/browser_ui/5_package/container_registry/online_garbage_collection_spec.rb5
-rw-r--r--spec/features/projects/import_export/import_file_spec.rb3
-rw-r--r--spec/features/projects/new_project_spec.rb38
-rw-r--r--spec/features/projects/user_creates_project_spec.rb17
-rw-r--r--spec/finders/groups/user_groups_finder_spec.rb17
-rw-r--r--spec/frontend/environments/new_environment_item_spec.js31
-rw-r--r--spec/graphql/resolvers/users/groups_resolver_spec.rb8
-rw-r--r--spec/helpers/namespaces_helper_spec.rb38
18 files changed, 69 insertions, 150 deletions
diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION
index 516e0c5f549..35d41ddb27d 100644
--- a/GITLAB_SHELL_VERSION
+++ b/GITLAB_SHELL_VERSION
@@ -1 +1 @@
-13.22.1
+13.22.2
diff --git a/app/finders/groups/user_groups_finder.rb b/app/finders/groups/user_groups_finder.rb
index 5946e3a8933..f4aed413867 100644
--- a/app/finders/groups/user_groups_finder.rb
+++ b/app/finders/groups/user_groups_finder.rb
@@ -53,8 +53,7 @@ module Groups
end
def permission_scope_create_projects?
- params[:permission_scope] == :create_projects &&
- Feature.enabled?(:paginatable_namespace_drop_down_for_project_creation, current_user, default_enabled: :yaml)
+ params[:permission_scope] == :create_projects
end
end
end
diff --git a/app/graphql/resolvers/users/groups_resolver.rb b/app/graphql/resolvers/users/groups_resolver.rb
index eafb56d8f4c..d8492a8fcf9 100644
--- a/app/graphql/resolvers/users/groups_resolver.rb
+++ b/app/graphql/resolvers/users/groups_resolver.rb
@@ -23,10 +23,6 @@ module Resolvers
Preloaders::GroupPolicyPreloader.new(nodes, current_user).execute
end
- def ready?(**args)
- Feature.enabled?(:paginatable_namespace_drop_down_for_project_creation, current_user, default_enabled: :yaml)
- end
-
private
def resolve_groups(**args)
diff --git a/app/graphql/types/user_interface.rb b/app/graphql/types/user_interface.rb
index 7cc201b6df4..6bb4cb29cdd 100644
--- a/app/graphql/types/user_interface.rb
+++ b/app/graphql/types/user_interface.rb
@@ -64,8 +64,7 @@ module Types
description: 'Group memberships of the user.'
field :groups,
resolver: Resolvers::Users::GroupsResolver,
- description: 'Groups where the user has access. Will always return `null` if ' \
- '`paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.'
+ description: 'Groups where the user has access.'
field :group_count,
resolver: Resolvers::Users::GroupCountResolver,
description: 'Group count for the user.'
diff --git a/app/helpers/namespaces_helper.rb b/app/helpers/namespaces_helper.rb
index 6acec417a75..64b58d28fc9 100644
--- a/app/helpers/namespaces_helper.rb
+++ b/app/helpers/namespaces_helper.rb
@@ -49,13 +49,6 @@ module NamespacesHelper
end
end
- def namespaces_options_with_developer_maintainer_access(options = {})
- selected = options.delete(:selected) || :current_user
- options[:groups] = current_user.manageable_groups_with_routes(include_groups_with_developer_maintainer_access: true)
-
- namespaces_options(selected, **options)
- end
-
def cascading_namespace_settings_popover_data(attribute, group, settings_path_helper)
locked_by_ancestor = group.namespace_settings.public_send("#{attribute}_locked_by_ancestor?") # rubocop:disable GitlabSecurity/PublicSend
diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml
index b1412b4dc65..0b5da84e4e3 100644
--- a/app/views/projects/_new_project_fields.html.haml
+++ b/app/views/projects/_new_project_fields.html.haml
@@ -15,23 +15,12 @@
.input-group.gl-flex-nowrap
- if current_user.can_select_namespace?
- namespace_id = namespace_id_from(params)
- - if Feature.enabled?(:paginatable_namespace_drop_down_for_project_creation, current_user, default_enabled: :yaml)
- .js-vue-new-project-url-select{ data: { namespace_full_path: GroupFinder.new(current_user).execute(id: namespace_id)&.full_path,
- namespace_id: namespace_id,
- root_url: root_url,
- track_label: track_label,
- user_namespace_full_path: current_user.namespace.full_path,
- user_namespace_id: current_user.namespace.id } }
- - else
- .input-group-prepend.flex-shrink-0.has-tooltip{ title: root_url }
- .input-group-text
- = root_url
- = f.select(:namespace_id,
- namespaces_options_with_developer_maintainer_access(selected: namespace_id,
- display_path: true,
- extra_group: namespace_id),
- {},
- { class: 'select2 js-select-namespace qa-project-namespace-select block-truncated', data: { track_label: "#{track_label}", track_action: "activate_form_input", track_property: "project_path", track_value: "", qa_selector: "select_namespace_dropdown" }})
+ .js-vue-new-project-url-select{ data: { namespace_full_path: GroupFinder.new(current_user).execute(id: namespace_id)&.full_path,
+ namespace_id: namespace_id,
+ root_url: root_url,
+ track_label: track_label,
+ user_namespace_full_path: current_user.namespace.full_path,
+ user_namespace_id: current_user.namespace.id } }
- else
.input-group-prepend.static-namespace.flex-shrink-0.has-tooltip{ title: user_url(current_user.username) + '/' }
.input-group-text.border-0
diff --git a/config/feature_flags/development/paginatable_namespace_drop_down_for_project_creation.yml b/config/feature_flags/development/paginatable_namespace_drop_down_for_project_creation.yml
deleted file mode 100644
index f0f60d4d0b7..00000000000
--- a/config/feature_flags/development/paginatable_namespace_drop_down_for_project_creation.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: paginatable_namespace_drop_down_for_project_creation
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66112
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/338930
-milestone: '14.3'
-type: development
-group: group::project management
-default_enabled: true
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 80c9e94415a..966e20e16b4 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -12078,7 +12078,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
##### `MergeRequestAssignee.groups`
-Groups where the user has access. Will always return `null` if `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+Groups where the user has access.
Returns [`GroupConnection`](#groupconnection).
@@ -12330,7 +12330,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
##### `MergeRequestReviewer.groups`
-Groups where the user has access. Will always return `null` if `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+Groups where the user has access.
Returns [`GroupConnection`](#groupconnection).
@@ -15509,7 +15509,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
##### `UserCore.groups`
-Groups where the user has access. Will always return `null` if `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+Groups where the user has access.
Returns [`GroupConnection`](#groupconnection).
@@ -18741,7 +18741,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
###### `User.groups`
-Groups where the user has access. Will always return `null` if `paginatable_namespace_drop_down_for_project_creation` feature flag is disabled.
+Groups where the user has access.
Returns [`GroupConnection`](#groupconnection).
diff --git a/qa/qa/page/project/new.rb b/qa/qa/page/project/new.rb
index 5ff52527774..42baf1f3f87 100644
--- a/qa/qa/page/project/new.rb
+++ b/qa/qa/page/project/new.rb
@@ -14,7 +14,6 @@ module QA
view 'app/views/projects/_new_project_fields.html.haml' do
element :initialize_with_readme_checkbox
element :initialize_with_sast_checkbox
- element :project_namespace_field, 'namespaces_options' # rubocop:disable QA/ElementWithPattern
element :project_name, 'text_field :name' # rubocop:disable QA/ElementWithPattern
element :project_path, 'text_field :path' # rubocop:disable QA/ElementWithPattern
element :project_description, 'text_area :description' # rubocop:disable QA/ElementWithPattern
diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb
index 7f40818da03..0063ce2613a 100644
--- a/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb
+++ b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb
@@ -2,7 +2,7 @@
module QA
RSpec.describe 'Manage', :smoke do
- describe 'Project', :requires_admin do
+ describe 'Project' do
shared_examples 'successful project creation' do
it 'creates a new project' do
Page::Project::Show.perform do |project_page|
@@ -17,7 +17,6 @@ module QA
end
before do
- Runtime::Feature.enable(:paginatable_namespace_drop_down_for_project_creation)
Flow::Login.sign_in
project
end
diff --git a/qa/qa/specs/features/browser_ui/5_package/container_registry/online_garbage_collection_spec.rb b/qa/qa/specs/features/browser_ui/5_package/container_registry/online_garbage_collection_spec.rb
index e8d936e67b1..56e3ec82388 100644
--- a/qa/qa/specs/features/browser_ui/5_package/container_registry/online_garbage_collection_spec.rb
+++ b/qa/qa/specs/features/browser_ui/5_package/container_registry/online_garbage_collection_spec.rb
@@ -2,8 +2,7 @@
module QA
RSpec.describe 'Package' do
- # TODO: Remove :requires_admin when the `Runtime::Feature.enable` method call is removed
- describe 'Container Registry Online Garbage Collection', :registry_gc, :requires_admin, only: { subdomain: %i[pre] } do
+ describe 'Container Registry Online Garbage Collection', :registry_gc, only: { subdomain: %i[pre] } do
let(:group) { Resource::Group.fabricate_via_api! }
let(:imported_project) do
@@ -65,8 +64,6 @@ module QA
end
before do
- Runtime::Feature.enable(:paginatable_namespace_drop_down_for_project_creation)
-
Flow::Login.sign_in
imported_project
diff --git a/spec/features/projects/import_export/import_file_spec.rb b/spec/features/projects/import_export/import_file_spec.rb
index 3afd1937652..2fbec4e22f4 100644
--- a/spec/features/projects/import_export/import_file_spec.rb
+++ b/spec/features/projects/import_export/import_file_spec.rb
@@ -10,12 +10,11 @@ RSpec.describe 'Import/Export - project import integration test', :js do
let(:export_path) { "#{Dir.tmpdir}/import_file_spec" }
before do
- stub_feature_flags(paginatable_namespace_drop_down_for_project_creation: false)
stub_uploads_object_storage(FileUploader)
allow_next_instance_of(Gitlab::ImportExport) do |instance|
allow(instance).to receive(:storage_path).and_return(export_path)
end
- gitlab_sign_in(user)
+ sign_in(user)
end
after do
diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb
index 4dedd5689de..f1786c1be40 100644
--- a/spec/features/projects/new_project_spec.rb
+++ b/spec/features/projects/new_project_spec.rb
@@ -6,10 +6,6 @@ RSpec.describe 'New project', :js do
include Select2Helper
include Spec::Support::Helpers::Features::TopNavSpecHelpers
- before do
- stub_feature_flags(paginatable_namespace_drop_down_for_project_creation: false)
- end
-
context 'as a user' do
let(:user) { create(:user) }
@@ -179,7 +175,7 @@ RSpec.describe 'New project', :js do
it 'does not show the initialize with Readme checkbox on "Import project" tab' do
visit new_project_path
click_link 'Import project'
- first('.js-import-git-toggle-button').click
+ click_button 'Repo by URL'
page.within '#import-project-pane' do
expect(page).not_to have_css('input#project_initialize_with_readme')
@@ -196,9 +192,7 @@ RSpec.describe 'New project', :js do
end
it 'selects the user namespace' do
- page.within('#blank-project-pane') do
- expect(page).to have_select('project[namespace_id]', visible: false, selected: user.username)
- end
+ expect(page).to have_button user.username
end
end
@@ -212,9 +206,7 @@ RSpec.describe 'New project', :js do
end
it 'selects the group namespace' do
- page.within('#blank-project-pane') do
- expect(page).to have_select('project[namespace_id]', visible: false, selected: group.name)
- end
+ expect(page).to have_button group.name
end
end
@@ -229,9 +221,7 @@ RSpec.describe 'New project', :js do
end
it 'selects the group namespace' do
- page.within('#blank-project-pane') do
- expect(page).to have_select('project[namespace_id]', visible: false, selected: subgroup.full_path)
- end
+ expect(page).to have_button subgroup.full_path
end
end
@@ -249,22 +239,30 @@ RSpec.describe 'New project', :js do
end
it 'enables the correct visibility options' do
- select2(user.namespace_id, from: '#project_namespace_id')
+ click_button public_group.full_path
+ click_button user.username
+
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
- select2(public_group.id, from: '#project_namespace_id')
+ click_button user.username
+ click_button public_group.full_path
+
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
- select2(internal_group.id, from: '#project_namespace_id')
+ click_button public_group.full_path
+ click_button internal_group.full_path
+
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
- select2(private_group.id, from: '#project_namespace_id')
+ click_button internal_group.full_path
+ click_button private_group.full_path
+
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
@@ -355,9 +353,7 @@ RSpec.describe 'New project', :js do
end
it 'selects the group namespace' do
- page.within('#blank-project-pane') do
- expect(page).to have_select('project[namespace_id]', visible: false, selected: group.full_path)
- end
+ expect(page).to have_button group.full_path
end
end
end
diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb
index 17c65e645f4..c4e2e3353a4 100644
--- a/spec/features/projects/user_creates_project_spec.rb
+++ b/spec/features/projects/user_creates_project_spec.rb
@@ -6,7 +6,6 @@ RSpec.describe 'User creates a project', :js do
let(:user) { create(:user) }
before do
- stub_feature_flags(paginatable_namespace_drop_down_for_project_creation: false)
sign_in(user)
create(:personal_key, user: user)
end
@@ -44,9 +43,7 @@ RSpec.describe 'User creates a project', :js do
expect(page).to have_checked_field 'Initialize repository with a README'
expect(page).to have_checked_field 'Enable Static Application Security Testing (SAST)'
- page.within('#content-body') do
- click_button('Create project')
- end
+ click_button('Create project')
project = Project.last
@@ -96,12 +93,10 @@ RSpec.describe 'User creates a project', :js do
fill_in :project_name, with: 'A Subgroup Project'
fill_in :project_path, with: 'a-subgroup-project'
- page.find('.js-select-namespace').click
- page.find("div[role='option']", text: subgroup.full_path).click
+ click_button user.username
+ click_button subgroup.full_path
- page.within('#content-body') do
- click_button('Create project')
- end
+ click_button('Create project')
expect(page).to have_content("Project 'A Subgroup Project' was successfully created")
@@ -125,8 +120,8 @@ RSpec.describe 'User creates a project', :js do
fill_in :project_name, with: 'a-new-project'
fill_in :project_path, with: 'a-new-project'
- page.find('.js-select-namespace').click
- page.find("div[role='option']", text: group.full_path).click
+ click_button user.username
+ click_button group.full_path
page.within('#content-body') do
click_button('Create project')
diff --git a/spec/finders/groups/user_groups_finder_spec.rb b/spec/finders/groups/user_groups_finder_spec.rb
index 4cce3ab72eb..a4a9b8d16d0 100644
--- a/spec/finders/groups/user_groups_finder_spec.rb
+++ b/spec/finders/groups/user_groups_finder_spec.rb
@@ -59,23 +59,6 @@ RSpec.describe Groups::UserGroupsFinder do
)
end
- context 'when paginatable_namespace_drop_down_for_project_creation feature flag is disabled' do
- before do
- stub_feature_flags(paginatable_namespace_drop_down_for_project_creation: false)
- end
-
- it 'ignores project creation scope and returns all groups where the user is a direct member' do
- is_expected.to match(
- [
- public_maintainer_group,
- private_maintainer_group,
- public_developer_group,
- guest_group
- ]
- )
- end
- end
-
context 'when search is provided' do
let(:arguments) { { permission_scope: :create_projects, search: 'maintainer' } }
diff --git a/spec/frontend/environments/new_environment_item_spec.js b/spec/frontend/environments/new_environment_item_spec.js
index 1d88bedcdbe..244aef5c43b 100644
--- a/spec/frontend/environments/new_environment_item_spec.js
+++ b/spec/frontend/environments/new_environment_item_spec.js
@@ -294,7 +294,7 @@ describe('~/environments/components/new_environment_item.vue', () => {
const deployment = findDeployment();
expect(deployment.props('deployment')).toEqual(resolvedEnvironment.lastDeployment);
});
- it('should not show the last deployment to the deployment component when it is missing', () => {
+ it('should not show the last deployment when it is missing', () => {
const environment = {
...resolvedEnvironment,
lastDeployment: null,
@@ -309,4 +309,33 @@ describe('~/environments/components/new_environment_item.vue', () => {
expect(deployment.exists()).toBe(false);
});
});
+
+ describe('upcoming deployment', () => {
+ it('should pass the upcoming deployment to the deployment component when it exists', () => {
+ const upcomingDeployment = resolvedEnvironment.lastDeployment;
+ const environment = { ...resolvedEnvironment, lastDeployment: null, upcomingDeployment };
+ wrapper = createWrapper({
+ propsData: { environment },
+ apolloProvider: createApolloProvider(),
+ });
+
+ const deployment = findDeployment();
+ expect(deployment.props('deployment')).toEqual(upcomingDeployment);
+ });
+ it('should not show the upcoming deployment when it is missing', () => {
+ const environment = {
+ ...resolvedEnvironment,
+ lastDeployment: null,
+ upcomingDeployment: null,
+ };
+
+ wrapper = createWrapper({
+ propsData: { environment },
+ apolloProvider: createApolloProvider(),
+ });
+
+ const deployment = findDeployment();
+ expect(deployment.exists()).toBe(false);
+ });
+ });
});
diff --git a/spec/graphql/resolvers/users/groups_resolver_spec.rb b/spec/graphql/resolvers/users/groups_resolver_spec.rb
index 0fdb6da5ae9..5ac7aac4898 100644
--- a/spec/graphql/resolvers/users/groups_resolver_spec.rb
+++ b/spec/graphql/resolvers/users/groups_resolver_spec.rb
@@ -26,14 +26,6 @@ RSpec.describe Resolvers::Users::GroupsResolver do
public_maintainer_group.add_maintainer(user)
end
- context 'when paginatable_namespace_drop_down_for_project_creation feature flag is disabled' do
- before do
- stub_feature_flags(paginatable_namespace_drop_down_for_project_creation: false)
- end
-
- it { is_expected.to be_nil }
- end
-
context 'when resolver object is current user' do
context 'when permission is :create_projects' do
let(:group_arguments) { { permission_scope: :create_projects } }
diff --git a/spec/helpers/namespaces_helper_spec.rb b/spec/helpers/namespaces_helper_spec.rb
index 6eb560e3f5c..00aa0fd1cba 100644
--- a/spec/helpers/namespaces_helper_spec.rb
+++ b/spec/helpers/namespaces_helper_spec.rb
@@ -188,44 +188,6 @@ RSpec.describe NamespacesHelper do
helper.namespaces_options
end
end
-
- describe 'include_groups_with_developer_maintainer_access parameter' do
- context 'when DEVELOPER_MAINTAINER_PROJECT_ACCESS is set for a project' do
- let!(:admin_project_creation_level) { ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS }
-
- it 'returns groups where user is a developer' do
- allow(helper).to receive(:current_user).and_return(user)
- stub_application_setting(default_project_creation: ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS)
- admin_group.add_user(user, GroupMember::DEVELOPER)
-
- options = helper.namespaces_options_with_developer_maintainer_access
-
- expect(options).to include(admin_group.name)
- expect(options).not_to include(subgroup1.name)
- expect(options).to include(subgroup2.name)
- expect(options).not_to include(subgroup3.name)
- expect(options).to include(user_group.name)
- expect(options).to include(user.name)
- end
- end
-
- context 'when DEVELOPER_MAINTAINER_PROJECT_ACCESS is set globally' do
- it 'return groups where default is not overridden' do
- allow(helper).to receive(:current_user).and_return(user)
- stub_application_setting(default_project_creation: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS)
- admin_group.add_user(user, GroupMember::DEVELOPER)
-
- options = helper.namespaces_options_with_developer_maintainer_access
-
- expect(options).to include(admin_group.name)
- expect(options).to include(subgroup1.name)
- expect(options).to include(subgroup2.name)
- expect(options).not_to include(subgroup3.name)
- expect(options).to include(user_group.name)
- expect(options).to include(user.name)
- end
- end
- end
end
describe '#cascading_namespace_settings_popover_data' do