From 7ff36fc6e9f0f5dffb41bfc79b4f07b2ce93e1c7 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 16 May 2022 18:09:11 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/CODEOWNERS | 10 - .rubocop_todo/layout/line_length.yml | 7 - .rubocop_todo/rspec/any_instance_of.yml | 1 - .rubocop_todo/rspec/verified_doubles.yml | 4 - .../components/alerts_settings_wrapper.vue | 2 +- .../javascripts/boards/stores/actions.js | 4 +- .../content_editor/extensions/blockquote.js | 2 +- .../services/markdown_sourcemap.js | 2 +- .../source_editor_extension_base.js | 2 +- .../issues/create_merge_request_dropdown.js | 1 - .../sidebar_job_details_container.vue | 2 +- .../javascripts/lib/utils/common_utils.js | 4 +- .../javascripts/pipeline_editor/index.js | 2 +- .../components/pipeline_new_form.vue | 2 +- app/assets/javascripts/pipeline_new/index.js | 2 +- .../pipelines/pipeline_details_dag.js | 2 +- .../pipelines/pipeline_details_header.js | 2 +- .../pipeline_details_notification.js | 2 +- .../runner/components/runner_pagination.vue | 4 +- .../filtered_search_bar/constants.js | 2 +- app/controllers/application_controller.rb | 7 + .../types/root_storage_statistics_type.rb | 1 + app/helpers/merge_requests_helper.rb | 4 +- app/helpers/users/group_callouts_helper.rb | 2 - app/models/users/callout.rb | 3 +- app/views/errors/request_conflict.html.haml | 18 ++ config/application.rb | 18 +- doc/api/graphql/reference/index.md | 2 + .../compliance/license_compliance/index.md | 4 +- .../img/confidential_issues_issue_page.png | Bin 25354 -> 24484 bytes .../issues/img/sidebar_confidential_issue.png | Bin 4648 -> 5404 bytes .../issues/img/turn_off_confidentiality.png | Bin 10851 -> 28579 bytes .../issues/img/turn_on_confidentiality.png | Bin 13513 -> 7550 bytes ...backfill_namespace_id_for_project_route.rb | 7 +- .../Jobs/License-Scanning.gitlab-ci.yml | 2 +- .../kubernetes/cilium_network_policy.rb | 141 --------- lib/gitlab/kubernetes/kube_client.rb | 18 -- lib/gitlab/kubernetes/network_policy.rb | 98 ------- .../kubernetes/network_policy_common.rb | 63 ---- lib/gitlab/subscription_portal.rb | 2 +- locale/gitlab.pot | 38 +-- .../__helpers__/vuex_action_helper.js | 9 +- .../frontend/__helpers__/wait_for_promises.js | 5 +- spec/frontend/boards/project_select_spec.js | 5 +- .../components/new_dropdown/upload_spec.js | 4 +- spec/frontend/notes/stores/actions_spec.js | 4 +- spec/frontend/runner/mock_data.js | 16 +- .../filtered_search_bar_root_spec.js | 4 +- .../ide/helpers/ide_helper.js | 12 +- .../root_storage_statistics_type_spec.rb | 3 +- .../kubernetes/cilium_network_policy_spec.rb | 274 ------------------ .../lib/gitlab/kubernetes/kube_client_spec.rb | 64 ---- .../gitlab/kubernetes/network_policy_spec.rb | 235 --------------- .../network_policy_common_shared_examples.rb | 162 ----------- 54 files changed, 120 insertions(+), 1164 deletions(-) create mode 100644 app/views/errors/request_conflict.html.haml delete mode 100644 lib/gitlab/kubernetes/cilium_network_policy.rb delete mode 100644 lib/gitlab/kubernetes/network_policy.rb delete mode 100644 lib/gitlab/kubernetes/network_policy_common.rb delete mode 100644 spec/lib/gitlab/kubernetes/cilium_network_policy_spec.rb delete mode 100644 spec/lib/gitlab/kubernetes/network_policy_spec.rb delete mode 100644 spec/support/shared_examples/lib/gitlab/kubernetes/network_policy_common_shared_examples.rb diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 516a61edb62..8b64c81f0f7 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -106,18 +106,8 @@ Dangerfile @gl-quality/eng-prod /ee/spec/requests/projects/security/policies_controller_spec.rb @gitlab-org/protect/container-security-backend /ee/app/models/security/orchestration_policy_configuration.rb @gitlab-org/protect/container-security-backend /ee/spec/models/security/orchestration_policy_configuration_spec.rb @gitlab-org/protect/container-security-backend -/lib/gitlab/kubernetes/cilium_network_policy.rb @gitlab-org/protect/container-security-backend -/spec/lib/gitlab/kubernetes/cilium_network_policy_spec.rb @gitlab-org/protect/container-security-backend -/lib/gitlab/kubernetes/network_policy_common.rb @gitlab-org/protect/container-security-backend -/spec/support/shared_examples/lib/gitlab/kubernetes/network_policy_common_shared_examples.rb @gitlab-org/protect/container-security-backend -/lib/gitlab/kubernetes/network_policy.rb @gitlab-org/protect/container-security-backend -/spec/lib/gitlab/kubernetes/network_policy_spec.rb @gitlab-org/protect/container-security-backend -/ee/app/services/network_policies/** @gitlab-org/protect/container-security-backend -/ee/spec/services/network_policies/** @gitlab-org/protect/container-security-backend /app/models/clusters/applications/cilium.rb @gitlab-org/protect/container-security-backend /spec/models/clusters/applications/cilium_spec.rb @gitlab-org/protect/container-security-backend -/ee/app/services/network_policies/** @gitlab-org/protect/container-security-backend -/ee/spec/services/network_policies/** @gitlab-org/protect/container-security-backend /ee/app/services/security/orchestration/** @gitlab-org/protect/container-security-backend /ee/spec/services/security/orchestration/** @gitlab-org/protect/container-security-backend diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml index b718a6772a3..345bf1bff92 100644 --- a/.rubocop_todo/layout/line_length.yml +++ b/.rubocop_todo/layout/line_length.yml @@ -1572,8 +1572,6 @@ Layout/LineLength: - 'ee/app/services/merge_trains/refresh_merge_request_service.rb' - 'ee/app/services/namespaces/check_excess_storage_size_service.rb' - 'ee/app/services/namespaces/check_storage_size_service.rb' - - 'ee/app/services/network_policies/resources_service.rb' - - 'ee/app/services/network_policies/types.rb' - 'ee/app/services/personal_access_tokens/rotation_verifier_service.rb' - 'ee/app/services/projects/licenses/create_policy_service.rb' - 'ee/app/services/projects/mark_for_deletion_service.rb' @@ -2942,10 +2940,6 @@ Layout/LineLength: - 'ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb' - 'ee/spec/services/merge_trains/refresh_service_spec.rb' - 'ee/spec/services/namespaces/check_excess_storage_size_service_spec.rb' - - 'ee/spec/services/network_policies/delete_resource_service_spec.rb' - - 'ee/spec/services/network_policies/deploy_resource_service_spec.rb' - - 'ee/spec/services/network_policies/find_resource_service_spec.rb' - - 'ee/spec/services/network_policies/resources_service_spec.rb' - 'ee/spec/services/personal_access_tokens/create_service_audit_log_spec.rb' - 'ee/spec/services/personal_access_tokens/rotation_verifier_service_spec.rb' - 'ee/spec/services/projects/alerting/notify_service_spec.rb' @@ -3082,7 +3076,6 @@ Layout/LineLength: - 'ee/spec/support/shared_examples/services/geo/geo_request_service_shared_examples.rb' - 'ee/spec/support/shared_examples/services/group_saml/saml_provider/base_service_shared_examples.rb' - 'ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb' - - 'ee/spec/support/shared_examples/services/network_policies/kubeclient_error_shared_examples.rb' - 'ee/spec/support/shared_examples/services/scoped_label_shared_examples.rb' - 'ee/spec/support/shared_examples/services/search_notes_shared_examples.rb' - 'ee/spec/support/shared_examples/services/sync_issue_and_requirement_state_shared_examples.rb' diff --git a/.rubocop_todo/rspec/any_instance_of.yml b/.rubocop_todo/rspec/any_instance_of.yml index f4edf741d89..00f4a3982e8 100644 --- a/.rubocop_todo/rspec/any_instance_of.yml +++ b/.rubocop_todo/rspec/any_instance_of.yml @@ -107,7 +107,6 @@ RSpec/AnyInstanceOf: - ee/spec/services/groups/destroy_service_spec.rb - ee/spec/services/groups/update_service_spec.rb - ee/spec/services/merge_trains/check_status_service_spec.rb - - ee/spec/services/network_policies/resources_service_spec.rb - ee/spec/services/projects/destroy_service_spec.rb - ee/spec/services/projects/group_links/destroy_service_spec.rb - ee/spec/services/projects/update_service_spec.rb diff --git a/.rubocop_todo/rspec/verified_doubles.yml b/.rubocop_todo/rspec/verified_doubles.yml index a2cca0b5b29..2a4ee9f31f1 100644 --- a/.rubocop_todo/rspec/verified_doubles.yml +++ b/.rubocop_todo/rspec/verified_doubles.yml @@ -194,10 +194,6 @@ RSpec/VerifiedDoubles: - ee/spec/services/merge_requests/build_service_spec.rb - ee/spec/services/merge_requests/reset_approvals_service_spec.rb - ee/spec/services/namespaces/in_product_marketing_emails_service_spec.rb - - ee/spec/services/network_policies/delete_resource_service_spec.rb - - ee/spec/services/network_policies/deploy_resource_service_spec.rb - - ee/spec/services/network_policies/find_resource_service_spec.rb - - ee/spec/services/network_policies/resources_service_spec.rb - ee/spec/services/projects/update_mirror_service_spec.rb - ee/spec/services/projects/update_pages_service_spec.rb - ee/spec/services/security/ingestion/ingest_report_slice_service_spec.rb diff --git a/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue b/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue index 902bad780ad..1f970ef1846 100644 --- a/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue +++ b/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue @@ -196,7 +196,7 @@ export default { .then( ({ data: { httpIntegrationResetToken, prometheusIntegrationResetToken } = {} } = {}) => { const [error] = - httpIntegrationResetToken?.errors || prometheusIntegrationResetToken?.errors; + httpIntegrationResetToken?.errors || prometheusIntegrationResetToken.errors; if (error) { return createFlash({ message: error }); } diff --git a/app/assets/javascripts/boards/stores/actions.js b/app/assets/javascripts/boards/stores/actions.js index ca4709bfeb6..a84b678a5d9 100644 --- a/app/assets/javascripts/boards/stores/actions.js +++ b/app/assets/javascripts/boards/stores/actions.js @@ -135,7 +135,7 @@ export default { variables, }) .then(({ data }) => { - const { lists, hideBacklogList } = data[boardType]?.board; + const { lists, hideBacklogList } = data[boardType].board; commit(types.RECEIVE_BOARD_LISTS_SUCCESS, formatBoardLists(lists)); // Backlog list needs to be created if it doesn't exist and it's not hidden if (!lists.nodes.find((l) => l.listType === ListType.backlog) && !hideBacklogList) { @@ -430,7 +430,7 @@ export default { variables, }) .then(({ data }) => { - const { lists } = data[boardType]?.board; + const { lists } = data[boardType].board; const listItems = formatListIssues(lists); const listPageInfo = formatListsPageInfo(lists); commit(types.RECEIVE_ITEMS_FOR_LIST_SUCCESS, { listItems, listPageInfo, listId }); diff --git a/app/assets/javascripts/content_editor/extensions/blockquote.js b/app/assets/javascripts/content_editor/extensions/blockquote.js index 5632bc28592..9b424ac8367 100644 --- a/app/assets/javascripts/content_editor/extensions/blockquote.js +++ b/app/assets/javascripts/content_editor/extensions/blockquote.js @@ -26,7 +26,7 @@ export default Blockquote.extend({ const multilineInputRegex = /^\s*>>>\s$/gm; return [ - ...this.parent?.(), + ...this.parent(), wrappingInputRule({ find: multilineInputRegex, type: this.type, diff --git a/app/assets/javascripts/content_editor/services/markdown_sourcemap.js b/app/assets/javascripts/content_editor/services/markdown_sourcemap.js index 4285e04bbab..fe1b32c5b0a 100644 --- a/app/assets/javascripts/content_editor/services/markdown_sourcemap.js +++ b/app/assets/javascripts/content_editor/services/markdown_sourcemap.js @@ -30,7 +30,7 @@ export const getMarkdownSource = (element) => { for (let i = range.start.row; i <= range.end.row; i += 1) { if (i === range.start.row) { - elSource += source[i]?.substring(range.start.col); + elSource += source[i].substring(range.start.col); } else if (i === range.end.row) { elSource += `\n${source[i]?.substring(0, range.start.col)}`; } else { diff --git a/app/assets/javascripts/editor/extensions/source_editor_extension_base.js b/app/assets/javascripts/editor/extensions/source_editor_extension_base.js index 49b9a74fdb2..0590bb7455a 100644 --- a/app/assets/javascripts/editor/extensions/source_editor_extension_base.js +++ b/app/assets/javascripts/editor/extensions/source_editor_extension_base.js @@ -64,7 +64,7 @@ export class SourceEditorExtension { const [start, end] = bounds && Array.isArray(bounds) ? bounds - : window.location.hash?.replace(hashRegexp, '').split('-'); + : window.location.hash.replace(hashRegexp, '').split('-'); let startLine = start ? parseInt(start, 10) : null; let endLine = end ? parseInt(end, 10) : startLine; if (endLine < startLine) { diff --git a/app/assets/javascripts/issues/create_merge_request_dropdown.js b/app/assets/javascripts/issues/create_merge_request_dropdown.js index 3ea70c07058..8294c018117 100644 --- a/app/assets/javascripts/issues/create_merge_request_dropdown.js +++ b/app/assets/javascripts/issues/create_merge_request_dropdown.js @@ -170,7 +170,6 @@ export default class CreateMergeRequestDropdown { createMergeRequest() { return new Promise(() => { this.isCreatingMergeRequest = true; - return this.createBranch().then(() => { let path = canCreateConfidentialMergeRequest() ? this.createMrPath.replace( diff --git a/app/assets/javascripts/jobs/components/sidebar_job_details_container.vue b/app/assets/javascripts/jobs/components/sidebar_job_details_container.vue index f1db3db0cb5..2ba531c9e95 100644 --- a/app/assets/javascripts/jobs/components/sidebar_job_details_container.vue +++ b/app/assets/javascripts/jobs/components/sidebar_job_details_container.vue @@ -56,7 +56,7 @@ export default { }); }, runnerId() { - const { id, short_sha: token, description } = this.job?.runner; + const { id, short_sha: token, description } = this.job.runner; return `#${id} (${token}) ${description}`; }, diff --git a/app/assets/javascripts/lib/utils/common_utils.js b/app/assets/javascripts/lib/utils/common_utils.js index e391927d853..1ed0cc3130b 100644 --- a/app/assets/javascripts/lib/utils/common_utils.js +++ b/app/assets/javascripts/lib/utils/common_utils.js @@ -12,7 +12,7 @@ import { isObject } from './type_utility'; import { getLocationHash } from './url_utility'; export const getPagePath = (index = 0) => { - const { page = '' } = document?.body?.dataset; + const { page = '' } = document.body.dataset; return page.split(':')[index]; }; @@ -105,7 +105,7 @@ export const handleLocationHash = () => { } if (isInIssuePage()) { - adjustment -= fixedIssuableTitle?.offsetHeight; + adjustment -= fixedIssuableTitle.offsetHeight; } if (isInMRPage()) { diff --git a/app/assets/javascripts/pipeline_editor/index.js b/app/assets/javascripts/pipeline_editor/index.js index 7bfdddbc08a..e13d9cf9df0 100644 --- a/app/assets/javascripts/pipeline_editor/index.js +++ b/app/assets/javascripts/pipeline_editor/index.js @@ -42,7 +42,7 @@ export const initPipelineEditor = (selector = '#js-pipeline-editor') => { runnerHelpPagePath, totalBranches, ymlHelpPagePath, - } = el?.dataset; + } = el.dataset; const configurationPaths = Object.fromEntries( Object.entries(CODE_SNIPPET_SOURCE_SETTINGS).map(([source, { datasetKey }]) => [ diff --git a/app/assets/javascripts/pipeline_new/components/pipeline_new_form.vue b/app/assets/javascripts/pipeline_new/components/pipeline_new_form.vue index 32e1e18b684..d84fc724d38 100644 --- a/app/assets/javascripts/pipeline_new/components/pipeline_new_form.vue +++ b/app/assets/javascripts/pipeline_new/components/pipeline_new_form.vue @@ -313,7 +313,7 @@ export default { errors = [], warnings = [], total_warnings: totalWarnings = 0, - } = err?.response?.data; + } = err.response.data; const [error] = errors; this.reportError({ diff --git a/app/assets/javascripts/pipeline_new/index.js b/app/assets/javascripts/pipeline_new/index.js index a645ea8603b..927eeb5e144 100644 --- a/app/assets/javascripts/pipeline_new/index.js +++ b/app/assets/javascripts/pipeline_new/index.js @@ -17,7 +17,7 @@ export default () => { fileParam, settingsLink, maxWarnings, - } = el?.dataset; + } = el.dataset; const variableParams = JSON.parse(varParam); const fileParams = JSON.parse(fileParam); diff --git a/app/assets/javascripts/pipelines/pipeline_details_dag.js b/app/assets/javascripts/pipelines/pipeline_details_dag.js index e2835ecc4d1..b2cb0457c4d 100644 --- a/app/assets/javascripts/pipelines/pipeline_details_dag.js +++ b/app/assets/javascripts/pipelines/pipeline_details_dag.js @@ -17,7 +17,7 @@ const createDagApp = (apolloProvider) => { emptySvgPath, pipelineProjectPath, pipelineIid, - } = el?.dataset; + } = el.dataset; // eslint-disable-next-line no-new new Vue({ diff --git a/app/assets/javascripts/pipelines/pipeline_details_header.js b/app/assets/javascripts/pipelines/pipeline_details_header.js index 1c619768764..2fedd7e7a98 100644 --- a/app/assets/javascripts/pipelines/pipeline_details_header.js +++ b/app/assets/javascripts/pipelines/pipeline_details_header.js @@ -11,7 +11,7 @@ export const createPipelineHeaderApp = (elSelector, apolloProvider, graphqlResou return; } - const { fullPath, pipelineId, pipelineIid, pipelinesPath } = el?.dataset; + const { fullPath, pipelineId, pipelineIid, pipelinesPath } = el.dataset; // eslint-disable-next-line no-new new Vue({ el, diff --git a/app/assets/javascripts/pipelines/pipeline_details_notification.js b/app/assets/javascripts/pipelines/pipeline_details_notification.js index 0061be843c5..b480fc7c713 100644 --- a/app/assets/javascripts/pipelines/pipeline_details_notification.js +++ b/app/assets/javascripts/pipelines/pipeline_details_notification.js @@ -11,7 +11,7 @@ export const createPipelineNotificationApp = (elSelector, apolloProvider) => { return; } - const { deprecatedKeywordsDocPath, fullPath, pipelineIid } = el?.dataset; + const { deprecatedKeywordsDocPath, fullPath, pipelineIid } = el.dataset; // eslint-disable-next-line no-new new Vue({ el, diff --git a/app/assets/javascripts/runner/components/runner_pagination.vue b/app/assets/javascripts/runner/components/runner_pagination.vue index b683a7f2330..cfc21d1407b 100644 --- a/app/assets/javascripts/runner/components/runner_pagination.vue +++ b/app/assets/javascripts/runner/components/runner_pagination.vue @@ -21,10 +21,10 @@ export default { }, computed: { prevPage() { - return this.pageInfo?.hasPreviousPage ? this.value?.page - 1 : null; + return this.pageInfo?.hasPreviousPage ? this.value.page - 1 : null; }, nextPage() { - return this.pageInfo?.hasNextPage ? this.value?.page + 1 : null; + return this.pageInfo?.hasNextPage ? this.value.page + 1 : null; }, }, methods: { diff --git a/app/assets/javascripts/vue_shared/components/filtered_search_bar/constants.js b/app/assets/javascripts/vue_shared/components/filtered_search_bar/constants.js index 3d48c74b40b..d7a84798e47 100644 --- a/app/assets/javascripts/vue_shared/components/filtered_search_bar/constants.js +++ b/app/assets/javascripts/vue_shared/components/filtered_search_bar/constants.js @@ -1,6 +1,6 @@ import { __ } from '~/locale'; -export const DEBOUNCE_DELAY = 200; +export const DEBOUNCE_DELAY = 500; export const MAX_RECENT_TOKENS_SIZE = 3; export const FILTER_NONE = 'None'; diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 572ec40ef16..4fc96752507 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -286,6 +286,13 @@ class ApplicationController < ActionController::Base end end + def render_409(message = nil) + respond_to do |format| + format.html { render template: "errors/request_conflict", formats: :html, layout: "errors", status: :conflict, locals: { message: message } } + format.any { head :conflict } + end + end + def respond_422 head :unprocessable_entity end diff --git a/app/graphql/types/root_storage_statistics_type.rb b/app/graphql/types/root_storage_statistics_type.rb index 467331c5643..b1b712aab38 100644 --- a/app/graphql/types/root_storage_statistics_type.rb +++ b/app/graphql/types/root_storage_statistics_type.rb @@ -16,5 +16,6 @@ module Types field :storage_size, GraphQL::Types::Float, null: false, description: 'Total storage in bytes.' field :uploads_size, GraphQL::Types::Float, null: false, description: 'Uploads size in bytes.' field :wiki_size, GraphQL::Types::Float, null: false, description: 'Wiki size in bytes.' + field :container_registry_size, GraphQL::Types::Float, null: false, description: 'Container Registry size in bytes.' end end diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index f167734034d..821ea403dc9 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -246,13 +246,13 @@ module MergeRequestsHelper '' end - link_to branch, branch_path, class: 'gl-link gl-font-monospace gl-bg-blue-50 gl-rounded-base gl-font-sm gl-p-2 gl-display-inline-block gl-text-truncate gl-max-w-26 gl-mb-n3' + link_to branch, branch_path, title: branch, class: 'gl-link gl-font-monospace gl-bg-blue-50 gl-rounded-base gl-font-sm gl-p-2 gl-display-inline-block gl-text-truncate gl-max-w-26 gl-mb-n3' end def merge_request_header(project, merge_request) link_to_author = link_to_member(project, merge_request.author, size: 24, extra_class: 'gl-font-weight-bold', avatar: false) copy_button = clipboard_button(text: merge_request.source_branch, title: _('Copy branch name'), class: 'btn btn-default btn-sm gl-button btn-default-tertiary btn-icon gl-display-none! gl-md-display-inline-block! js-source-branch-copy') - target_branch = link_to merge_request.target_branch, project_tree_path(merge_request.target_project, merge_request.target_branch), class: 'gl-link gl-font-monospace gl-bg-blue-50 gl-rounded-base gl-font-sm gl-p-2 gl-display-inline-block gl-text-truncate gl-max-w-26 gl-mb-n3' + target_branch = link_to merge_request.target_branch, project_tree_path(merge_request.target_project, merge_request.target_branch), title: merge_request.target_branch, class: 'gl-link gl-font-monospace gl-bg-blue-50 gl-rounded-base gl-font-sm gl-p-2 gl-display-inline-block gl-text-truncate gl-max-w-26 gl-mb-n3' _('%{author} requested to merge %{source_branch} %{copy_button} into %{target_branch} %{created_at}').html_safe % { author: link_to_author.html_safe, source_branch: merge_request_source_branch(merge_request).html_safe, copy_button: copy_button.html_safe, target_branch: target_branch.html_safe, created_at: time_ago_with_tooltip(merge_request.created_at, html_class: 'gl-display-inline-block').html_safe } end diff --git a/app/helpers/users/group_callouts_helper.rb b/app/helpers/users/group_callouts_helper.rb index 9a9fce4d7e3..0aa4eb89499 100644 --- a/app/helpers/users/group_callouts_helper.rb +++ b/app/helpers/users/group_callouts_helper.rb @@ -31,5 +31,3 @@ module Users end end end - -Users::GroupCalloutsHelper.prepend_mod diff --git a/app/models/users/callout.rb b/app/models/users/callout.rb index 62b79e02502..b3729c84dd6 100644 --- a/app/models/users/callout.rb +++ b/app/models/users/callout.rb @@ -50,7 +50,8 @@ module Users attention_requests_top_nav: 47, attention_requests_side_nav: 48, minute_limit_banner: 49, - preview_user_over_limit_free_plan_alert: 50 # EE-only + preview_user_over_limit_free_plan_alert: 50, # EE-only + user_reached_limit_free_plan_alert: 51 # EE-only } validates :feature_name, diff --git a/app/views/errors/request_conflict.html.haml b/app/views/errors/request_conflict.html.haml new file mode 100644 index 00000000000..2f5abaca72f --- /dev/null +++ b/app/views/errors/request_conflict.html.haml @@ -0,0 +1,18 @@ +- message = local_assigns.fetch(:message, nil) +- content_for(:title, 'Request Conflict') + +%img{ :alt => "", :src => image_path('logo.svg') } +%h1 + 409 +.container + %h2 + = s_("409|There was a conflict with your request.") + - if message + %p + = message + %p + = s_('409|Please contact your GitLab administrator if you think this is a mistake.') + .action-container.js-go-back{ hidden: true } + %button{ type: 'button', class: 'gl-button btn btn-primary' } + = _('Go Back') += render "errors/footer" diff --git a/config/application.rb b/config/application.rb index 0f6178121ee..8a40aaa8bd6 100644 --- a/config/application.rb +++ b/config/application.rb @@ -141,6 +141,9 @@ module Gitlab Gitlab.ee { config.autoload_paths.push("#{config.root}/ee/lib/generators") } Gitlab.jh { config.autoload_paths.push("#{config.root}/jh/lib/generators") } + # Add JH initializer into rails initializers path + Gitlab.jh { config.paths["config/initializers"] << "#{config.root}/jh/config/initializers" } + # Only load the plugins named here, in the order given (default is alphabetical). # :all can be used as a placeholder for all plugins not explicitly named. # config.plugins = [ :exception_notification, :ssl_requirement, :all ] @@ -501,21 +504,6 @@ module Gitlab ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.warn_on_new_connection = false end - # Load JH initializers under JH. Load ordering is: - # 1. prepend_helpers_path - # 2. before_zeitwerk - # 3. let_zeitwerk_take_over - # 4. move_initializers - # 5. load_config_initializers - # 6. load_jh_config_initializers - Gitlab.jh do - initializer :load_jh_config_initializers, after: :load_config_initializers do - Dir[Rails.root.join('jh/config/initializers/*.rb')].sort.each do |initializer| - load_config_initializer(initializer) - end - end - end - # Add assets for variants of GitLab. They should take precedence over CE. # This means if multiple files exist, e.g.: # diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 871c0e4c988..c5060028488 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -16078,6 +16078,7 @@ Counts of requirements by their state. | Name | Type | Description | | ---- | ---- | ----------- | | `buildArtifactsSize` | [`Float!`](#float) | CI artifacts size in bytes. | +| `containerRegistrySize` | [`Float!`](#float) | Container Registry size in bytes. | | `dependencyProxySize` | [`Float!`](#float) | Dependency Proxy sizes in bytes. | | `lfsObjectsSize` | [`Float!`](#float) | LFS objects size in bytes. | | `packagesSize` | [`Float!`](#float) | Packages size in bytes. | @@ -19416,6 +19417,7 @@ Name of the feature that the callout is for. | `TWO_FACTOR_AUTH_RECOVERY_SETTINGS_CHECK` | Callout feature name for two_factor_auth_recovery_settings_check. | | `ULTIMATE_TRIAL` | Callout feature name for ultimate_trial. | | `UNFINISHED_TAG_CLEANUP_CALLOUT` | Callout feature name for unfinished_tag_cleanup_callout. | +| `USER_REACHED_LIMIT_FREE_PLAN_ALERT` | Callout feature name for user_reached_limit_free_plan_alert. | | `VERIFICATION_REMINDER` | Callout feature name for verification_reminder. | | `WEB_IDE_ALERT_DISMISSED` | Callout feature name for web_ide_alert_dismissed. | | `WEB_IDE_CI_ENVIRONMENTS_GUIDANCE` | Callout feature name for web_ide_ci_environments_guidance. | diff --git a/doc/user/compliance/license_compliance/index.md b/doc/user/compliance/license_compliance/index.md index 792ddd2f11b..659c0326728 100644 --- a/doc/user/compliance/license_compliance/index.md +++ b/doc/user/compliance/license_compliance/index.md @@ -853,7 +853,7 @@ A full list of variables can be found in [CI/CD variables](#available-cicd-varia To find out what tools are pre-installed in the `license_scanning` Docker image use the following command: ```shell -$ docker run --entrypoint='' registry.gitlab.com/security-products/license-finder:3 /bin/bash -lc 'asdf list' +$ docker run --entrypoint='' registry.gitlab.com/security-products/license-finder:4 /bin/bash -lc 'asdf list' golang 1.14 gradle @@ -880,7 +880,7 @@ sbt To interact with the `license_scanning` runtime environment use the following command: ```shell -$ docker run -it --entrypoint='' registry.gitlab.com/security-products/license-finder:3 /bin/bash -l +$ docker run -it --entrypoint='' registry.gitlab.com/security-products/license-finder:4 /bin/bash -l root@6abb70e9f193:~# ``` diff --git a/doc/user/project/issues/img/confidential_issues_issue_page.png b/doc/user/project/issues/img/confidential_issues_issue_page.png index 0f5c774d2587a0658da68594ad0b80b1c07e8280..b349149aa98e6346ba1d8b0028566c0d9da27bd8 100644 GIT binary patch literal 24484 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 literal 25354 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 diff --git a/doc/user/project/issues/img/sidebar_confidential_issue.png b/doc/user/project/issues/img/sidebar_confidential_issue.png index a320f4dcfe55a61323386c71e3a6ec114221f29c..0ef61c7f1b04a9f65cf067fcb466c48b85406e75 100644 GIT binary patch literal 5404 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 K`BGW4!2bY{UhOde diff --git a/doc/user/project/issues/img/turn_off_confidentiality.png b/doc/user/project/issues/img/turn_off_confidentiality.png index 04a85933071ffc84bcfece7a6b3cb9defc7f02b1..876deac223716ec8722f184cd7fa7e6c5de4ac14 100644 GIT binary patch literal 28579 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 diff --git a/doc/user/project/issues/img/turn_on_confidentiality.png b/doc/user/project/issues/img/turn_on_confidentiality.png index fac360ca6dc9c8047c0e879f6d7e10c701a6391a..498867d1933274a6494859ded4de09f470edb1d6 100644 GIT binary patch literal 7550 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 diff --git a/lib/gitlab/background_migration/backfill_namespace_id_for_project_route.rb b/lib/gitlab/background_migration/backfill_namespace_id_for_project_route.rb index 7f75b64e98a..0282531ae17 100644 --- a/lib/gitlab/background_migration/backfill_namespace_id_for_project_route.rb +++ b/lib/gitlab/background_migration/backfill_namespace_id_for_project_route.rb @@ -36,11 +36,14 @@ module Gitlab private def cleanup_gin_index(table_name) - sql = "select indexname::text from pg_indexes where tablename = '#{table_name}' and indexdef ilike '%gin%'" + sql = <<-SQL + SELECT indexname::text FROM pg_indexes WHERE tablename = '#{table_name}' AND indexdef ILIKE '%using gin%' + SQL + index_names = ApplicationRecord.connection.select_values(sql) index_names.each do |index_name| - ApplicationRecord.connection.execute("select gin_clean_pending_list('#{index_name}')") + ApplicationRecord.connection.execute("SELECT gin_clean_pending_list('#{index_name}')") end end diff --git a/lib/gitlab/ci/templates/Jobs/License-Scanning.gitlab-ci.yml b/lib/gitlab/ci/templates/Jobs/License-Scanning.gitlab-ci.yml index 89a44eddefd..f7945b46a59 100644 --- a/lib/gitlab/ci/templates/Jobs/License-Scanning.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Jobs/License-Scanning.gitlab-ci.yml @@ -14,7 +14,7 @@ variables: SECURE_ANALYZERS_PREFIX: "registry.gitlab.com/security-products" LICENSE_MANAGEMENT_SETUP_CMD: '' # If needed, specify a command to setup your environment with a custom package manager. - LICENSE_MANAGEMENT_VERSION: 3 + LICENSE_MANAGEMENT_VERSION: 4 license_scanning: stage: test diff --git a/lib/gitlab/kubernetes/cilium_network_policy.rb b/lib/gitlab/kubernetes/cilium_network_policy.rb deleted file mode 100644 index 8a31e068c30..00000000000 --- a/lib/gitlab/kubernetes/cilium_network_policy.rb +++ /dev/null @@ -1,141 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Kubernetes - class CiliumNetworkPolicy - include NetworkPolicyCommon - extend ::Gitlab::Utils::Override - - API_VERSION = "cilium.io/v2" - KIND = 'CiliumNetworkPolicy' - - PREDEFINED_POLICIES = { - 'allow-inbound-http' => <<~YAML.rstrip, - apiVersion: cilium.io/v2 - kind: CiliumNetworkPolicy - metadata: - name: allow-inbound-http - spec: - endpointSelector: - matchLabels: - network-policy.gitlab.com/disabled_by: gitlab - ingress: - - toPorts: - - ports: - - port: '80' - - port: '443' - YAML - 'drop-outbound' => <<~YAML.rstrip - apiVersion: cilium.io/v2 - kind: CiliumNetworkPolicy - metadata: - name: drop-outbound - spec: - endpointSelector: - matchLabels: - network-policy.gitlab.com/disabled_by: gitlab - egress: - - {} - YAML - }.freeze - - # We are modeling existing kubernetes resource and don't have - # control over amount of parameters. - # rubocop:disable Metrics/ParameterLists - def initialize(name:, namespace:, selector:, ingress:, resource_version: nil, description: nil, labels: nil, creation_timestamp: nil, egress: nil, annotations: nil, environment_ids: []) - @name = name - @description = description - @namespace = namespace - @labels = labels - @creation_timestamp = creation_timestamp - @selector = selector - @resource_version = resource_version - @ingress = ingress - @egress = egress - @annotations = annotations - @environment_ids = environment_ids - end - # rubocop:enable Metrics/ParameterLists - - def self.from_yaml(manifest) - return unless manifest - - policy = YAML.safe_load(manifest, symbolize_names: true) - return if !policy[:metadata] || !policy[:spec] - - metadata = policy[:metadata] - spec = policy[:spec] - self.new( - name: metadata[:name], - description: policy[:description], - namespace: metadata[:namespace], - annotations: metadata[:annotations], - resource_version: metadata[:resourceVersion], - labels: metadata[:labels], - selector: spec[:endpointSelector], - ingress: spec[:ingress], - egress: spec[:egress] - ) - rescue Psych::SyntaxError, Psych::DisallowedClass - nil - end - - def self.from_resource(resource, environment_ids = []) - return unless resource - return if !resource[:metadata] || !resource[:spec] - - metadata = resource[:metadata] - spec = resource[:spec].to_h - self.new( - name: metadata[:name], - description: resource[:description], - namespace: metadata[:namespace], - annotations: metadata[:annotations]&.to_h, - resource_version: metadata[:resourceVersion], - labels: metadata[:labels]&.to_h, - creation_timestamp: metadata[:creationTimestamp], - selector: spec[:endpointSelector], - ingress: spec[:ingress], - egress: spec[:egress], - environment_ids: environment_ids - ) - end - - override :resource - def resource - resource = { - apiVersion: API_VERSION, - kind: KIND, - metadata: metadata, - spec: spec - } - resource[:description] = description if description - resource - end - - private - - attr_reader :name, :description, :namespace, :labels, :creation_timestamp, :resource_version, :ingress, :egress, :annotations, :environment_ids - - def selector - @selector ||= {} - end - - def metadata - meta = { name: name, namespace: namespace } - meta[:labels] = labels if labels - meta[:resourceVersion] = resource_version if resource_version - meta[:annotations] = annotations if annotations - meta - end - - def spec - { - endpointSelector: selector, - ingress: ingress, - egress: egress - }.compact - end - end - end -end diff --git a/lib/gitlab/kubernetes/kube_client.rb b/lib/gitlab/kubernetes/kube_client.rb index 6caebf445e5..cd03e332175 100644 --- a/lib/gitlab/kubernetes/kube_client.rb +++ b/lib/gitlab/kubernetes/kube_client.rb @@ -81,24 +81,6 @@ module Gitlab :update_gateway, to: :istio_client - # NetworkPolicy methods delegate to the apis/networking.k8s.io api - # group client - delegate :create_network_policy, - :get_network_policies, - :get_network_policy, - :update_network_policy, - :delete_network_policy, - to: :networking_client - - # CiliumNetworkPolicy methods delegate to the apis/cilium.io api - # group client - delegate :create_cilium_network_policy, - :get_cilium_network_policies, - :get_cilium_network_policy, - :update_cilium_network_policy, - :delete_cilium_network_policy, - to: :cilium_networking_client - attr_reader :api_prefix, :kubeclient_options DEFAULT_KUBECLIENT_OPTIONS = { diff --git a/lib/gitlab/kubernetes/network_policy.rb b/lib/gitlab/kubernetes/network_policy.rb deleted file mode 100644 index e6111db5b17..00000000000 --- a/lib/gitlab/kubernetes/network_policy.rb +++ /dev/null @@ -1,98 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Kubernetes - class NetworkPolicy - include NetworkPolicyCommon - extend ::Gitlab::Utils::Override - - KIND = 'NetworkPolicy' - - # rubocop:disable Metrics/ParameterLists - def initialize(name:, namespace:, selector:, ingress:, labels: nil, creation_timestamp: nil, policy_types: ["Ingress"], egress: nil, environment_ids: []) - @name = name - @namespace = namespace - @labels = labels - @creation_timestamp = creation_timestamp - @selector = selector - @policy_types = policy_types - @ingress = ingress - @egress = egress - @environment_ids = environment_ids - end - # rubocop:enable Metrics/ParameterLists - - def self.from_yaml(manifest) - return unless manifest - - policy = YAML.safe_load(manifest, symbolize_names: true) - return if !policy[:metadata] || !policy[:spec] - - metadata = policy[:metadata] - spec = policy[:spec] - self.new( - name: metadata[:name], - namespace: metadata[:namespace], - labels: metadata[:labels], - selector: spec[:podSelector], - policy_types: spec[:policyTypes], - ingress: spec[:ingress], - egress: spec[:egress] - ) - rescue Psych::SyntaxError, Psych::DisallowedClass - nil - end - - def self.from_resource(resource, environment_ids = []) - return unless resource - return if !resource[:metadata] || !resource[:spec] - - metadata = resource[:metadata] - spec = resource[:spec].to_h - self.new( - name: metadata[:name], - namespace: metadata[:namespace], - labels: metadata[:labels]&.to_h, - creation_timestamp: metadata[:creationTimestamp], - selector: spec[:podSelector], - policy_types: spec[:policyTypes], - ingress: spec[:ingress], - egress: spec[:egress], - environment_ids: environment_ids - ) - end - - override :resource - def resource - { - kind: KIND, - metadata: metadata, - spec: spec - } - end - - private - - attr_reader :name, :namespace, :labels, :creation_timestamp, :policy_types, :ingress, :egress, :environment_ids - - def selector - @selector ||= {} - end - - def metadata - meta = { name: name, namespace: namespace } - meta[:labels] = labels if labels - meta - end - - def spec - { - podSelector: selector, - policyTypes: policy_types, - ingress: ingress, - egress: egress - } - end - end - end -end diff --git a/lib/gitlab/kubernetes/network_policy_common.rb b/lib/gitlab/kubernetes/network_policy_common.rb deleted file mode 100644 index de91833b734..00000000000 --- a/lib/gitlab/kubernetes/network_policy_common.rb +++ /dev/null @@ -1,63 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module Kubernetes - module NetworkPolicyCommon - DISABLED_BY_LABEL = :'network-policy.gitlab.com/disabled_by' - - def generate - ::Kubeclient::Resource.new(resource) - end - - def as_json(opts = nil) - { - name: name, - namespace: namespace, - creation_timestamp: creation_timestamp, - manifest: manifest, - is_autodevops: autodevops?, - is_enabled: enabled?, - environment_ids: environment_ids - } - end - - def autodevops? - return false unless labels - - !labels[:chart].nil? && labels[:chart].start_with?('auto-deploy-app-') - end - - # selector selects pods that should be targeted by this - # policy. It can represent podSelector, nodeSelector or - # endpointSelector We can narrow selection by requiring - # this policy to match our custom labels. Since DISABLED_BY - # label will not be on any pod a policy will be effectively disabled. - def enabled? - return true unless selector&.key?(:matchLabels) - - !selector[:matchLabels]&.key?(DISABLED_BY_LABEL) - end - - def enable - return if enabled? - - selector[:matchLabels].delete(DISABLED_BY_LABEL) - end - - def disable - selector[:matchLabels] ||= {} - selector[:matchLabels].merge!(DISABLED_BY_LABEL => 'gitlab') - end - - private - - def resource - raise NotImplementedError - end - - def manifest - YAML.dump(resource.deep_stringify_keys) - end - end - end -end diff --git a/lib/gitlab/subscription_portal.rb b/lib/gitlab/subscription_portal.rb index 778dda03087..7ef1be6ff44 100644 --- a/lib/gitlab/subscription_portal.rb +++ b/lib/gitlab/subscription_portal.rb @@ -79,7 +79,7 @@ module Gitlab end def self.renewal_service_email - 'renewals-support@gitlab.com' + 'renewals-service@customers.gitlab.com' end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index ce2fd11188a..b90d5774a38 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -1473,7 +1473,7 @@ msgstr "" msgid "1st contribution!" msgstr "" -msgid "2. Before July 1, 2022, all free tier public open source projects will need to %{enrollment_link} to continue to receive GitLab Ultimate benefits." +msgid "2. Before July 1, 2022, all free tier public open source projects must %{enrollment_link} to continue to receive GitLab Ultimate benefits." msgstr "" msgid "20-29 contributions" @@ -1515,6 +1515,12 @@ msgstr "" msgid "404|Please contact your GitLab administrator if you think this is a mistake." msgstr "" +msgid "409|Please contact your GitLab administrator if you think this is a mistake." +msgstr "" + +msgid "409|There was a conflict with your request." +msgstr "" + msgid "7 days" msgstr "" @@ -16180,6 +16186,9 @@ msgstr "" msgid "For more information, go to the " msgstr "" +msgid "For more information, see the %{faq_link}." +msgstr "" + msgid "For more information, see the File Hooks documentation." msgstr "" @@ -16565,6 +16574,9 @@ msgstr "" msgid "Geo|Filter by status" msgstr "" +msgid "Geo|Full details" +msgstr "" + msgid "Geo|Geo Settings" msgstr "" @@ -16682,9 +16694,6 @@ msgstr "" msgid "Geo|Offline" msgstr "" -msgid "Geo|Open replications" -msgstr "" - msgid "Geo|Pending synchronization" msgstr "" @@ -25110,18 +25119,6 @@ msgstr "" msgid "Network:" msgstr "" -msgid "NetworkPolicies|Environment does not have deployment platform" -msgstr "" - -msgid "NetworkPolicies|Invalid or empty policy" -msgstr "" - -msgid "NetworkPolicies|Invalid or unsupported policy kind" -msgstr "" - -msgid "NetworkPolicies|Kubernetes error: %{error}" -msgstr "" - msgid "NetworkPolicy|Policy" msgstr "" @@ -28492,9 +28489,6 @@ msgstr "" msgid "Please use this form to report to the admin users who create spam issues, comments or behave inappropriately." msgstr "" -msgid "Please visit the %{faq_link} for more information." -msgstr "" - msgid "Please wait a moment, this page will automatically refresh when ready." msgstr "" @@ -43160,6 +43154,9 @@ msgstr "" msgid "You can group test cases using labels. To learn about the future direction of this feature, visit %{linkStart}Quality Management direction page%{linkEnd}." msgstr "" +msgid "You can have a maximum of %{free_limit} unique members across all of your personal projects. To view and manage members, check the members page for each project in your namespace. We recommend you %{move_link_start}move your projects to a group%{move_link_end} so you can easily manage users and features." +msgstr "" + msgid "You can invite a new member to %{project_name} or invite another group." msgstr "" @@ -43591,6 +43588,9 @@ msgstr "" msgid "You've already enabled two-factor authentication using one time password authenticators. In order to register a different device, you must first disable two-factor authentication." msgstr "" +msgid "You've reached your %{free_limit} member limit across all your personal projects" +msgstr "" + msgid "You've rejected %{user}" msgstr "" diff --git a/spec/frontend/__helpers__/vuex_action_helper.js b/spec/frontend/__helpers__/vuex_action_helper.js index 474fd528df6..ab2637d6024 100644 --- a/spec/frontend/__helpers__/vuex_action_helper.js +++ b/spec/frontend/__helpers__/vuex_action_helper.js @@ -93,8 +93,13 @@ export default ( payload, ); - // eslint-disable-next-line no-restricted-syntax - return (result || new Promise((resolve) => setImmediate(resolve))) + return ( + result || + new Promise((resolve) => { + // eslint-disable-next-line no-restricted-syntax + setImmediate(resolve); + }) + ) .catch((error) => { validateResults(); throw error; diff --git a/spec/frontend/__helpers__/wait_for_promises.js b/spec/frontend/__helpers__/wait_for_promises.js index 2fd1cc6ba0d..753c3c5d92b 100644 --- a/spec/frontend/__helpers__/wait_for_promises.js +++ b/spec/frontend/__helpers__/wait_for_promises.js @@ -1 +1,4 @@ -export default () => new Promise((resolve) => requestAnimationFrame(resolve)); +export default () => + new Promise((resolve) => { + requestAnimationFrame(resolve); + }); diff --git a/spec/frontend/boards/project_select_spec.js b/spec/frontend/boards/project_select_spec.js index 7206fb83212..bd79060c54f 100644 --- a/spec/frontend/boards/project_select_spec.js +++ b/spec/frontend/boards/project_select_spec.js @@ -8,6 +8,7 @@ import { import { mount } from '@vue/test-utils'; import Vue, { nextTick } from 'vue'; import Vuex from 'vuex'; +import waitForPromises from 'helpers/wait_for_promises'; import ProjectSelect from '~/boards/components/project_select.vue'; import defaultState from '~/boards/stores/state'; @@ -29,8 +30,6 @@ describe('ProjectSelect component', () => { const findInMenuLoadingIcon = () => wrapper.find("[data-testid='dropdown-text-loading-icon']"); const findEmptySearchMessage = () => wrapper.find("[data-testid='empty-result-message']"); - const waitRAF = () => new Promise((resolve) => requestAnimationFrame(resolve)); - const createStore = ({ state, activeGroupProjects }) => { Vue.use(Vuex); @@ -134,7 +133,7 @@ describe('ProjectSelect component', () => { const dropdownToggle = findGlDropdown().find('.dropdown-toggle'); await dropdownToggle.trigger('click'); - await waitRAF(); + await waitForPromises(); await nextTick(); const searchInput = findGlDropdown().findComponent(GlFormInput).element; diff --git a/spec/frontend/ide/components/new_dropdown/upload_spec.js b/spec/frontend/ide/components/new_dropdown/upload_spec.js index 5a7419d6dce..3eafe9e7ccb 100644 --- a/spec/frontend/ide/components/new_dropdown/upload_spec.js +++ b/spec/frontend/ide/components/new_dropdown/upload_spec.js @@ -70,7 +70,9 @@ describe('new dropdown upload', () => { }); it('calls readAsText and creates file in plain text (without encoding) if the file content is plain text', async () => { - const waitForCreate = new Promise((resolve) => vm.$on('create', resolve)); + const waitForCreate = new Promise((resolve) => { + vm.$on('create', resolve); + }); vm.createFile(textTarget, textFile); diff --git a/spec/frontend/notes/stores/actions_spec.js b/spec/frontend/notes/stores/actions_spec.js index 75a53c61ee6..ecb213590ad 100644 --- a/spec/frontend/notes/stores/actions_spec.js +++ b/spec/frontend/notes/stores/actions_spec.js @@ -254,7 +254,9 @@ describe('Actions Notes Store', () => { jest.advanceTimersByTime(time); } - return new Promise((resolve) => requestAnimationFrame(resolve)); + return new Promise((resolve) => { + requestAnimationFrame(resolve); + }); }; const advanceXMoreIntervals = async (number) => { const timeoutLength = pollInterval * number; diff --git a/spec/frontend/runner/mock_data.js b/spec/frontend/runner/mock_data.js index e4351e9c90c..1c2333b552c 100644 --- a/spec/frontend/runner/mock_data.js +++ b/spec/frontend/runner/mock_data.js @@ -1,13 +1,5 @@ // Fixtures generated by: spec/frontend/fixtures/runner.rb -// List queries -import runnersData from 'test_fixtures/graphql/runner/list/admin_runners.query.graphql.json'; -import runnersDataPaginated from 'test_fixtures/graphql/runner/list/admin_runners.query.graphql.paginated.json'; -import runnersCountData from 'test_fixtures/graphql/runner/list/admin_runners_count.query.graphql.json'; -import groupRunnersData from 'test_fixtures/graphql/runner/list/group_runners.query.graphql.json'; -import groupRunnersDataPaginated from 'test_fixtures/graphql/runner/list/group_runners.query.graphql.paginated.json'; -import groupRunnersCountData from 'test_fixtures/graphql/runner/list/group_runners_count.query.graphql.json'; - // Show runner queries import runnerData from 'test_fixtures/graphql/runner/show/runner.query.graphql.json'; import runnerWithGroupData from 'test_fixtures/graphql/runner/show/runner.query.graphql.with_group.json'; @@ -17,6 +9,14 @@ import runnerJobsData from 'test_fixtures/graphql/runner/show/runner_jobs.query. // Edit runner queries import runnerFormData from 'test_fixtures/graphql/runner/edit/runner_form.query.graphql.json'; +// List queries +import runnersData from 'test_fixtures/graphql/runner/list/admin_runners.query.graphql.json'; +import runnersDataPaginated from 'test_fixtures/graphql/runner/list/admin_runners.query.graphql.paginated.json'; +import runnersCountData from 'test_fixtures/graphql/runner/list/admin_runners_count.query.graphql.json'; +import groupRunnersData from 'test_fixtures/graphql/runner/list/group_runners.query.graphql.json'; +import groupRunnersDataPaginated from 'test_fixtures/graphql/runner/list/group_runners.query.graphql.paginated.json'; +import groupRunnersCountData from 'test_fixtures/graphql/runner/list/group_runners_count.query.graphql.json'; + // Other mock data export const onlineContactTimeoutSecs = 2 * 60 * 60; export const staleTimeoutSecs = 5259492; // Ruby's `2.months` diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/filtered_search_bar_root_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/filtered_search_bar_root_spec.js index 3ffb99314d6..e44bc8771f5 100644 --- a/spec/frontend/vue_shared/components/filtered_search_bar/filtered_search_bar_root_spec.js +++ b/spec/frontend/vue_shared/components/filtered_search_bar/filtered_search_bar_root_spec.js @@ -232,9 +232,7 @@ describe('FilteredSearchBarRoot', () => { }); it('initializes `recentSearchesPromise` prop with a promise by using `recentSearchesService.fetch()`', () => { - jest - .spyOn(wrapper.vm.recentSearchesService, 'fetch') - .mockReturnValue(new Promise(() => [])); + jest.spyOn(wrapper.vm.recentSearchesService, 'fetch').mockResolvedValue([]); wrapper.vm.setupRecentSearch(); diff --git a/spec/frontend_integration/ide/helpers/ide_helper.js b/spec/frontend_integration/ide/helpers/ide_helper.js index 00ce39a5598..8c5ff816c74 100644 --- a/spec/frontend_integration/ide/helpers/ide_helper.js +++ b/spec/frontend_integration/ide/helpers/ide_helper.js @@ -24,13 +24,19 @@ export const switchLeftSidebarTab = (name) => { export const getStatusBar = () => document.querySelector('.ide-status-bar'); export const waitForMonacoEditor = () => - new Promise((resolve) => monacoEditor.onDidCreateEditor(resolve)); + new Promise((resolve) => { + monacoEditor.onDidCreateEditor(resolve); + }); export const waitForEditorDispose = (instance) => - new Promise((resolve) => instance.onDidDispose(resolve)); + new Promise((resolve) => { + instance.onDidDispose(resolve); + }); export const waitForEditorModelChange = (instance) => - new Promise((resolve) => instance.onDidChangeModel(resolve)); + new Promise((resolve) => { + instance.onDidChangeModel(resolve); + }); export const findMonacoEditor = () => screen.findAllByLabelText(/Editor content;/).then(([x]) => x.closest('.monaco-editor')); diff --git a/spec/graphql/types/root_storage_statistics_type_spec.rb b/spec/graphql/types/root_storage_statistics_type_spec.rb index 7818be6ee02..07c8378e7a6 100644 --- a/spec/graphql/types/root_storage_statistics_type_spec.rb +++ b/spec/graphql/types/root_storage_statistics_type_spec.rb @@ -8,7 +8,8 @@ RSpec.describe GitlabSchema.types['RootStorageStatistics'] do it 'has all the required fields' do expect(described_class).to have_graphql_fields(:storage_size, :repository_size, :lfs_objects_size, :build_artifacts_size, :packages_size, :wiki_size, :snippets_size, - :pipeline_artifacts_size, :uploads_size, :dependency_proxy_size) + :pipeline_artifacts_size, :uploads_size, :dependency_proxy_size, + :container_registry_size) end specify { expect(described_class).to require_graphql_authorizations(:read_statistics) } diff --git a/spec/lib/gitlab/kubernetes/cilium_network_policy_spec.rb b/spec/lib/gitlab/kubernetes/cilium_network_policy_spec.rb deleted file mode 100644 index ec1f46100a4..00000000000 --- a/spec/lib/gitlab/kubernetes/cilium_network_policy_spec.rb +++ /dev/null @@ -1,274 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::Kubernetes::CiliumNetworkPolicy do - let(:policy) do - described_class.new( - name: name, - namespace: namespace, - description: description, - selector: selector, - ingress: ingress, - egress: egress, - labels: labels, - resource_version: resource_version, - annotations: annotations - ) - end - - let(:resource) do - ::Kubeclient::Resource.new( - apiVersion: Gitlab::Kubernetes::CiliumNetworkPolicy::API_VERSION, - kind: Gitlab::Kubernetes::CiliumNetworkPolicy::KIND, - metadata: { name: name, namespace: namespace, resourceVersion: resource_version, annotations: annotations }, - spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: egress }, - description: description - ) - end - - let(:selector) { endpoint_selector } - let(:labels) { nil } - let(:name) { 'example-name' } - let(:namespace) { 'example-namespace' } - let(:endpoint_selector) { { matchLabels: { role: 'db' } } } - let(:description) { 'example-description' } - let(:partial_class_name) { described_class.name.split('::').last } - let(:resource_version) { 101 } - let(:annotations) { { 'app.gitlab.com/alert': 'true' } } - let(:ingress) do - [ - { - fromEndpoints: [ - { matchLabels: { project: 'myproject' } } - ] - } - ] - end - - let(:egress) do - [ - { - ports: [{ port: 5978 }] - } - ] - end - - include_examples 'network policy common specs' - - describe '.from_yaml' do - let(:manifest) do - <<~POLICY - apiVersion: cilium.io/v2 - kind: CiliumNetworkPolicy - description: example-description - metadata: - name: example-name - namespace: example-namespace - resourceVersion: 101 - annotations: - app.gitlab.com/alert: "true" - spec: - endpointSelector: - matchLabels: - role: db - ingress: - - fromEndpoints: - - matchLabels: - project: myproject - egress: - - ports: - - port: 5978 - POLICY - end - - subject { Gitlab::Kubernetes::CiliumNetworkPolicy.from_yaml(manifest)&.generate } - - it { is_expected.to eq(resource) } - - context 'with nil manifest' do - let(:manifest) { nil } - - it { is_expected.to be_nil } - end - - context 'with invalid manifest' do - let(:manifest) { "\tfoo: bar" } - - it { is_expected.to be_nil } - end - - context 'with manifest without metadata' do - let(:manifest) do - <<~POLICY - apiVersion: cilium.io/v2 - kind: CiliumNetworkPolicy - spec: - endpointSelector: - matchLabels: - role: db - ingress: - - fromEndpoints: - matchLabels: - project: myproject - POLICY - end - - it { is_expected.to be_nil } - end - - context 'with manifest without spec' do - let(:manifest) do - <<~POLICY - apiVersion: cilium.io/v2 - kind: CiliumNetworkPolicy - metadata: - name: example-name - namespace: example-namespace - POLICY - end - - it { is_expected.to be_nil } - end - - context 'with disallowed class' do - let(:manifest) do - <<~POLICY - apiVersion: cilium.io/v2 - kind: CiliumNetworkPolicy - metadata: - name: example-name - namespace: example-namespace - creationTimestamp: 2020-04-14T00:08:30Z - spec: - endpointSelector: - matchLabels: - role: db - ingress: - - fromEndpoints: - matchLabels: - project: myproject - POLICY - end - - it { is_expected.to be_nil } - end - end - - describe '.from_resource' do - let(:resource) do - ::Kubeclient::Resource.new( - description: description, - metadata: { - name: name, namespace: namespace, creationTimestamp: '2020-04-14T00:08:30Z', - labels: { app: 'foo' }, resourceVersion: resource_version, annotations: annotations - }, - spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: nil, labels: nil } - ) - end - - let(:generated_resource) do - ::Kubeclient::Resource.new( - apiVersion: Gitlab::Kubernetes::CiliumNetworkPolicy::API_VERSION, - kind: Gitlab::Kubernetes::CiliumNetworkPolicy::KIND, - description: description, - metadata: { name: name, namespace: namespace, resourceVersion: resource_version, labels: { app: 'foo' }, annotations: annotations }, - spec: { endpointSelector: endpoint_selector, ingress: ingress } - ) - end - - subject { Gitlab::Kubernetes::CiliumNetworkPolicy.from_resource(resource)&.generate } - - it { is_expected.to eq(generated_resource) } - - context 'with nil resource' do - let(:resource) { nil } - - it { is_expected.to be_nil } - end - - context 'with resource without metadata' do - let(:resource) do - ::Kubeclient::Resource.new( - spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: nil, labels: nil } - ) - end - - it { is_expected.to be_nil } - end - - context 'with resource without spec' do - let(:resource) do - ::Kubeclient::Resource.new( - metadata: { name: name, namespace: namespace, uid: '128cf288-7de4-11ea-aceb-42010a800089', resourceVersion: resource_version } - ) - end - - it { is_expected.to be_nil } - end - - context 'with environment_ids' do - subject { Gitlab::Kubernetes::CiliumNetworkPolicy.from_resource(resource, [1, 2, 3]) } - - it 'includes environment_ids in as_json result' do - expect(subject.as_json).to include(environment_ids: [1, 2, 3]) - end - end - end - - describe '#resource' do - subject { policy.resource } - - let(:resource) do - { - apiVersion: Gitlab::Kubernetes::CiliumNetworkPolicy::API_VERSION, - kind: Gitlab::Kubernetes::CiliumNetworkPolicy::KIND, - metadata: { name: name, namespace: namespace, resourceVersion: resource_version, annotations: annotations }, - spec: { endpointSelector: endpoint_selector, ingress: ingress, egress: egress }, - description: description - } - end - - it { is_expected.to eq(resource) } - - context 'with labels' do - let(:labels) { { app: 'foo' } } - - before do - resource[:metadata][:labels] = { app: 'foo' } - end - - it { is_expected.to eq(resource) } - end - - context 'without resource_version' do - let(:resource_version) { nil } - - before do - resource[:metadata].delete(:resourceVersion) - end - - it { is_expected.to eq(resource) } - end - - context 'with nil egress' do - let(:egress) { nil } - - before do - resource[:spec].delete(:egress) - end - - it { is_expected.to eq(resource) } - end - - context 'without annotations' do - let(:annotations) { nil } - - before do - resource[:metadata].delete(:annotations) - end - - it { is_expected.to eq(resource) } - end - end -end diff --git a/spec/lib/gitlab/kubernetes/kube_client_spec.rb b/spec/lib/gitlab/kubernetes/kube_client_spec.rb index 521f13dc9cc..dfd5092b54d 100644 --- a/spec/lib/gitlab/kubernetes/kube_client_spec.rb +++ b/spec/lib/gitlab/kubernetes/kube_client_spec.rb @@ -227,20 +227,6 @@ RSpec.describe Gitlab::Kubernetes::KubeClient do end end - describe '#cilium_networking_client' do - subject { client.cilium_networking_client } - - it_behaves_like 'a Kubeclient' - - it 'has the cilium API group endpoint' do - expect(subject.api_endpoint.to_s).to match(%r{\/apis\/cilium.io\Z}) - end - - it 'has the api_version' do - expect(subject.instance_variable_get(:@api_version)).to eq('v2') - end - end - describe '#metrics_client' do subject { client.metrics_client } @@ -428,56 +414,6 @@ RSpec.describe Gitlab::Kubernetes::KubeClient do end end - describe 'networking API group' do - let(:networking_client) { client.networking_client } - - [ - :create_network_policy, - :get_network_policies, - :get_network_policy, - :update_network_policy, - :delete_network_policy - ].each do |method| - describe "##{method}" do - include_examples 'redirection not allowed', method - include_examples 'dns rebinding not allowed', method - - it 'delegates to the networking client' do - expect(client).to delegate_method(method).to(:networking_client) - end - - it 'responds to the method' do - expect(client).to respond_to method - end - end - end - end - - describe 'cilium API group' do - let(:cilium_networking_client) { client.cilium_networking_client } - - [ - :create_cilium_network_policy, - :get_cilium_network_policies, - :get_cilium_network_policy, - :update_cilium_network_policy, - :delete_cilium_network_policy - ].each do |method| - describe "##{method}" do - include_examples 'redirection not allowed', method - include_examples 'dns rebinding not allowed', method - - it 'delegates to the cilium client' do - expect(client).to delegate_method(method).to(:cilium_networking_client) - end - - it 'responds to the method' do - expect(client).to respond_to method - end - end - end - end - describe 'non-entity methods' do it 'does not proxy for non-entity methods' do expect(client).not_to respond_to :proxy_url diff --git a/spec/lib/gitlab/kubernetes/network_policy_spec.rb b/spec/lib/gitlab/kubernetes/network_policy_spec.rb deleted file mode 100644 index 2cba37a1302..00000000000 --- a/spec/lib/gitlab/kubernetes/network_policy_spec.rb +++ /dev/null @@ -1,235 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::Kubernetes::NetworkPolicy do - let(:policy) do - described_class.new( - name: name, - namespace: namespace, - selector: selector, - ingress: ingress, - labels: labels - ) - end - - let(:resource) do - ::Kubeclient::Resource.new( - kind: Gitlab::Kubernetes::NetworkPolicy::KIND, - metadata: { name: name, namespace: namespace }, - spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil } - ) - end - - let(:selector) { pod_selector } - let(:labels) { nil } - let(:name) { 'example-name' } - let(:namespace) { 'example-namespace' } - let(:pod_selector) { { matchLabels: { role: 'db' } } } - - let(:ingress) do - [ - { - from: [ - { namespaceSelector: { matchLabels: { project: 'myproject' } } } - ] - } - ] - end - - let(:egress) do - [ - { - ports: [{ port: 5978 }] - } - ] - end - - include_examples 'network policy common specs' - - describe '.from_yaml' do - let(:manifest) do - <<~POLICY - apiVersion: networking.k8s.io/v1 - kind: NetworkPolicy - metadata: - name: example-name - namespace: example-namespace - spec: - podSelector: - matchLabels: - role: db - policyTypes: - - Ingress - ingress: - - from: - - namespaceSelector: - matchLabels: - project: myproject - POLICY - end - - subject { Gitlab::Kubernetes::NetworkPolicy.from_yaml(manifest)&.generate } - - it { is_expected.to eq(resource) } - - context 'with nil manifest' do - let(:manifest) { nil } - - it { is_expected.to be_nil } - end - - context 'with invalid manifest' do - let(:manifest) { "\tfoo: bar" } - - it { is_expected.to be_nil } - end - - context 'with manifest without metadata' do - let(:manifest) do - <<~POLICY - apiVersion: networking.k8s.io/v1 - kind: NetworkPolicy - spec: - podSelector: - matchLabels: - role: db - policyTypes: - - Ingress - ingress: - - from: - - namespaceSelector: - matchLabels: - project: myproject - POLICY - end - - it { is_expected.to be_nil } - end - - context 'with manifest without spec' do - let(:manifest) do - <<~POLICY - apiVersion: networking.k8s.io/v1 - kind: NetworkPolicy - metadata: - name: example-name - namespace: example-namespace - POLICY - end - - it { is_expected.to be_nil } - end - - context 'with disallowed class' do - let(:manifest) do - <<~POLICY - apiVersion: networking.k8s.io/v1 - kind: NetworkPolicy - metadata: - name: example-name - namespace: example-namespace - creationTimestamp: 2020-04-14T00:08:30Z - spec: - podSelector: - matchLabels: - role: db - policyTypes: - - Ingress - ingress: - - from: - - namespaceSelector: - matchLabels: - project: myproject - POLICY - end - - it { is_expected.to be_nil } - end - end - - describe '.from_resource' do - let(:resource) do - ::Kubeclient::Resource.new( - metadata: { - name: name, namespace: namespace, creationTimestamp: '2020-04-14T00:08:30Z', - labels: { app: 'foo' }, resourceVersion: '4990' - }, - spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil } - ) - end - - let(:generated_resource) do - ::Kubeclient::Resource.new( - kind: Gitlab::Kubernetes::NetworkPolicy::KIND, - metadata: { name: name, namespace: namespace, labels: { app: 'foo' } }, - spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil } - ) - end - - subject { Gitlab::Kubernetes::NetworkPolicy.from_resource(resource)&.generate } - - it { is_expected.to eq(generated_resource) } - - context 'with nil resource' do - let(:resource) { nil } - - it { is_expected.to be_nil } - end - - context 'with resource without metadata' do - let(:resource) do - ::Kubeclient::Resource.new( - spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil } - ) - end - - it { is_expected.to be_nil } - end - - context 'with resource without spec' do - let(:resource) do - ::Kubeclient::Resource.new( - metadata: { name: name, namespace: namespace, uid: '128cf288-7de4-11ea-aceb-42010a800089', resourceVersion: '4990' } - ) - end - - it { is_expected.to be_nil } - end - - context 'with environment_ids' do - subject { Gitlab::Kubernetes::NetworkPolicy.from_resource(resource, [1, 2, 3]) } - - it 'includes environment_ids in as_json result' do - expect(subject.as_json).to include(environment_ids: [1, 2, 3]) - end - end - end - - describe '#resource' do - subject { policy.resource } - - let(:resource) do - { - kind: Gitlab::Kubernetes::NetworkPolicy::KIND, - metadata: { name: name, namespace: namespace }, - spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil } - } - end - - it { is_expected.to eq(resource) } - - context 'with labels' do - let(:labels) { { app: 'foo' } } - let(:resource) do - { - kind: Gitlab::Kubernetes::NetworkPolicy::KIND, - metadata: { name: name, namespace: namespace, labels: { app: 'foo' } }, - spec: { podSelector: pod_selector, policyTypes: %w(Ingress), ingress: ingress, egress: nil } - } - end - - it { is_expected.to eq(resource) } - end - end -end diff --git a/spec/support/shared_examples/lib/gitlab/kubernetes/network_policy_common_shared_examples.rb b/spec/support/shared_examples/lib/gitlab/kubernetes/network_policy_common_shared_examples.rb deleted file mode 100644 index 2633a89eeee..00000000000 --- a/spec/support/shared_examples/lib/gitlab/kubernetes/network_policy_common_shared_examples.rb +++ /dev/null @@ -1,162 +0,0 @@ -# frozen_string_literal: true - -RSpec.shared_examples 'network policy common specs' do - let(:name) { 'example-name' } - let(:namespace) { 'example-namespace' } - let(:labels) { nil } - - describe '#generate' do - subject { policy.generate } - - it { is_expected.to eq(Kubeclient::Resource.new(policy.resource)) } - end - - describe 'as_json' do - let(:json_policy) do - { - name: name, - namespace: namespace, - creation_timestamp: nil, - manifest: YAML.dump(policy.resource.deep_stringify_keys), - is_autodevops: false, - is_enabled: true, - environment_ids: [] - } - end - - subject { policy.as_json } - - it { is_expected.to eq(json_policy) } - end - - describe 'autodevops?' do - subject { policy.autodevops? } - - let(:labels) { { chart: chart } } - let(:chart) { nil } - - it { is_expected.to be false } - - context 'with non-autodevops chart' do - let(:chart) { 'foo' } - - it { is_expected.to be false } - end - - context 'with autodevops chart' do - let(:chart) { 'auto-deploy-app-0.6.0' } - - it { is_expected.to be true } - end - end - - describe 'enabled?' do - subject { policy.enabled? } - - let(:selector) { nil } - - it { is_expected.to be true } - - context 'with empty selector' do - let(:selector) { {} } - - it { is_expected.to be true } - end - - context 'with nil matchLabels in selector' do - let(:selector) { { matchLabels: nil } } - - it { is_expected.to be true } - end - - context 'with empty matchLabels in selector' do - let(:selector) { { matchLabels: {} } } - - it { is_expected.to be true } - end - - context 'with disabled_by label in matchLabels in selector' do - let(:selector) do - { matchLabels: { Gitlab::Kubernetes::NetworkPolicyCommon::DISABLED_BY_LABEL => 'gitlab' } } - end - - it { is_expected.to be false } - end - end - - describe 'enable' do - subject { policy.enabled? } - - let(:selector) { nil } - - before do - policy.enable - end - - it { is_expected.to be true } - - context 'with empty selector' do - let(:selector) { {} } - - it { is_expected.to be true } - end - - context 'with nil matchLabels in selector' do - let(:selector) { { matchLabels: nil } } - - it { is_expected.to be true } - end - - context 'with empty matchLabels in selector' do - let(:selector) { { matchLabels: {} } } - - it { is_expected.to be true } - end - - context 'with disabled_by label in matchLabels in selector' do - let(:selector) do - { matchLabels: { Gitlab::Kubernetes::NetworkPolicyCommon::DISABLED_BY_LABEL => 'gitlab' } } - end - - it { is_expected.to be true } - end - end - - describe 'disable' do - subject { policy.enabled? } - - let(:selector) { nil } - - before do - policy.disable - end - - it { is_expected.to be false } - - context 'with empty selector' do - let(:selector) { {} } - - it { is_expected.to be false } - end - - context 'with nil matchLabels in selector' do - let(:selector) { { matchLabels: nil } } - - it { is_expected.to be false } - end - - context 'with empty matchLabels in selector' do - let(:selector) { { matchLabels: {} } } - - it { is_expected.to be false } - end - - context 'with disabled_by label in matchLabels in selector' do - let(:selector) do - { matchLabels: { Gitlab::Kubernetes::NetworkPolicyCommon::DISABLED_BY_LABEL => 'gitlab' } } - end - - it { is_expected.to be false } - end - end -end