diff --git a/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js b/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js index 5ef64aa7c005b29d1d0cde9ad0eda6af0602375c..6bf25edc3d30cffb8579097b0a22f4a6062ff196 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js +++ b/app/assets/javascripts/vue_merge_request_widget/components/checks/constants.js @@ -6,6 +6,7 @@ export const COMPONENTS = { draft_status: () => import('./draft.vue'), merge_time: () => import('./merge_time.vue'), need_rebase: () => import('./rebase.vue'), + title_regex: () => import('./title_regex.vue'), default: () => import('./message.vue'), requested_changes: () => import('ee_component/vue_merge_request_widget/components/checks/requested_changes.vue'), @@ -39,7 +40,7 @@ export const FAILURE_REASONS = { locked_lfs_files: __('All LFS files must be unlocked.'), security_policy_violations: __('All policy rules must be satisfied.'), merge_time: __('Cannot merge until this date and time.'), - title_regex: __('The title must match the required regex.'), + title_regex: __('Merge request title must match expected format.'), }; export const ICON_NAMES = Object.freeze({ diff --git a/app/assets/javascripts/vue_merge_request_widget/components/checks/title_regex.vue b/app/assets/javascripts/vue_merge_request_widget/components/checks/title_regex.vue new file mode 100644 index 0000000000000000000000000000000000000000..70f3e2397b50fc65c75cac087f200cb8cd66dd73 --- /dev/null +++ b/app/assets/javascripts/vue_merge_request_widget/components/checks/title_regex.vue @@ -0,0 +1,45 @@ + + + diff --git a/locale/gitlab.pot b/locale/gitlab.pot index e2ea2447d0023a1b068f1983788d98d0a168fda2..00a377d2d373ed6ec34eed2468863ad8bbf65656 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -38373,6 +38373,9 @@ msgstr "" msgid "Merge request status" msgstr "" +msgid "Merge request title must match expected format." +msgstr "" + msgid "Merge request was set to auto-merge" msgstr "" @@ -62185,9 +62188,6 @@ msgstr "" msgid "The time period in seconds that the maximum requests per project limit applies to." msgstr "" -msgid "The title must match the required regex." -msgstr "" - msgid "The update action will time out after %{number_of_minutes} minutes. For big repositories, use a clone/push combination." msgstr "" @@ -73729,6 +73729,9 @@ msgstr "" msgid "mrWidget|Did not close" msgstr "" +msgid "mrWidget|Edit merge request" +msgstr "" + msgid "mrWidget|Failed to load deployment statistics" msgstr "" diff --git a/spec/frontend/vue_merge_request_widget/components/checks/message_spec.js b/spec/frontend/vue_merge_request_widget/components/checks/message_spec.js index 85e241449121bec539050c03deb733729d448bc1..87f2f69422a23d2103790df8cddef6657137e5af 100644 --- a/spec/frontend/vue_merge_request_widget/components/checks/message_spec.js +++ b/spec/frontend/vue_merge_request_widget/components/checks/message_spec.js @@ -29,7 +29,7 @@ describe('Merge request merge checks message component', () => { ${'locked_paths'} | ${'All paths must be unlocked'} ${'locked_lfs_files'} | ${'All LFS files must be unlocked.'} ${'security_policy_violations'} | ${'All policy rules must be satisfied.'} - ${'title_regex'} | ${'The title must match the required regex.'} + ${'title_regex'} | ${'Merge request title must match expected format.'} `('renders failure reason text', ({ identifier, expectedText }) => { factory({ check: { status: 'success', identifier } }); diff --git a/spec/frontend/vue_merge_request_widget/components/checks/title_regex_spec.js b/spec/frontend/vue_merge_request_widget/components/checks/title_regex_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..77def46c4f7b1eb77c7aa02c5aa25fd64e9ebff2 --- /dev/null +++ b/spec/frontend/vue_merge_request_widget/components/checks/title_regex_spec.js @@ -0,0 +1,40 @@ +import { mountExtended } from 'helpers/vue_test_utils_helper'; +import MergeChecksTitleRegex from '~/vue_merge_request_widget/components/checks/title_regex.vue'; +import MergeChecksMessage from '~/vue_merge_request_widget/components/checks/message.vue'; + +describe('MergeChecksTitleRegex component', () => { + let wrapper; + + function createComponent( + propsData = { + check: { + status: 'FAILED', + identifier: 'title_regex', + }, + }, + ) { + wrapper = mountExtended(MergeChecksTitleRegex, { + propsData, + }); + } + + it('passes check down to the MergeChecksMessage', () => { + const check = { + status: 'failed', + identifier: 'title_regex', + }; + createComponent({ check }); + + expect(wrapper.findComponent(MergeChecksMessage).props('check')).toEqual(check); + }); + + it('has a link to the edit page', () => { + const editPath = `${document.location.pathname.replace(/\/$/, '')}/edit`; + + createComponent(); + + const editLink = wrapper.findByTestId('extension-actions-button'); + + expect(editLink.attributes('href')).toBe(editPath); + }); +});