diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-01-17 03:13:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-01-17 03:13:42 +0000 |
commit | 5124cc5f8273501c5369320bbabaca89fdfadc43 (patch) | |
tree | 6be0750f7a01e84cc1b61f25c32e5ebb7c6ddd7f | |
parent | aeaaaaf074f64a60e1b7827f6949d0aa78831460 (diff) | |
download | gitlab-ce-5124cc5f8273501c5369320bbabaca89fdfadc43.tar.gz |
Add latest changes from gitlab-org/gitlab@master
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 |