From 66be0f2313a9d1a5d91e967cb3f54953e35f0b7c Mon Sep 17 00:00:00 2001
From: Savas Vedova <svedova@gitlab.com>
Date: Mon, 14 Feb 2022 13:24:15 +0300
Subject: [PATCH] Rephrase error messages

Use a specific error message for each field instead of using
a generic one for everyone.
---
 .../components/new_vulnerability/i18n.js          | 10 ++++++++--
 .../new_vulnerability/section_details.vue         |  7 ++++---
 .../new_vulnerability/section_identifiers.vue     |  7 ++++---
 .../components/new_vulnerability/section_name.vue |  4 ++--
 .../new_vulnerability/section_details_spec.js     |  4 ++--
 .../new_vulnerability/section_identifiers_spec.js |  4 ++--
 .../new_vulnerability/section_name_spec.js        |  2 +-
 locale/gitlab.pot                                 | 15 +++++++++++++++
 8 files changed, 38 insertions(+), 15 deletions(-)

diff --git a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/i18n.js b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/i18n.js
index fa52eef7f76a4..5a7844fcdd372 100644
--- a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/i18n.js
+++ b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/i18n.js
@@ -1,3 +1,9 @@
-import { __ } from '~/locale';
+import { s__ } from '~/locale';
 
-export const REQUIRED_FIELD = __('This field is required.');
+export const ERROR_NAME = s__('VulnerabilityManagement|Enter a name');
+export const ERROR_SEVERITY = s__('VulnerabilityManagement|Select a severity level');
+export const ERROR_STATUS = s__('VulnerabilityManagement|Select a status');
+export const ERROR_IDENTIFIER_CODE = s__('VulnerabilityManagement|Enter the CVE or CWE code');
+export const ERROR_IDENTIFIER_URL = s__(
+  'VulnerabilityManagement|Enter the CVE or CWE identifier URL',
+);
diff --git a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue
index d3f306671ab06..f6bb1973ef713 100644
--- a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue
+++ b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue
@@ -108,7 +108,8 @@ export default {
     critical: [9.0, 10.0],
   },
   i18n: {
-    requiredField: i18n.REQUIRED_FIELD,
+    errorSeverity: i18n.ERROR_SEVERITY,
+    errorStatus: i18n.ERROR_STATUS,
     title: s__('Vulnerability|Details'),
     description: s__(
       'Vulnerability|Information related how the vulnerability was discovered and its impact to the system.',
@@ -164,7 +165,7 @@ export default {
       <gl-form-group
         :label="$options.i18n.severity.label"
         :state="validationState.severity"
-        :invalid-feedback="$options.i18n.requiredField"
+        :invalid-feedback="$options.i18n.errorSeverity"
         label-for="form-severity"
         class="gl-mr-6 gl-mb-0"
       >
@@ -191,7 +192,7 @@ export default {
     <gl-form-group
       :label="$options.i18n.status.label"
       :state="validationState.status"
-      :invalid-feedback="$options.i18n.requiredField"
+      :invalid-feedback="$options.i18n.errorStatus"
     >
       <p>{{ $options.i18n.status.description }}</p>
       <gl-form-radio-group :checked="statusId" @change="emitChanges">
diff --git a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_identifiers.vue b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_identifiers.vue
index 7cc4f2c19fa07..21871c57fba24 100644
--- a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_identifiers.vue
+++ b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_identifiers.vue
@@ -54,7 +54,8 @@ export default {
     },
   },
   i18n: {
-    requiredField: i18n.REQUIRED_FIELD,
+    errorIdentifierCode: i18n.ERROR_IDENTIFIER_CODE,
+    errorIdentifierUrl: i18n.ERROR_IDENTIFIER_URL,
     title: s__('Vulnerability|Identifiers'),
     description: s__(
       'Vulnerability|Enter the associated CVE or CWE entries for this vulnerability.',
@@ -87,7 +88,7 @@ export default {
         :label="$options.i18n.identifierCode"
         :label-for="`form-identifier-code-${index}`"
         :state="validationStateIdentifierCode(index)"
-        :invalid-feedback="$options.i18n.requiredField"
+        :invalid-feedback="$options.i18n.errorIdentifierCode"
         class="gl-mr-6 gl-mb-0"
       >
         <gl-form-input
@@ -101,7 +102,7 @@ export default {
       <gl-form-group
         :label="$options.i18n.identifierUrl"
         :state="validationStateIdentifierUrl(index)"
-        :invalid-feedback="$options.i18n.requiredField"
+        :invalid-feedback="$options.i18n.errorIdentifierUrl"
         :label-for="`form-identifier-url-${index}`"
         class="gl-flex-grow-1 gl-mb-0"
       >
diff --git a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_name.vue b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_name.vue
index d5c04410328f4..9a7d0d71bd0c5 100644
--- a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_name.vue
+++ b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_name.vue
@@ -35,7 +35,7 @@ export default {
     },
   },
   i18n: {
-    requiredField: i18n.REQUIRED_FIELD,
+    errorName: i18n.ERROR_NAME,
     vulnerabilityName: {
       label: __('Name'),
       description: s__(
@@ -57,7 +57,7 @@ export default {
       :label="$options.i18n.vulnerabilityName.label"
       :description="$options.i18n.vulnerabilityName.description"
       :state="validationState.name"
-      :invalid-feedback="$options.i18n.requiredField"
+      :invalid-feedback="$options.i18n.errorName"
       label-for="form-vulnerability-name"
       class="gl-mb-6"
     >
diff --git a/ee/spec/frontend/vulnerabilities/new_vulnerability/section_details_spec.js b/ee/spec/frontend/vulnerabilities/new_vulnerability/section_details_spec.js
index 5b1705705fa0c..a3587ef3ea357 100644
--- a/ee/spec/frontend/vulnerabilities/new_vulnerability/section_details_spec.js
+++ b/ee/spec/frontend/vulnerabilities/new_vulnerability/section_details_spec.js
@@ -97,11 +97,11 @@ describe('New vulnerability - Section Details', () => {
     await nextTick();
 
     // severity input
-    expect(wrapper.findAllByRole('alert').at(0).text()).toBe('This field is required.');
+    expect(wrapper.findAllByRole('alert').at(0).text()).toBe('Select a severity level');
     expect(findFormGroup(1).attributes('aria-invalid')).toBe('true');
 
     // status input
-    expect(wrapper.findAllByRole('alert').at(1).text()).toBe('This field is required.');
+    expect(wrapper.findAllByRole('alert').at(1).text()).toBe('Select a status');
     expect(findFormGroup(2).attributes('aria-invalid')).toBe('true');
   });
 });
diff --git a/ee/spec/frontend/vulnerabilities/new_vulnerability/section_identifiers_spec.js b/ee/spec/frontend/vulnerabilities/new_vulnerability/section_identifiers_spec.js
index a7758233b750d..8f23e109742b0 100644
--- a/ee/spec/frontend/vulnerabilities/new_vulnerability/section_identifiers_spec.js
+++ b/ee/spec/frontend/vulnerabilities/new_vulnerability/section_identifiers_spec.js
@@ -50,10 +50,10 @@ describe('New vulnerability - Section Identifiers', () => {
     await nextTick();
 
     expect(findFormGroup(0).attributes('aria-invalid')).toBe('true');
-    expect(wrapper.findAllByRole('alert').at(0).text()).toBe('This field is required.');
+    expect(wrapper.findAllByRole('alert').at(0).text()).toBe('Enter the CVE or CWE code');
 
     expect(findFormGroup(1).attributes('aria-invalid')).toBe('true');
-    expect(wrapper.findAllByRole('alert').at(1).text()).toBe('This field is required.');
+    expect(wrapper.findAllByRole('alert').at(1).text()).toBe('Enter the CVE or CWE identifier URL');
   });
 
   it('emits change event when input changes', () => {
diff --git a/ee/spec/frontend/vulnerabilities/new_vulnerability/section_name_spec.js b/ee/spec/frontend/vulnerabilities/new_vulnerability/section_name_spec.js
index 7ba5cd1a9b45a..54c32c967848c 100644
--- a/ee/spec/frontend/vulnerabilities/new_vulnerability/section_name_spec.js
+++ b/ee/spec/frontend/vulnerabilities/new_vulnerability/section_name_spec.js
@@ -79,7 +79,7 @@ describe('New vulnerability - Section Name', () => {
 
     await nextTick();
 
-    expect(wrapper.findByRole('alert').text()).toBe('This field is required.');
+    expect(wrapper.findByRole('alert').text()).toBe('Enter a name');
     expect(findFormGroup(0).attributes('aria-invalid')).toBe('true');
   });
 });
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 76ce6fc67c975..e50594d701ca9 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -40239,6 +40239,15 @@ msgstr ""
 msgid "VulnerabilityManagement|Create Jira issue"
 msgstr ""
 
+msgid "VulnerabilityManagement|Enter a name"
+msgstr ""
+
+msgid "VulnerabilityManagement|Enter the CVE or CWE code"
+msgstr ""
+
+msgid "VulnerabilityManagement|Enter the CVE or CWE identifier URL"
+msgstr ""
+
 msgid "VulnerabilityManagement|Fetching linked Jira issues"
 msgstr ""
 
@@ -40263,6 +40272,12 @@ msgstr ""
 msgid "VulnerabilityManagement|Select a method"
 msgstr ""
 
+msgid "VulnerabilityManagement|Select a severity level"
+msgstr ""
+
+msgid "VulnerabilityManagement|Select a status"
+msgstr ""
+
 msgid "VulnerabilityManagement|Severity is a required field"
 msgstr ""
 
-- 
GitLab