From 9a940dabf04df126e7978c0ab4b8770b86dcaaa8 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 7 Dec 2023 15:12:19 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop_todo/rspec/context_wording.yml | 1 - .../javascripts/group_settings/constants.js | 2 +- .../components/shared/delete_modal.vue | 4 +- .../components/custom_email.vue | 12 ++- .../components/custom_email_wrapper.vue | 1 + .../custom_email_constants.js | 10 +++ .../entity_select/entity_select.vue | 46 +++++------ .../components/entity_select/group_select.vue | 20 ++--- .../entity_select/organization_select.vue | 36 ++++----- .../entity_select/project_select.vue | 25 +++--- .../work_item_links/work_item_links.vue | 8 +- app/channels/application_cable/connection.rb | 3 +- app/controllers/acme_challenges_controller.rb | 4 +- app/controllers/application_controller.rb | 30 +------ app/controllers/base_action_controller.rb | 53 ++++++++++++ app/controllers/chaos_controller.rb | 4 +- app/controllers/health_controller.rb | 4 +- app/controllers/metrics_controller.rb | 4 +- app/helpers/application_settings_helper.rb | 9 +-- app/mailers/previews/notify_preview.rb | 4 + .../application_setting_implementation.rb | 10 +++ app/models/packages/package.rb | 6 ++ .../service_desk/custom_email_verification.rb | 3 +- .../mark_package_for_destruction_service.rb | 1 + .../mark_packages_for_destruction_service.rb | 10 +++ .../update_service.rb | 17 ++++ app/views/admin/users/show.html.haml | 5 ++ ...e_desk_verification_result_email.html.haml | 6 ++ ...ce_desk_verification_result_email.text.erb | 4 + ...pare_indexes_for_partitioning_ci_stages.rb | 20 +++++ ...ve_index_users_with_static_object_token.rb | 19 +++++ db/schema_migrations/20231205111453 | 1 + db/schema_migrations/20231206115306 | 1 + db/structure.sql | 2 - .../backup_restore/backup_gitlab.md | 15 ++-- doc/administration/geo/setup/database.md | 6 +- .../postgresql_versions.md | 10 +-- doc/api/rest/index.md | 4 + doc/api/users.md | 13 ++- doc/user/project/merge_requests/index.md | 2 +- doc/user/project/service_desk/configure.md | 20 +++++ doc/user/search/command_palette.md | 2 +- lib/api/entities/application_setting.rb | 2 + lib/api/entities/user_with_admin.rb | 1 + lib/api/project_packages.rb | 2 - lib/gitlab/base_doorkeeper_controller.rb | 4 +- lib/gitlab/request_forgery_protection.rb | 4 +- locale/gitlab.pot | 29 ++++++- qa/gdk/Dockerfile.gdk | 2 +- qa/qa/page/component/delete_modal.rb | 10 +-- .../application_cable/connection_spec.rb | 10 +++ .../work_items/work_item_children_spec.rb | 2 +- .../components/shared/delete_modal_spec.js | 2 +- .../components/custom_email_spec.js | 24 +++--- .../components/custom_email_wrapper_spec.js | 27 +++---- .../entity_select/entity_select_spec.js | 10 +-- .../entity_select/organization_select_spec.js | 44 ++++------ .../handler/service_desk_handler_spec.rb | 72 +++++++++++++---- spec/mailers/emails/service_desk_spec.rb | 5 ++ spec/models/application_setting_spec.rb | 18 +++++ spec/models/packages/package_spec.rb | 24 ++++++ .../acme_challenges_controller_spec.rb | 9 +++ .../mutations/packages/bulk_destroy_spec.rb | 20 +++++ .../mutations/packages/destroy_spec.rb | 11 +++ spec/requests/api/settings_spec.rb | 14 +++- spec/requests/api/users_spec.rb | 3 + spec/requests/application_controller_spec.rb | 15 ++++ spec/requests/chaos_controller_spec.rb | 14 ++++ spec/requests/content_security_policy_spec.rb | 79 ------------------ spec/requests/health_controller_spec.rb | 8 +- spec/requests/metrics_controller_spec.rb | 9 +++ .../oauth/authorizations_controller_spec.rb | 4 + .../requests/registrations_controller_spec.rb | 6 +- spec/requests/sessions_spec.rb | 4 + ...rk_package_for_destruction_service_spec.rb | 2 + ...k_packages_for_destruction_service_spec.rb | 71 ++++++++++------ .../update_service_spec.rb | 64 ++++++++++++++- spec/support/rspec_order_todo.yml | 1 - .../base_action_controller_shared_examples.rb | 80 +++++++++++++++++++ workhorse/go.mod | 13 +-- workhorse/go.sum | 30 +++---- 81 files changed, 826 insertions(+), 380 deletions(-) create mode 100644 app/controllers/base_action_controller.rb create mode 100644 db/post_migrate/20231205111453_prepare_indexes_for_partitioning_ci_stages.rb create mode 100644 db/post_migrate/20231206115306_remove_index_users_with_static_object_token.rb create mode 100644 db/schema_migrations/20231205111453 create mode 100644 db/schema_migrations/20231206115306 create mode 100644 spec/requests/acme_challenges_controller_spec.rb create mode 100644 spec/requests/application_controller_spec.rb create mode 100644 spec/requests/chaos_controller_spec.rb delete mode 100644 spec/requests/content_security_policy_spec.rb create mode 100644 spec/requests/metrics_controller_spec.rb create mode 100644 spec/support/shared_examples/controllers/base_action_controller_shared_examples.rb diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml index 1120d9e8a14..8026dfc4357 100644 --- a/.rubocop_todo/rspec/context_wording.yml +++ b/.rubocop_todo/rspec/context_wording.yml @@ -2398,7 +2398,6 @@ RSpec/ContextWording: - 'spec/requests/api/usage_data_spec.rb' - 'spec/requests/api/users_preferences_spec.rb' - 'spec/requests/api/users_spec.rb' - - 'spec/requests/content_security_policy_spec.rb' - 'spec/requests/dashboard/projects_controller_spec.rb' - 'spec/requests/dashboard_controller_spec.rb' - 'spec/requests/git_http_spec.rb' diff --git a/app/assets/javascripts/group_settings/constants.js b/app/assets/javascripts/group_settings/constants.js index d4ac7d94bf4..3b595bac686 100644 --- a/app/assets/javascripts/group_settings/constants.js +++ b/app/assets/javascripts/group_settings/constants.js @@ -1,7 +1,7 @@ import { __, s__ } from '~/locale'; export const I18N_CONFIRM_MESSAGE = s__( - 'Runners|Shared runners will be disabled for all projects and subgroups in this group. If you proceed, you must manually re-enable shared runners in the settings of each project and subgroup.', + 'Runners|Shared runners will be disabled for all projects and subgroups in this group.', ); export const I18N_CONFIRM_OK = s__('Runners|Yes, disable shared runners'); export const I18N_CONFIRM_CANCEL = s__('Runners|No, keep shared runners enabled'); diff --git a/app/assets/javascripts/projects/components/shared/delete_modal.vue b/app/assets/javascripts/projects/components/shared/delete_modal.vue index 44e29d00d45..db2e283f9d2 100644 --- a/app/assets/javascripts/projects/components/shared/delete_modal.vue +++ b/app/assets/javascripts/projects/components/shared/delete_modal.vue @@ -74,7 +74,7 @@ export default { attributes: { variant: 'danger', disabled: this.confirmDisabled, - 'data-qa-selector': 'confirm_delete_button', + 'data-testid': 'confirm-delete-button', }, }, cancel: { @@ -147,7 +147,7 @@ export default { v-model="userInput" name="confirm_name_input" type="text" - data-qa-selector="confirm_name_field" + data-testid="confirm-name-field" /> diff --git a/app/assets/javascripts/projects/settings_service_desk/components/custom_email.vue b/app/assets/javascripts/projects/settings_service_desk/components/custom_email.vue index f7a9949db4b..6d5443a5df0 100644 --- a/app/assets/javascripts/projects/settings_service_desk/components/custom_email.vue +++ b/app/assets/javascripts/projects/settings_service_desk/components/custom_email.vue @@ -25,6 +25,10 @@ export default { I18N_STATE_VERIFICATION_FINISHED_TOGGLE_HELP, I18N_RESET_BUTTON_LABEL, props: { + incomingEmail: { + type: String, + required: true, + }, customEmail: { type: String, required: true, @@ -128,7 +132,13 @@ export default {

{{ errorLabel }}

-

{{ errorDescription }}

+

+ + + +

{{ resetNote }}

diff --git a/app/assets/javascripts/projects/settings_service_desk/components/custom_email_wrapper.vue b/app/assets/javascripts/projects/settings_service_desk/components/custom_email_wrapper.vue index f72aa19bdf2..2fe3ea4215a 100644 --- a/app/assets/javascripts/projects/settings_service_desk/components/custom_email_wrapper.vue +++ b/app/assets/javascripts/projects/settings_service_desk/components/custom_email_wrapper.vue @@ -216,6 +216,7 @@ export default { item.value === value).text; - this.$emit('input', { - value: this.selectedValue, - text: this.selectedText, - }); - }, - get() { - return this.selectedValue; - }, + selectedItem() { + const item = this.items.find(({ value }) => value === this.selected); + + return item || this.initialSelectedItem; }, toggleText() { - return this.selectedText ?? this.defaultToggleText; + return this.selectedItem?.text ?? this.defaultToggleText; }, resetButtonLabel() { return this.clearable ? RESET_LABEL : ''; }, - inputValue() { - return this.selectedValue ? this.selectedValue : ''; - }, isSearchQueryTooShort() { return this.searchString && this.searchString.length < MINIMUM_QUERY_LENGTH; }, @@ -115,8 +103,13 @@ export default { : this.$options.i18n.noResultsText; }, }, + watch: { + selected() { + this.$emit('input', this.selectedItem); + }, + }, created() { - this.fetchInitialSelection(); + this.getInitialSelection(); }, methods: { search: debounce(function debouncedSearch(searchString) { @@ -148,23 +141,20 @@ export default { this.searching = false; this.infiniteScrollLoading = false; }, - async fetchInitialSelection() { + async getInitialSelection() { if (!this.initialSelection) { this.pristine = false; return; } - if (!this.fetchInitialSelectionText) { + if (!this.fetchInitialSelection) { throw new Error( '`initialSelection` is provided but lacks `fetchInitialSelectionText` to retrieve the corresponding text', ); } this.searching = true; - const name = await this.fetchInitialSelectionText(this.initialSelection); - - this.selectedValue = this.initialSelection; - this.selectedText = name; + this.initialSelectedItem = await this.fetchInitialSelection(this.initialSelection); this.pristine = false; this.searching = false; }, @@ -218,6 +208,6 @@ export default { - + diff --git a/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue b/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue index 8a338551fbe..da42c017541 100644 --- a/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue +++ b/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue @@ -76,11 +76,7 @@ export default { try { const url = groupsPath(this.groupsFilter, this.parentGroupID); const { data = [], headers } = await axios.get(url, { params }); - groups = data.map((group) => ({ - ...group, - text: group.full_name, - value: String(group.id), - })); + groups = data.map((group) => this.mapGroupData(group)); totalPages = parseIntPagination(normalizeHeaders(headers)).totalPages; } catch (error) { @@ -88,15 +84,19 @@ export default { } return { items: groups, totalPages }; }, - async fetchGroupName(groupId) { - let groupName = ''; + async fetchInitialGroup(groupId) { try { const group = await Api.group(groupId); - groupName = group.full_name; + + return this.mapGroupData(group); } catch (error) { this.handleError({ message: FETCH_GROUP_ERROR, error }); + + return {}; } - return groupName; + }, + mapGroupData(group) { + return { ...group, text: group.full_name, value: String(group.id) }; }, handleError({ message, error }) { Sentry.captureException(error); @@ -123,7 +123,7 @@ export default { :header-text="$options.i18n.selectGroup" :default-toggle-text="$options.i18n.toggleText" :fetch-items="fetchGroups" - :fetch-initial-selection-text="fetchGroupName" + :fetch-initial-selection="fetchInitialGroup" v-on="$listeners" >