Skip to content
Snippets Groups Projects
Commit ee5fddcf authored by Rajendra Kadam's avatar Rajendra Kadam :two: Committed by Peter Leitzen
Browse files

Disable Service Desk activation if issue tracker is disabled

Changelog: changed
parent e765b72a
No related branches found
No related tags found
1 merge request!121393Disable Service Desk activation if issue tracker is disabled
......@@ -23,6 +23,9 @@ export default {
initialIsEnabled: {
default: false,
},
isIssueTrackerEnabled: {
default: false,
},
endpoint: {
default: '',
},
......@@ -163,6 +166,7 @@ export default {
</gl-alert>
<service-desk-setting
:is-enabled="isEnabled"
:is-issue-tracker-enabled="isIssueTrackerEnabled"
:incoming-email="incomingEmail"
:custom-email="updatedCustomEmail"
:custom-email-enabled="customEmailEnabled"
......
......@@ -8,6 +8,7 @@ import {
GlFormGroup,
GlFormInput,
GlLink,
GlAlert,
} from '@gitlab/ui';
import { helpPagePath } from '~/helpers/help_page_helper';
import { __ } from '~/locale';
......@@ -17,6 +18,9 @@ import ServiceDeskTemplateDropdown from './service_desk_template_dropdown.vue';
export default {
i18n: {
toggleLabel: __('Activate Service Desk'),
issueTrackerEnableMessage: __(
'To use Service Desk in this project, you must %{linkStart}activate the issue tracker%{linkEnd}.',
),
},
components: {
ClipboardButton,
......@@ -28,6 +32,7 @@ export default {
GlFormGroup,
GlFormInputGroup,
GlLink,
GlAlert,
ServiceDeskTemplateDropdown,
},
props: {
......@@ -35,6 +40,10 @@ export default {
type: Boolean,
required: true,
},
isIssueTrackerEnabled: {
type: Boolean,
required: true,
},
incomingEmail: {
type: String,
required: false,
......@@ -110,6 +119,11 @@ export default {
anchor: 'use-a-custom-email-address',
});
},
issuesHelpPagePath() {
return helpPagePath('user/project/settings/index.md', {
anchor: 'configure-project-visibility-features-and-permissions',
});
},
},
methods: {
onCheckboxToggle(isChecked) {
......@@ -141,9 +155,24 @@ export default {
<template>
<div>
<gl-alert v-if="!isIssueTrackerEnabled" class="mb-3" variant="info" :dismissible="false">
<gl-sprintf :message="$options.i18n.issueTrackerEnableMessage">
<template #link="{ content }">
<gl-link
class="gl-display-inline-block"
data-testid="issue-help-page"
:href="issuesHelpPagePath"
target="_blank"
>
{{ content }}
</gl-link>
</template>
</gl-sprintf>
</gl-alert>
<gl-toggle
id="service-desk-checkbox"
:value="isEnabled"
:disabled="!isIssueTrackerEnabled"
class="d-inline-block align-middle mr-1"
:label="$options.i18n.toggleLabel"
label-position="hidden"
......@@ -194,6 +223,7 @@ export default {
:label="__('Email address suffix')"
:state="!projectKeyError"
data-testid="suffix-form-group"
:disabled="!isIssueTrackerEnabled"
>
<gl-form-input
v-if="hasProjectKeySupport"
......@@ -249,6 +279,7 @@ export default {
:label="__('Template to append to all Service Desk issues')"
:state="!projectKeyError"
class="mt-3"
:disabled="!isIssueTrackerEnabled"
>
<service-desk-template-dropdown
:selected-template="selectedTemplate"
......@@ -268,6 +299,7 @@ export default {
id="service-desk-email-from-name"
v-model.trim="outgoingName"
data-testid="email-from-name"
:disabled="!isIssueTrackerEnabled"
/>
<template #description>
......@@ -280,7 +312,7 @@ export default {
class="gl-mt-5"
data-testid="save_service_desk_settings_button"
data-qa-selector="save_service_desk_settings_button"
:disabled="isTemplateSaving"
:disabled="isTemplateSaving || !isIssueTrackerEnabled"
@click="onSaveTemplate"
>
{{ __('Save changes') }}
......
......@@ -13,6 +13,7 @@ export default () => {
customEmail,
customEmailEnabled,
enabled,
issueTrackerEnabled,
endpoint,
incomingEmail,
outgoingName,
......@@ -31,6 +32,7 @@ export default () => {
endpoint,
initialIncomingEmail: incomingEmail,
initialIsEnabled: parseBoolean(enabled),
isIssueTrackerEnabled: parseBoolean(issueTrackerEnabled),
outgoingName,
projectKey,
selectedTemplate,
......
......@@ -10,6 +10,7 @@
- if ::Gitlab::ServiceDesk.supported?
.js-service-desk-setting-root{ data: { endpoint: project_service_desk_path(@project),
enabled: "#{@project.service_desk_enabled}",
issue_tracker_enabled: "#{@project.project_feature.issues_enabled?}",
incoming_email: (@project.service_desk_incoming_address if @project.service_desk_enabled),
custom_email: (@project.service_desk_custom_address if @project.service_desk_enabled),
custom_email_enabled: "#{Gitlab::Email::ServiceDeskEmail.enabled?}",
......
......@@ -47180,6 +47180,9 @@ msgstr ""
msgid "To update Snippets with multiple files, you must use the `files` parameter"
msgstr ""
 
msgid "To use Service Desk in this project, you must %{linkStart}activate the issue tracker%{linkEnd}."
msgstr ""
msgid "To use the additional formats, you must start the required %{container_link_start}companion containers%{container_link_end}."
msgstr ""
 
......@@ -18,6 +18,7 @@ describe('ServiceDeskRoot', () => {
endpoint: '/gitlab-org/gitlab-test/service_desk',
initialIncomingEmail: 'servicedeskaddress@example.com',
initialIsEnabled: true,
isIssueTrackerEnabled: true,
outgoingName: 'GitLab Support Bot',
projectKey: 'key',
selectedTemplate: 'Bug',
......@@ -59,6 +60,7 @@ describe('ServiceDeskRoot', () => {
initialSelectedTemplate: provideData.selectedTemplate,
initialSelectedFileTemplateProjectId: provideData.selectedFileTemplateProjectId,
isEnabled: provideData.initialIsEnabled,
isIssueTrackerEnabled: provideData.isIssueTrackerEnabled,
isTemplateSaving: false,
templates: provideData.templates,
});
......
import { GlButton, GlDropdown, GlLoadingIcon, GlToggle } from '@gitlab/ui';
import { GlButton, GlDropdown, GlLoadingIcon, GlToggle, GlAlert } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
import { nextTick } from 'vue';
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
import { helpPagePath } from '~/helpers/help_page_helper';
import ServiceDeskSetting from '~/projects/settings_service_desk/components/service_desk_setting.vue';
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
......@@ -16,17 +17,44 @@ describe('ServiceDeskSetting', () => {
const findTemplateDropdown = () => wrapper.findComponent(GlDropdown);
const findToggle = () => wrapper.findComponent(GlToggle);
const findSuffixFormGroup = () => wrapper.findByTestId('suffix-form-group');
const findIssueTrackerInfo = () => wrapper.findComponent(GlAlert);
const findIssueHelpLink = () => wrapper.findByTestId('issue-help-page');
const createComponent = ({ props = {} } = {}) =>
extendedWrapper(
mount(ServiceDeskSetting, {
propsData: {
isEnabled: true,
isIssueTrackerEnabled: true,
...props,
},
}),
);
describe('with issue tracker', () => {
it('does not show the info notice when enabled', () => {
wrapper = createComponent();
expect(findIssueTrackerInfo().exists()).toBe(false);
});
it('shows info notice when disabled with help page link', () => {
wrapper = createComponent({
props: {
isIssueTrackerEnabled: false,
},
});
expect(findIssueTrackerInfo().exists()).toBe(true);
expect(findIssueHelpLink().text()).toEqual('activate the issue tracker');
expect(findIssueHelpLink().attributes('href')).toBe(
helpPagePath('user/project/settings/index.md', {
anchor: 'configure-project-visibility-features-and-permissions',
}),
);
});
});
describe('when isEnabled=true', () => {
describe('only isEnabled', () => {
describe('as project admin', () => {
......
......@@ -14,6 +14,7 @@ describe('ServiceDeskTemplateDropdown', () => {
mount(ServiceDeskTemplateDropdown, {
propsData: {
isEnabled: true,
isIssueTrackerEnabled: true,
...props,
},
}),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment