summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/lib/utils/dom_utils.js6
-rw-r--r--app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue6
-rw-r--r--app/assets/javascripts/security_configuration/components/app.vue44
-rw-r--r--app/assets/javascripts/security_configuration/components/constants.js4
-rw-r--r--app/assets/javascripts/security_configuration/graphql/current_license.query.graphql6
-rw-r--r--app/assets/javascripts/security_configuration/index.js1
-rw-r--r--app/models/project.rb4
-rw-r--r--app/presenters/projects/security/configuration_presenter.rb3
-rw-r--r--data/whats_new/202204210001_14_10.yml4
-rw-r--r--doc/development/database_debugging.md4
-rw-r--r--doc/development/graphql_guide/pagination.md2
-rw-r--r--doc/development/i18n/proofreader.md2
-rw-r--r--doc/operations/metrics/embed_grafana.md6
-rw-r--r--doc/subscriptions/gitlab_dedicated/index.md34
-rw-r--r--doc/user/admin_area/appearance.md16
-rw-r--r--doc/user/admin_area/index.md20
-rw-r--r--doc/user/admin_area/merge_requests_approvals.md2
-rw-r--r--doc/user/admin_area/settings/account_and_limit_settings.md16
-rw-r--r--doc/user/admin_area/settings/floc.md2
-rw-r--r--doc/user/admin_area/settings/project_integration_management.md12
-rw-r--r--doc/user/admin_area/settings/terms.md2
-rw-r--r--doc/user/admin_area/settings/visibility_and_access_controls.md6
-rw-r--r--doc/user/project/clusters/kubernetes_pod_logs.md2
-rw-r--r--doc/user/project/import/gitlab_com.md4
-rw-r--r--doc/user/project/import/manifest.md2
-rw-r--r--doc/user/project/issues/confidential_issues.md2
-rw-r--r--doc/user/project/issues/managing_issues.md2
-rw-r--r--doc/user/project/repository/managing_large_repositories.md8
-rw-r--r--package.json2
-rw-r--r--spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js12
-rw-r--r--spec/frontend/security_configuration/components/app_spec.js187
-rw-r--r--spec/frontend/security_configuration/mock_data.js9
-rw-r--r--spec/models/project_spec.rb8
-rw-r--r--yarn.lock12
34 files changed, 190 insertions, 262 deletions
diff --git a/app/assets/javascripts/lib/utils/dom_utils.js b/app/assets/javascripts/lib/utils/dom_utils.js
index 4262329aae7..d7f0877837c 100644
--- a/app/assets/javascripts/lib/utils/dom_utils.js
+++ b/app/assets/javascripts/lib/utils/dom_utils.js
@@ -38,9 +38,9 @@ export const toggleContainerClasses = (containerEl, classList) => {
/**
* Return a object mapping element dataset names to booleans.
*
- * This is useful for data- attributes whose presense represent
- * a truthiness, no matter the value of the attribute. The absense of the
- * attribute represents falsiness.
+ * This is useful for data- attributes whose presence represent
+ * a truthiness, no matter the value of the attribute. The absence of the
+ * attribute represents falsiness.
*
* This can be useful when Rails-provided boolean-like values are passed
* directly to the HAML template, rather than cast to a string.
diff --git a/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue b/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue
index a5189201112..130d6977936 100644
--- a/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue
+++ b/app/assets/javascripts/packages_and_registries/settings/group/components/dependency_proxy_settings.vue
@@ -77,9 +77,6 @@ export default {
this.updateDependencyProxyImageTtlGroupPolicy(payload);
},
},
- helpText() {
- return this.enabled ? this.$options.i18n.enabledProxyHelpText : '';
- },
},
methods: {
mutationVariables(payload) {
@@ -144,11 +141,10 @@ export default {
v-model="enabled"
:disabled="isLoading"
:label="$options.i18n.enabledProxyLabel"
- :help="helpText"
data-qa-selector="dependency_proxy_setting_toggle"
data-testid="dependency-proxy-setting-toggle"
>
- <template #help>
+ <template v-if="enabled" #help>
<span class="gl-overflow-break-word gl-max-w-100vw gl-display-inline-block">
<gl-sprintf :message="$options.i18n.enabledProxyHelpText">
<template #link="{ content }">
diff --git a/app/assets/javascripts/security_configuration/components/app.vue b/app/assets/javascripts/security_configuration/components/app.vue
index d0c4ad3646c..c168d686053 100644
--- a/app/assets/javascripts/security_configuration/components/app.vue
+++ b/app/assets/javascripts/security_configuration/components/app.vue
@@ -4,10 +4,9 @@ import { __, s__ } from '~/locale';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
import UserCalloutDismisser from '~/vue_shared/components/user_callout_dismisser.vue';
import SectionLayout from '~/vue_shared/security_configuration/components/section_layout.vue';
-import currentLicenseQuery from '~/security_configuration/graphql/current_license.query.graphql';
import AutoDevOpsAlert from './auto_dev_ops_alert.vue';
import AutoDevOpsEnabledAlert from './auto_dev_ops_enabled_alert.vue';
-import { AUTO_DEVOPS_ENABLED_ALERT_DISMISSED_STORAGE_KEY, LICENSE_ULTIMATE } from './constants';
+import { AUTO_DEVOPS_ENABLED_ALERT_DISMISSED_STORAGE_KEY } from './constants';
import FeatureCard from './feature_card.vue';
import TrainingProviderList from './training_provider_list.vue';
import UpgradeBanner from './upgrade_banner.vue';
@@ -51,17 +50,6 @@ export default {
TrainingProviderList,
},
inject: ['projectFullPath', 'vulnerabilityTrainingDocsPath'],
- apollo: {
- currentLicensePlan: {
- query: currentLicenseQuery,
- update({ currentLicense }) {
- return currentLicense?.plan;
- },
- error() {
- this.hasCurrentLicenseFetchError = true;
- },
- },
- },
props: {
augmentedSecurityFeatures: {
type: Array,
@@ -96,13 +84,15 @@ export default {
required: false,
default: '',
},
+ securityTrainingEnabled: {
+ type: Boolean,
+ required: true,
+ },
},
data() {
return {
autoDevopsEnabledAlertDismissedProjects: [],
errorMessage: '',
- currentLicensePlan: '',
- hasCurrentLicenseFetchError: false,
};
},
computed: {
@@ -123,12 +113,6 @@ export default {
!this.autoDevopsEnabledAlertDismissedProjects.includes(this.projectFullPath)
);
},
- shouldShowVulnerabilityManagementTab() {
- // if the query fails (if the plan is `null` also means an error has occurred) we still want to show the feature
- const hasQueryError = this.hasCurrentLicenseFetchError || this.currentLicensePlan === null;
-
- return hasQueryError || this.currentLicensePlan === LICENSE_ULTIMATE;
- },
},
methods: {
dismissAutoDevopsEnabledAlert() {
@@ -253,9 +237,9 @@ export default {
{{ $options.i18n.description }}
</p>
<p v-if="canViewCiHistory">
- <gl-link data-testid="compliance-view-history-link" :href="gitlabCiHistoryPath">{{
- $options.i18n.configurationHistory
- }}</gl-link>
+ <gl-link data-testid="compliance-view-history-link" :href="gitlabCiHistoryPath">
+ {{ $options.i18n.configurationHistory }}
+ </gl-link>
</p>
</template>
<template #features>
@@ -270,20 +254,18 @@ export default {
</section-layout>
</gl-tab>
<gl-tab
- v-if="shouldShowVulnerabilityManagementTab"
+ v-if="securityTrainingEnabled"
data-testid="vulnerability-management-tab"
:title="$options.i18n.vulnerabilityManagement"
query-param-value="vulnerability-management"
>
<section-layout :heading="$options.i18n.securityTraining">
<template #description>
+ <p>{{ $options.i18n.securityTrainingDescription }}</p>
<p>
- {{ $options.i18n.securityTrainingDescription }}
- </p>
- <p>
- <gl-link :href="vulnerabilityTrainingDocsPath">{{
- $options.i18n.securityTrainingDoc
- }}</gl-link>
+ <gl-link :href="vulnerabilityTrainingDocsPath">
+ {{ $options.i18n.securityTrainingDoc }}
+ </gl-link>
</p>
</template>
<template #features>
diff --git a/app/assets/javascripts/security_configuration/components/constants.js b/app/assets/javascripts/security_configuration/components/constants.js
index 5b04ad6f9ba..e4d2bd08f50 100644
--- a/app/assets/javascripts/security_configuration/components/constants.js
+++ b/app/assets/javascripts/security_configuration/components/constants.js
@@ -310,7 +310,3 @@ export const TEMP_PROVIDER_URLS = {
Kontra: 'https://application.security/',
[__('Secure Code Warrior')]: 'https://www.securecodewarrior.com/',
};
-
-export const LICENSE_ULTIMATE = 'ultimate';
-export const LICENSE_FREE = 'free';
-export const LICENSE_PREMIUM = 'premium';
diff --git a/app/assets/javascripts/security_configuration/graphql/current_license.query.graphql b/app/assets/javascripts/security_configuration/graphql/current_license.query.graphql
deleted file mode 100644
index 9ab4f4d4347..00000000000
--- a/app/assets/javascripts/security_configuration/graphql/current_license.query.graphql
+++ /dev/null
@@ -1,6 +0,0 @@
-query getCurrentLicensePlan {
- currentLicense {
- id
- plan
- }
-}
diff --git a/app/assets/javascripts/security_configuration/index.js b/app/assets/javascripts/security_configuration/index.js
index dcc41a38067..637d510e684 100644
--- a/app/assets/javascripts/security_configuration/index.js
+++ b/app/assets/javascripts/security_configuration/index.js
@@ -56,6 +56,7 @@ export const initSecurityConfiguration = (el) => {
'gitlabCiPresent',
'autoDevopsEnabled',
'canEnableAutoDevops',
+ 'securityTrainingEnabled',
]),
},
});
diff --git a/app/models/project.rb b/app/models/project.rb
index e46f2a38cb0..15f20bff642 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -2906,6 +2906,10 @@ class Project < ApplicationRecord
build_artifacts_size_refresh&.started?
end
+ def security_training_available?
+ licensed_feature_available?(:security_training)
+ end
+
private
# overridden in EE
diff --git a/app/presenters/projects/security/configuration_presenter.rb b/app/presenters/projects/security/configuration_presenter.rb
index 772be0125a0..8a6569e7bf3 100644
--- a/app/presenters/projects/security/configuration_presenter.rb
+++ b/app/presenters/projects/security/configuration_presenter.rb
@@ -24,7 +24,8 @@ module Projects
gitlab_ci_history_path: gitlab_ci_history_path,
auto_fix_enabled: autofix_enabled,
can_toggle_auto_fix_settings: can_toggle_autofix,
- auto_fix_user_path: auto_fix_user_path
+ auto_fix_user_path: auto_fix_user_path,
+ security_training_enabled: project.security_training_available?
}
end
diff --git a/data/whats_new/202204210001_14_10.yml b/data/whats_new/202204210001_14_10.yml
index 162738661a2..2f3d32bd87c 100644
--- a/data/whats_new/202204210001_14_10.yml
+++ b/data/whats_new/202204210001_14_10.yml
@@ -24,7 +24,9 @@
release: 14.10
- title: "Escalating manually created incidents"
body: |
- In GitLab 13.10, we [released](https://gitlab.com/gitlab-org/gl-openshift/gitlab-runner-operator/-/issues/6) the GitLab Runner Operator for the Red Hat OpenShift container platform for Kubernetes. That release provided OpenShift users with the automation and management capabilities of the Operator Framework and simplified the ongoing management of runners in an OpenShift Kubernetes cluster. Available starting in 14.10 is a GitLab Runner Operator v1.7.0 that you can use in non-OpenShift Kubernetes clusters. This GitLab Runner Operator is available on [OperatorHub.io](https://operatorhub.io/operator/gitlab-runner-operator).
+ Incident Management is set up to trigger escalation policies for new alerts. In this scenario, the on-call responder who is paged can end the paging by acknowledging the alert. If the responder changes the status back to triggered, we restart the escalation policy and begin paging again. When a user creates an incident manually, there is no associated alert and therefore no way to page on-call responders.
+
+ This release enables paging on manually created incidents. Responders now have the ability to acknowledge the page on incidents, or restart paging by resetting the status to triggered, just as you can for alerts.
stage: monitor
self-managed: true
gitlab-com: true
diff --git a/doc/development/database_debugging.md b/doc/development/database_debugging.md
index 426d355bd82..37b6fdf5e07 100644
--- a/doc/development/database_debugging.md
+++ b/doc/development/database_debugging.md
@@ -106,8 +106,8 @@ Use these instructions for exploring the GitLab database while developing with t
1. Install or open [Visual Studio Code](https://code.visualstudio.com/download).
1. Install the [PostgreSQL VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ckolkman.vscode-postgres).
-1. In Visual Studio Code click on the PostgreSQL Explorer button in the left toolbar.
-1. In the top bar of the new window, click on the `+` to **Add Database Connection**, and follow the prompts to fill in the details:
+1. In Visual Studio Code select the PostgreSQL Explorer button in the left toolbar.
+1. In the top bar of the new window, select `+` to **Add Database Connection**, and follow the prompts to fill in the details:
1. **Hostname**: the path to the PostgreSQL folder in your GDK directory (for example `/dev/gitlab-development-kit/postgresql`).
1. **PostgreSQL user to authenticate as**: usually your local username, unless otherwise specified during PostgreSQL installation.
1. **Password of the PostgreSQL user**: the password you set when installing PostgreSQL.
diff --git a/doc/development/graphql_guide/pagination.md b/doc/development/graphql_guide/pagination.md
index 1f40a605cfe..72f321a1fd2 100644
--- a/doc/development/graphql_guide/pagination.md
+++ b/doc/development/graphql_guide/pagination.md
@@ -23,7 +23,7 @@ and used across much of GitLab. You can recognize it by
a list of page numbers near the bottom of a page, which, when clicked,
take you to that page of results.
-For example, when you click **Page 100**, we send `100` to the
+For example, when you select **Page 100**, we send `100` to the
backend. For example, if each page has say 20 items, the
backend calculates `20 * 100 = 2000`,
and it queries the database by offsetting (skipping) the first 2000
diff --git a/doc/development/i18n/proofreader.md b/doc/development/i18n/proofreader.md
index afc04045763..b15f52dcce7 100644
--- a/doc/development/i18n/proofreader.md
+++ b/doc/development/i18n/proofreader.md
@@ -147,7 +147,7 @@ translations to the GitLab project.
1. Request proofreader permissions by opening a merge request to add yourself to the list of
proofreaders.
- Open the [`proofreader.md` source file](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/i18n/proofreader.md) and click **Edit**.
+ Open the [`proofreader.md` source file](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/i18n/proofreader.md) and select **Edit**.
Add your language in alphabetical order and add yourself to the list, including:
diff --git a/doc/operations/metrics/embed_grafana.md b/doc/operations/metrics/embed_grafana.md
index 5bfb097619d..700bf821a49 100644
--- a/doc/operations/metrics/embed_grafana.md
+++ b/doc/operations/metrics/embed_grafana.md
@@ -52,7 +52,7 @@ To set up the Grafana API in Grafana:
1. To enable the integration, check the **Active** checkbox.
1. For **Grafana URL**, enter the base URL of the Grafana instance.
1. For **API Token**, enter the Administrator API token you just generated.
-1. Click **Save Changes**.
+1. Select **Save Changes**.
### Generate a link to a panel
@@ -61,10 +61,10 @@ To generate a link to a panel:
1. In Grafana, go to the dashboard you wish to embed a panel from.
1. In the upper-left corner of the page, select a specific value for each variable required for the
queries in the dashboard.
-1. In Grafana click on a panel's title, then click **Share** to open the panel's sharing dialog to
+1. In Grafana select a panel's title, then select **Share** to open the panel's sharing dialog to
the **Link** tab.
- If you click the dashboard's share button instead, GitLab attempts to embed the first supported
+ If you select the dashboard's share button instead, GitLab attempts to embed the first supported
panel on the dashboard (if available).
1. If your Prometheus queries use Grafana's custom template variables, ensure the
**Template variables** option is set to on. Only the Grafana global template variables
diff --git a/doc/subscriptions/gitlab_dedicated/index.md b/doc/subscriptions/gitlab_dedicated/index.md
index 7c768d1b403..4dc4f90f653 100644
--- a/doc/subscriptions/gitlab_dedicated/index.md
+++ b/doc/subscriptions/gitlab_dedicated/index.md
@@ -72,8 +72,38 @@ Fill in the following form to contact us and learn more about this offering.
See https://gitlab.com/gitlab-com/marketing/marketing-operations/-/issues/6238#note_923358643
-->
-<script src="//page.gitlab.com/js/forms2/js/forms2.min.js"></script>
+<script src="https://page.gitlab.com/js/forms2/js/forms2.min.js"></script>
<form id="mktoForm_3226"></form>
-<script>MktoForms2.loadForm("//page.gitlab.com", "194-VVC-221", 3226);</script>
+<script>MktoForms2.loadForm("https://page.gitlab.com", "194-VVC-221", 3226);</script>
+<style>
+ #mktoForm_3226 {
+ font-size: .875rem !important;
+ }
+ .mktoLabel {
+ margin-top: 1rem !important;
+ padding-bottom: .5rem !important;
+ font-weight: 600;
+ }
+ .mktoHtmlText,
+ #LblPhone,
+ .mktoTextField,
+ #commentCapture,
+ .mktoField,
+ .mktoButtonRow button {
+ width: 20rem !important;
+ }
+ .mktoHtmlText {
+ font-size: .875rem;
+ }
+ .mktoButtonRow {
+ margin: 1em 0;
+ }
+ .mktoButtonRow span {
+ margin-left: 0 !important;
+ }
+ .mktoButtonRow button {
+ margin: 1em 0 1.5em !important;
+ }
+</style>
<!-- markdownlint-enable -->
diff --git a/doc/user/admin_area/appearance.md b/doc/user/admin_area/appearance.md
index 2083cb06f93..389bad28fa4 100644
--- a/doc/user/admin_area/appearance.md
+++ b/doc/user/admin_area/appearance.md
@@ -19,7 +19,7 @@ By default, the navigation bar has the GitLab logo, but this can be customized w
any image desired. It is optimized for images 28px high (any width), but any image can be
used (less than 1 MB) and it is automatically resized.
-After you select and upload an image, click **Update appearance settings** at the bottom
+After you select and upload an image, select **Update appearance settings** at the bottom
of the page to activate it in the GitLab instance.
NOTE:
@@ -31,7 +31,7 @@ By default, the favicon (used by the browser as the tab icon, as well as the CI
uses the GitLab logo, but this can be customized with any icon desired. It must be a
32x32 `.png` or `.ico` image.
-After you select and upload an icon, click **Update appearance settings** at the bottom
+After you select and upload an icon, select **Update appearance settings** at the bottom
of the page to activate it in the GitLab instance.
## System header and footer messages
@@ -48,7 +48,7 @@ as the header and footer messages can only be a single line.
If desired, you can select **Enable header and footer in emails** to have the text of
the header and footer added to all emails sent by the GitLab instance.
-After you add a message, click **Update appearance settings** at the bottom of the page
+After you add a message, select **Update appearance settings** at the bottom of the page
to activate it in the GitLab instance.
## Sign in / Sign up pages
@@ -60,8 +60,8 @@ The optimal size for the logo is 640x360px, but any image can be used (below 1MB
and it is resized automatically. The logo image appears between the title and
the description, on the left of the sign-up page.
-After you add a message, click **Update appearance settings** at the bottom of the page
-to activate it in the GitLab instance. You can also click on the **Sign-in page** button,
+After you add a message, select **Update appearance settings** at the bottom of the page
+to activate it in the GitLab instance. You can also select **Sign-in page**,
to review the saved appearance settings:
NOTE:
@@ -75,9 +75,9 @@ You can make full use of [Markdown](../markdown.md) in the description:
The message is displayed below the **New Project** message, on the left side
of the **New project page**.
-After you add a message, click **Update appearance settings** at the bottom of the page
-to activate it in the GitLab instance. You can also click on the **New project page**
-button, which brings you to the new project page so you can review the change.
+After you add a message, select **Update appearance settings** at the bottom of the page
+to activate it in the GitLab instance. You can also select **New project page**,
+which brings you to the new project page so you can review the change.
## Libravatar
diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md
index 262bb2cc931..f62165f3e3f 100644
--- a/doc/user/admin_area/index.md
+++ b/doc/user/admin_area/index.md
@@ -105,7 +105,7 @@ To filter only projects in that namespace, select from the **Namespace** dropdow
You can combine the filter options. For example, to list only public projects with `score` in their name:
-1. Click the **Public** tab.
+1. Select the **Public** tab.
1. Enter `score` in the **Filter by name...** input box.
### Administering Users
@@ -115,7 +115,7 @@ You can administer all users in the GitLab instance from the Admin Area's Users
1. On the top bar, select **Menu > Admin**.
1. On the left sidebar, select **Overview > Users**.
-To list users matching a specific criteria, click on one of the following tabs on the **Users** page:
+To list users matching a specific criteria, select one of the following tabs on the **Users** page:
- **Active**
- **Admins**
@@ -135,13 +135,13 @@ For each user, the following are listed:
1. Date of account creation
1. Date of last activity
-To edit a user, click the **Edit** button in that user's
-row. To delete the user, or delete the user and their contributions, click the cog dropdown in
+To edit a user, select the **Edit** button in that user's
+row. To delete the user, or delete the user and their contributions, select the cog dropdown in
that user's row, and select the desired option.
To change the sort order:
-1. Click the sort dropdown.
+1. Select the sort dropdown.
1. Select the desired order.
By default the sort dropdown shows **Name**.
@@ -240,17 +240,17 @@ To access the Groups page:
1. On the left sidebar, select **Overview > Groups**.
For each group, the page displays their name, description, size, number of projects in the group,
-number of members, and whether the group is private, internal, or public. To edit a group, click
-the **Edit** button in that group's row. To delete the group, click the **Delete** button in
+number of members, and whether the group is private, internal, or public. To edit a group, select
+the **Edit** button in that group's row. To delete the group, select the **Delete** button in
that group's row.
-To change the sort order, click the sort dropdown and select the desired order. The default
+To change the sort order, select the sort dropdown and select the desired order. The default
sort order is by **Last created**.
To search for groups by name, enter your criteria in the search field. The group search is case
insensitive, and applies partial matching.
-To [Create a new group](../group/index.md#create-a-group) click **New group**.
+To [Create a new group](../group/index.md#create-a-group) select **New group**.
### Administering Topics
@@ -286,7 +286,7 @@ To access the Jobs page:
1. On the top bar, select **Menu > Admin**.
1. On the left sidebar, select **Overview > Jobs**. All jobs are listed, in descending order of job ID.
-1. Click the **All** tab to list all jobs. Click the **Pending**, **Running**, or **Finished**
+1. Select the **All** tab to list all jobs. Select the **Pending**, **Running**, or **Finished**
tab to list only jobs of that status.
For each job, the following details are listed:
diff --git a/doc/user/admin_area/merge_requests_approvals.md b/doc/user/admin_area/merge_requests_approvals.md
index ed7fdfe2111..6948dab89d8 100644
--- a/doc/user/admin_area/merge_requests_approvals.md
+++ b/doc/user/admin_area/merge_requests_approvals.md
@@ -22,7 +22,7 @@ To enable merge request approval settings for an instance:
1. On the top bar, select **Menu > Admin**.
1. On the left sidebar, select **{push-rules}** **Push Rules**, and expand **Merge request approvals**.
1. Choose the required options.
-1. Click **Save changes**.
+1. Select **Save changes**.
## Available rules
diff --git a/doc/user/admin_area/settings/account_and_limit_settings.md b/doc/user/admin_area/settings/account_and_limit_settings.md
index 9905298784a..9fc50af9b27 100644
--- a/doc/user/admin_area/settings/account_and_limit_settings.md
+++ b/doc/user/admin_area/settings/account_and_limit_settings.md
@@ -112,7 +112,7 @@ To change the default global prefix:
1. On the left sidebar, select **Settings > General**.
1. Expand the **Account and limit** section.
1. Fill in the **Personal Access Token prefix** field.
-1. Click **Save changes**.
+1. Select **Save changes**.
You can also configure the prefix by using the
[settings API](../../../api/settings.md).
@@ -148,17 +148,17 @@ These settings can be found in:
- Each project's settings:
1. From the Project's homepage, navigate to **Settings > General**.
1. Fill in the **Repository size limit (MB)** field in the **Naming, topics, avatar** section.
- 1. Click **Save changes**.
+ 1. Select **Save changes**.
- Each group's settings:
1. From the Group's homepage, navigate to **Settings > General**.
1. Fill in the **Repository size limit (MB)** field in the **Naming, visibility** section.
- 1. Click **Save changes**.
+ 1. Select **Save changes**.
- GitLab global settings:
1. On the top bar, select **Menu > Admin**.
1. On the left sidebar, select **Settings > General**.
1. Expand the **Account and limit** section.
1. Fill in the **Size limit per repository (MB)** field.
- 1. Click **Save changes**.
+ 1. Select **Save changes**.
The first push of a new project, including LFS objects, is checked for size.
If the sum of their sizes exceeds the maximum allowed repository size, the push
@@ -186,7 +186,7 @@ To set a limit on how long these sessions are valid:
1. On the left sidebar, select **Settings > General**.
1. Expand the **Account and limit** section.
1. Fill in the **Session duration for Git operations when 2FA is enabled (minutes)** field.
-1. Click **Save changes**.
+1. Select **Save changes**.
## Limit the lifetime of SSH keys **(ULTIMATE SELF)**
@@ -213,7 +213,7 @@ To set a lifetime on how long SSH keys are valid:
1. On the left sidebar, select **Settings > General**.
1. Expand the **Account and limit** section.
1. Fill in the **Maximum allowable lifetime for SSH keys (days)** field.
-1. Click **Save changes**.
+1. Select **Save changes**.
Once a lifetime for SSH keys is set, GitLab:
@@ -261,7 +261,7 @@ To set a lifetime on how long access tokens are valid:
1. On the left sidebar, select **Settings > General**.
1. Expand the **Account and limit** section.
1. Fill in the **Maximum allowable lifetime for access tokens (days)** field.
-1. Click **Save changes**.
+1. Select **Save changes**.
Once a lifetime for access tokens is set, GitLab:
@@ -328,4 +328,4 @@ Your push has been rejected, because this repository has exceeded its size limit
To resolve this problem, either of these options helps in the short- to middle-term:
- Increase the [repository size limit](#repository-size-limit).
-- [Reduce the repo size](../../project/repository/reducing_the_repo_size_using_git.md).
+- [Reduce the repository size](../../project/repository/reducing_the_repo_size_using_git.md).
diff --git a/doc/user/admin_area/settings/floc.md b/doc/user/admin_area/settings/floc.md
index 6bfc6dfbebd..dccab461b85 100644
--- a/doc/user/admin_area/settings/floc.md
+++ b/doc/user/admin_area/settings/floc.md
@@ -26,7 +26,7 @@ To enable it:
1. On the left sidebar, select **Settings > General**.
1. Expand **Federated Learning of Cohorts**.
1. Check the box.
-1. Click **Save changes**.
+1. Select **Save changes**.
<!-- ## Troubleshooting
diff --git a/doc/user/admin_area/settings/project_integration_management.md b/doc/user/admin_area/settings/project_integration_management.md
index aadabe4d6ad..010ba6a12fc 100644
--- a/doc/user/admin_area/settings/project_integration_management.md
+++ b/doc/user/admin_area/settings/project_integration_management.md
@@ -25,7 +25,7 @@ Only the complete settings for an integration can be inherited. Per-field inheri
1. On the top bar, select **Menu > Admin**.
1. On the left sidebar, select **Settings > Integrations**.
1. Select an integration.
-1. Enter configuration details and click **Save changes**.
+1. Enter configuration details and select **Save changes**.
WARNING:
This may affect all or most of the groups and projects on your GitLab instance. Please review the details
@@ -57,7 +57,7 @@ integration on all non-configured groups and projects by default.
1. On the top bar, select **Menu > Admin**.
1. On the left sidebar, select **Settings > Integrations**.
1. Select an integration.
-1. Click **Reset** and confirm.
+1. Select **Reset** and confirm.
Resetting an instance-level default setting removes the integration from all projects that have the integration set to use default settings.
@@ -79,7 +79,7 @@ for an integration.
1. Navigate to the group's **Settings > Integrations**.
1. Select an integration.
-1. Enter configuration details and click **Save changes**.
+1. Enter configuration details and select **Save changes**.
WARNING:
This may affect all or most of the subgroups and projects belonging to the group. Please review the details below.
@@ -112,7 +112,7 @@ integration on all non-configured groups and projects by default.
1. Navigate to the group's **Settings > Integrations**.
1. Select an integration.
-1. Click **Reset** and confirm.
+1. Select **Reset** and confirm.
Resetting a group-level default setting removes integrations that use default settings and belong to a project or subgroup of the group.
@@ -124,7 +124,7 @@ Resetting a group-level default setting removes integrations that use default se
1. Choose the integration you want to enable or update.
1. From the drop-down, select **Use default settings**.
1. Ensure the toggle is set to **Enable integration**.
-1. Click **Save changes**.
+1. Select **Save changes**.
## Use custom settings for a group or project integration
@@ -132,4 +132,4 @@ Resetting a group-level default setting removes integrations that use default se
1. Choose the integration you want to enable or update.
1. From the drop-down, select **Use custom settings**.
1. Ensure the toggle is set to **Enable integration** and enter all required settings.
-1. Click **Save changes**.
+1. Select **Save changes**.
diff --git a/doc/user/admin_area/settings/terms.md b/doc/user/admin_area/settings/terms.md
index 693b3e6c7b6..870fa7ad18e 100644
--- a/doc/user/admin_area/settings/terms.md
+++ b/doc/user/admin_area/settings/terms.md
@@ -23,7 +23,7 @@ To enforce acceptance of a Terms of Service and Privacy Policy:
1. Check the **All users must accept the Terms of Service and Privacy Policy to access GitLab** checkbox.
1. Input the text of the **Terms of Service and Privacy Policy**. You can use [Markdown](../../markdown.md)
in this text box.
-1. Click **Save changes**.
+1. Select **Save changes**.
For each update to the terms, a new version is stored. When a user accepts or declines the terms,
GitLab records which version they accepted or declined.
diff --git a/doc/user/admin_area/settings/visibility_and_access_controls.md b/doc/user/admin_area/settings/visibility_and_access_controls.md
index 3eae0d0ff90..33b392676ad 100644
--- a/doc/user/admin_area/settings/visibility_and_access_controls.md
+++ b/doc/user/admin_area/settings/visibility_and_access_controls.md
@@ -75,7 +75,7 @@ of projects or groups.
To change this period:
1. Select the desired option.
-1. Click **Save changes**.
+1. Select **Save changes**.
### Override defaults and delete immediately
@@ -226,7 +226,7 @@ For example, if:
To specify a custom Git clone URL for HTTP(S):
1. Enter a root URL for **Custom Git clone URL for HTTP(S)**.
-1. Click on **Save changes**.
+1. Select **Save changes**.
NOTE:
SSH clone URLs can be customized in `gitlab.rb` by setting `gitlab_rails['gitlab_ssh_host']` and
@@ -239,7 +239,7 @@ These options specify the permitted types and lengths for SSH keys.
To specify a restriction for each key type:
1. Select the desired option from the dropdown.
-1. Click **Save changes**.
+1. Select **Save changes**.
For more details, see [SSH key restrictions](../../../security/ssh_keys_restrictions.md).
diff --git a/doc/user/project/clusters/kubernetes_pod_logs.md b/doc/user/project/clusters/kubernetes_pod_logs.md
index 0e81e23a406..58006c29057 100644
--- a/doc/user/project/clusters/kubernetes_pod_logs.md
+++ b/doc/user/project/clusters/kubernetes_pod_logs.md
@@ -68,7 +68,7 @@ a [metrics dashboard](../../../operations/metrics/index.md) and select **View lo
1. When mousing over the list of pods, GitLab displays a tooltip with the exact pod name
and status.
![deploy boards pod list](img/pod_logs_deploy_board.png)
- 1. Select on the desired pod to display the **Log Explorer**.
+ 1. Select the desired pod to display the **Log Explorer**.
### Logs view
diff --git a/doc/user/project/import/gitlab_com.md b/doc/user/project/import/gitlab_com.md
index 6913cda0cd5..4103367accc 100644
--- a/doc/user/project/import/gitlab_com.md
+++ b/doc/user/project/import/gitlab_com.md
@@ -19,12 +19,12 @@ you'll need to follow the instructions for [exporting a project](../settings/imp
![New project page](img/gitlab_new_project_page_v12_2.png)
-Go to the **Import Projects** tab, then click on **GitLab.com**, and you are redirected to GitLab.com
+Go to the **Import Projects** tab, then select **GitLab.com**, and you are redirected to GitLab.com
for permission to access your projects. After accepting, you are automatically redirected to the importer.
![Importer page](img/gitlab_importer.png)
-To import a project, click "Import". The importer imports your repository and issues.
+To import a project, select **Import**. The importer imports your repository and issues.
Once the importer is done, a new GitLab project is created with your imported data.
## Automate group and project import **(PREMIUM)**
diff --git a/doc/user/project/import/manifest.md b/doc/user/project/import/manifest.md
index 5e37c4e5f6b..f04048980e7 100644
--- a/doc/user/project/import/manifest.md
+++ b/doc/user/project/import/manifest.md
@@ -55,7 +55,7 @@ To start the import:
1. From your GitLab dashboard select **New project**.
1. Switch to the **Import project** tab.
-1. Select on the **Manifest file** button.
+1. Select **Manifest file**.
1. Provide GitLab with a manifest XML file.
1. Select a group you want to import to (you need to create a group first if you don't have one).
1. Select **List available repositories**. At this point, you are redirected
diff --git a/doc/user/project/issues/confidential_issues.md b/doc/user/project/issues/confidential_issues.md
index 9d23a63b940..2e10e15ba5a 100644
--- a/doc/user/project/issues/confidential_issues.md
+++ b/doc/user/project/issues/confidential_issues.md
@@ -31,7 +31,7 @@ There are two ways to change an issue's confidentiality.
The first way is to edit the issue and toggle the confidentiality checkbox.
After you save the issue, the confidentiality of the issue is updated.
-The second way is to locate the Confidentiality section in the sidebar and click
+The second way is to locate the **Confidentiality** section in the sidebar and select
**Edit**. A popup should appear and give you the option to turn on or turn off confidentiality.
| Turn off confidentiality | Turn on confidentiality |
diff --git a/doc/user/project/issues/managing_issues.md b/doc/user/project/issues/managing_issues.md
index 7db66dd013b..950071a7de2 100644
--- a/doc/user/project/issues/managing_issues.md
+++ b/doc/user/project/issues/managing_issues.md
@@ -243,7 +243,7 @@ You can also reorder list items, which include bullet, numerical, and task list
To reorder list items:
1. Hover over the list item row to make the drag icon visible.
-1. Click and hold the drag icon.
+1. Select and hold the drag icon.
1. Drag the row to the new position in the list.
1. Release the drag icon.
diff --git a/doc/user/project/repository/managing_large_repositories.md b/doc/user/project/repository/managing_large_repositories.md
index d6f88697c54..612c888cd23 100644
--- a/doc/user/project/repository/managing_large_repositories.md
+++ b/doc/user/project/repository/managing_large_repositories.md
@@ -16,13 +16,13 @@ On this page we detail several best practices to improve performance with these
It's *strongly* recommended in any Git system that binary or blob files (for example, packages, audio, video, graphics, etc.) are stored as Large File Storage (LFS) objects. In such setup, the Objects are stored elsewhere, such as in Object Storage, and this can reduce the repository size significantly, thus improving performance.
-Refer to the [Git LFS docs for more info](../../../topics/git/lfs/index.md).
+Refer to the [Git LFS docs for more information](../../../topics/git/lfs/index.md).
## Gitaly Pack Objects Cache
Gitaly, the service that provides storage for Git repositories, can be configured to cache a short rolling window of Git fetch responses. This is recommended for large repositories as it can notably reduce server load when your server receives lots of fetch traffic.
-Refer to the [Gitaly Pack Objects Cache for more info](../../../administration/gitaly/configure_gitaly.md#pack-objects-cache).
+Refer to the [Gitaly Pack Objects Cache for more information](../../../administration/gitaly/configure_gitaly.md#pack-objects-cache).
## Reference Architectures
@@ -34,7 +34,7 @@ In these types of setups it's recommended that the GitLab environment used match
Gitaly Cluster can notably improve large repository performance as it holds multiple replicas of the repository across several nodes. As a result, Gitaly Cluster can load balance read requests against those repositories and is also fault tolerant.
-It's recommended for large repositories, however, Gitaly Cluster is a large solution with additional complexity of setup and management. Refer to the [Gitaly Cluster docs for more info](../../../administration/gitaly/index.md), specifically the [Before deploying Gitaly Cluster](../../../administration/gitaly/index.md#before-deploying-gitaly-cluster) section.
+It's recommended for large repositories, however, Gitaly Cluster is a large solution with additional complexity of setup and management. Refer to the [Gitaly Cluster docs for more information](../../../administration/gitaly/index.md), specifically the [Before deploying Gitaly Cluster](../../../administration/gitaly/index.md#before-deploying-gitaly-cluster) section.
## Keep GitLab up to date
@@ -48,4 +48,4 @@ CI/CD loads tend to be concurrent as pipelines are scheduled during set times. A
When designing CI/CD pipelines, it's advisable to reduce their concurrency by staggering them to run at different times, for example, a set running at one time and then another set running several minutes later.
-There's several other actions that can be explored to improve CI/CD performance with large repositories. Refer to the [Runner docs for more info](../../../ci/large_repositories/index.md).
+There's several other actions that can be explored to improve CI/CD performance with large repositories. Refer to the [Runner docs for more information](../../../ci/large_repositories/index.md).
diff --git a/package.json b/package.json
index 85b2d6aede5..7bd51cf429f 100644
--- a/package.json
+++ b/package.json
@@ -57,7 +57,7 @@
"@gitlab/at.js": "1.5.7",
"@gitlab/favicon-overlay": "2.0.0",
"@gitlab/svgs": "2.14.0",
- "@gitlab/ui": "40.6.0",
+ "@gitlab/ui": "40.6.2",
"@gitlab/visual-review-tools": "1.7.3",
"@rails/actioncable": "6.1.4-7",
"@rails/ujs": "6.1.4-7",
diff --git a/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js b/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js
index 22754d31f93..e60989b0949 100644
--- a/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js
+++ b/spec/frontend/packages_and_registries/settings/group/components/dependency_proxy_settings_spec.js
@@ -134,12 +134,6 @@ describe('DependencyProxySettings', () => {
mountComponent();
});
- it('has the help prop correctly set', () => {
- expect(findEnableProxyToggle().props()).toMatchObject({
- help: component.i18n.enabledProxyHelpText,
- });
- });
-
it('has help text with a link', () => {
expect(findEnableProxyToggle().text()).toContain(
'To see the image prefix and what is in the cache, visit the Dependency Proxy',
@@ -157,12 +151,6 @@ describe('DependencyProxySettings', () => {
});
});
- it('has the help prop set to empty', () => {
- expect(findEnableProxyToggle().props()).toMatchObject({
- help: '',
- });
- });
-
it('the help text is not visible', () => {
expect(findToggleHelpLink().exists()).toBe(false);
});
diff --git a/spec/frontend/security_configuration/components/app_spec.js b/spec/frontend/security_configuration/components/app_spec.js
index d7d46d0d415..161f1a405d1 100644
--- a/spec/frontend/security_configuration/components/app_spec.js
+++ b/spec/frontend/security_configuration/components/app_spec.js
@@ -2,7 +2,6 @@ import Vue, { nextTick } from 'vue';
import VueApollo from 'vue-apollo';
import { GlTab, GlTabs, GlLink } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
-
import { useLocalStorageSpy } from 'helpers/local_storage_helper';
import { makeMockUserCalloutDismisser } from 'helpers/mock_user_callout_dismisser';
import stubChildren from 'helpers/stub_children';
@@ -20,22 +19,14 @@ import {
LICENSE_COMPLIANCE_DESCRIPTION,
LICENSE_COMPLIANCE_HELP_PATH,
AUTO_DEVOPS_ENABLED_ALERT_DISMISSED_STORAGE_KEY,
- LICENSE_ULTIMATE,
- LICENSE_PREMIUM,
- LICENSE_FREE,
} from '~/security_configuration/components/constants';
import FeatureCard from '~/security_configuration/components/feature_card.vue';
import TrainingProviderList from '~/security_configuration/components/training_provider_list.vue';
-import createMockApollo from 'helpers/mock_apollo_helper';
-import currentLicenseQuery from '~/security_configuration/graphql/current_license.query.graphql';
-import waitForPromises from 'helpers/wait_for_promises';
-
import UpgradeBanner from '~/security_configuration/components/upgrade_banner.vue';
import {
REPORT_TYPE_LICENSE_COMPLIANCE,
REPORT_TYPE_SAST,
} from '~/vue_shared/security_reports/constants';
-import { getCurrentLicensePlanResponse } from '../mock_data';
const upgradePath = '/upgrade';
const autoDevopsHelpPagePath = '/autoDevopsHelpPagePath';
@@ -50,31 +41,40 @@ Vue.use(VueApollo);
describe('App component', () => {
let wrapper;
let userCalloutDismissSpy;
- let mockApollo;
- const createComponent = ({
- shouldShowCallout = true,
- licenseQueryResponse = LICENSE_ULTIMATE,
- ...propsData
- }) => {
- userCalloutDismissSpy = jest.fn();
+ const securityFeaturesMock = [
+ {
+ name: SAST_NAME,
+ shortName: SAST_SHORT_NAME,
+ description: SAST_DESCRIPTION,
+ helpPath: SAST_HELP_PATH,
+ configurationHelpPath: SAST_CONFIG_HELP_PATH,
+ type: REPORT_TYPE_SAST,
+ available: true,
+ },
+ ];
- mockApollo = createMockApollo([
- [
- currentLicenseQuery,
- jest
- .fn()
- .mockResolvedValue(
- licenseQueryResponse instanceof Error
- ? licenseQueryResponse
- : getCurrentLicensePlanResponse(licenseQueryResponse),
- ),
- ],
- ]);
+ const complianceFeaturesMock = [
+ {
+ name: LICENSE_COMPLIANCE_NAME,
+ description: LICENSE_COMPLIANCE_DESCRIPTION,
+ helpPath: LICENSE_COMPLIANCE_HELP_PATH,
+ type: REPORT_TYPE_LICENSE_COMPLIANCE,
+ configurationHelpPath: LICENSE_COMPLIANCE_HELP_PATH,
+ },
+ ];
+
+ const createComponent = ({ shouldShowCallout = true, ...propsData } = {}) => {
+ userCalloutDismissSpy = jest.fn();
wrapper = extendedWrapper(
mount(SecurityConfigurationApp, {
- propsData,
+ propsData: {
+ augmentedSecurityFeatures: securityFeaturesMock,
+ augmentedComplianceFeatures: complianceFeaturesMock,
+ securityTrainingEnabled: true,
+ ...propsData,
+ },
provide: {
upgradePath,
autoDevopsHelpPagePath,
@@ -82,7 +82,6 @@ describe('App component', () => {
projectFullPath,
vulnerabilityTrainingDocsPath,
},
- apolloProvider: mockApollo,
stubs: {
...stubChildren(SecurityConfigurationApp),
GlLink: false,
@@ -133,40 +132,13 @@ describe('App component', () => {
const findAutoDevopsEnabledAlert = () => wrapper.findComponent(AutoDevopsEnabledAlert);
const findVulnerabilityManagementTab = () => wrapper.findByTestId('vulnerability-management-tab');
- const securityFeaturesMock = [
- {
- name: SAST_NAME,
- shortName: SAST_SHORT_NAME,
- description: SAST_DESCRIPTION,
- helpPath: SAST_HELP_PATH,
- configurationHelpPath: SAST_CONFIG_HELP_PATH,
- type: REPORT_TYPE_SAST,
- available: true,
- },
- ];
-
- const complianceFeaturesMock = [
- {
- name: LICENSE_COMPLIANCE_NAME,
- description: LICENSE_COMPLIANCE_DESCRIPTION,
- helpPath: LICENSE_COMPLIANCE_HELP_PATH,
- type: REPORT_TYPE_LICENSE_COMPLIANCE,
- configurationHelpPath: LICENSE_COMPLIANCE_HELP_PATH,
- },
- ];
-
afterEach(() => {
wrapper.destroy();
- mockApollo = null;
});
describe('basic structure', () => {
- beforeEach(async () => {
- createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- });
- await waitForPromises();
+ beforeEach(() => {
+ createComponent();
});
it('renders main-heading with correct text', () => {
@@ -226,10 +198,7 @@ describe('App component', () => {
describe('Manage via MR Error Alert', () => {
beforeEach(() => {
- createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- });
+ createComponent();
});
describe('on initial load', () => {
@@ -265,8 +234,6 @@ describe('App component', () => {
describe('given the right props', () => {
beforeEach(() => {
createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
autoDevopsEnabled: false,
gitlabCiPresent: false,
canEnableAutoDevops: true,
@@ -288,10 +255,7 @@ describe('App component', () => {
describe('given the wrong props', () => {
beforeEach(() => {
- createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- });
+ createComponent();
});
it('should not show AutoDevopsAlert', () => {
expect(findAutoDevopsAlert().exists()).toBe(false);
@@ -315,11 +279,7 @@ describe('App component', () => {
);
}
- createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- autoDevopsEnabled,
- });
+ createComponent({ autoDevopsEnabled });
});
it(shouldRender ? 'renders' : 'does not render', () => {
@@ -345,12 +305,7 @@ describe('App component', () => {
);
}
- createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- autoDevopsEnabled: true,
- });
-
+ createComponent({ autoDevopsEnabled: true });
findAutoDevopsEnabledAlert().vm.$emit('dismiss');
});
@@ -375,7 +330,6 @@ describe('App component', () => {
describe('given at least one unavailable feature', () => {
beforeEach(() => {
createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
augmentedComplianceFeatures: complianceFeaturesMock.map(makeAvailable(false)),
});
});
@@ -396,7 +350,6 @@ describe('App component', () => {
describe('given at least one unavailable feature, but banner is already dismissed', () => {
beforeEach(() => {
createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
augmentedComplianceFeatures: complianceFeaturesMock.map(makeAvailable(false)),
shouldShowCallout: false,
});
@@ -423,11 +376,7 @@ describe('App component', () => {
describe('when given latestPipelinePath props', () => {
beforeEach(() => {
- createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- latestPipelinePath: 'test/path',
- });
+ createComponent({ latestPipelinePath: 'test/path' });
});
it('should show latest pipeline info on the security tab with correct link when latestPipelinePath is defined', () => {
@@ -452,8 +401,6 @@ describe('App component', () => {
describe('given gitlabCiPresent & gitlabCiHistoryPath props', () => {
beforeEach(() => {
createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
gitlabCiPresent: true,
gitlabCiHistoryPath,
});
@@ -468,48 +415,36 @@ describe('App component', () => {
});
});
- describe('Vulnerability management', () => {
- beforeEach(async () => {
- createComponent({
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- });
- await waitForPromises();
- });
+ describe('Vulnerability management tab', () => {
+ it('does not show tab if security training is disabled', () => {
+ createComponent({ securityTrainingEnabled: false });
- it('renders TrainingProviderList component', () => {
- expect(findTrainingProviderList().exists()).toBe(true);
+ expect(findVulnerabilityManagementTab().exists()).toBe(false);
});
- it('renders security training description', () => {
- expect(findVulnerabilityManagementTab().text()).toContain(i18n.securityTrainingDescription);
- });
+ describe('security training enabled', () => {
+ beforeEach(() => {
+ createComponent();
+ });
- it('renders link to help docs', () => {
- const trainingLink = findVulnerabilityManagementTab().findComponent(GlLink);
+ it('shows the tab if security training is enabled', () => {
+ expect(findVulnerabilityManagementTab().exists()).toBe(true);
+ });
- expect(trainingLink.text()).toBe('Learn more about vulnerability training');
- expect(trainingLink.attributes('href')).toBe(vulnerabilityTrainingDocsPath);
- });
+ it('renders TrainingProviderList component', () => {
+ expect(findTrainingProviderList().exists()).toBe(true);
+ });
- it.each`
- licenseQueryResponse | display
- ${LICENSE_ULTIMATE} | ${true}
- ${LICENSE_PREMIUM} | ${false}
- ${LICENSE_FREE} | ${false}
- ${null} | ${true}
- ${new Error()} | ${true}
- `(
- 'displays $display for license $licenseQueryResponse',
- async ({ licenseQueryResponse, display }) => {
- createComponent({
- licenseQueryResponse,
- augmentedSecurityFeatures: securityFeaturesMock,
- augmentedComplianceFeatures: complianceFeaturesMock,
- });
- await waitForPromises();
- expect(findVulnerabilityManagementTab().exists()).toBe(display);
- },
- );
+ it('renders security training description', () => {
+ expect(findVulnerabilityManagementTab().text()).toContain(i18n.securityTrainingDescription);
+ });
+
+ it('renders link to help docs', () => {
+ const trainingLink = findVulnerabilityManagementTab().findComponent(GlLink);
+
+ expect(trainingLink.text()).toBe('Learn more about vulnerability training');
+ expect(trainingLink.attributes('href')).toBe(vulnerabilityTrainingDocsPath);
+ });
+ });
});
});
diff --git a/spec/frontend/security_configuration/mock_data.js b/spec/frontend/security_configuration/mock_data.js
index 94a36472a1d..18a480bf082 100644
--- a/spec/frontend/security_configuration/mock_data.js
+++ b/spec/frontend/security_configuration/mock_data.js
@@ -111,12 +111,3 @@ export const tempProviderLogos = {
svg: `<svg>${[testProviderName[1]]}</svg>`,
},
};
-
-export const getCurrentLicensePlanResponse = (plan) => ({
- data: {
- currentLicense: {
- id: 'gid://gitlab/License/1',
- plan,
- },
- },
-});
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 5e4ffeb8455..5cbdba70815 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -8323,6 +8323,14 @@ RSpec.describe Project, factory_default: :keep do
end
end
+ describe '#security_training_available?' do
+ subject { build(:project) }
+
+ it 'returns false' do
+ expect(subject.security_training_available?).to eq false
+ end
+ end
+
private
def finish_job(export_job)
diff --git a/yarn.lock b/yarn.lock
index 3ee30e07ce5..fb589fa1ed0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -968,14 +968,14 @@
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-2.14.0.tgz#92b36bc98ccbed49a4dbca310862146275091cb2"
integrity sha512-U9EYmEIiTMl7R3X5DmCrw6fz7gz8c1kjvQtaF6HfJ15xDtR7trRAyCNbn3z7YGk1QJ8Cv/Ifw2/T5SxXwYd7dw==
-"@gitlab/ui@40.6.0":
- version "40.6.0"
- resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-40.6.0.tgz#67ee263d2ce88cb9ef27235e19b2a0844a321c29"
- integrity sha512-aib9szbLX/UlejMp1ZG3dzZSLmDwK1V6fKxS5bueaaeHRNKPkQ7sFcyIZNG8sF3sHKUxDwA/OEfciIsRW6xzCQ==
+"@gitlab/ui@40.6.2":
+ version "40.6.2"
+ resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-40.6.2.tgz#196529ed0fcf372402d74042fc828b0b469aeaf2"
+ integrity sha512-mOalOdFxjdtCMGUEmzeH1nSN0SCaqIkJQYbtX2x7PI2pyjHAA+8urUeCGC5JlpqDy8a4OmBmZtXTuhvweoOIew==
dependencies:
"@popperjs/core" "^2.11.2"
bootstrap-vue "2.20.1"
- dompurify "^2.3.7"
+ dompurify "^2.3.8"
echarts "^5.2.1"
iframe-resizer "^4.3.2"
lodash "^4.17.20"
@@ -4995,7 +4995,7 @@ dompurify@2.3.6:
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.6.tgz#2e019d7d7617aacac07cbbe3d88ae3ad354cf875"
integrity sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg==
-dompurify@^2.3.7, dompurify@^2.3.8:
+dompurify@^2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.8.tgz#224fe9ae57d7ebd9a1ae1ac18c1c1ca3f532226f"
integrity sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==