Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
6c6ac293
Commit
6c6ac293
authored
Jul 06, 2020
by
Olena Horal-Koretska
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move incidents setting to Vue
parent
4da75867
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
605 additions
and
42 deletions
+605
-42
app/assets/javascripts/incidents_settings/components/alerts_form.vue
...javascripts/incidents_settings/components/alerts_form.vue
+156
-0
app/assets/javascripts/incidents_settings/components/incidents_settings_tabs.vue
...incidents_settings/components/incidents_settings_tabs.vue
+49
-0
app/assets/javascripts/incidents_settings/constants.js
app/assets/javascripts/incidents_settings/constants.js
+51
-0
app/assets/javascripts/incidents_settings/index.js
app/assets/javascripts/incidents_settings/index.js
+31
-0
app/assets/javascripts/pages/projects/settings/operations/show/index.js
...ascripts/pages/projects/settings/operations/show/index.js
+2
-0
app/views/projects/settings/operations/_incidents.html.haml
app/views/projects/settings/operations/_incidents.html.haml
+6
-30
changelogs/unreleased/119018-move-alert-settings-to-Vue.yml
changelogs/unreleased/119018-move-alert-settings-to-Vue.yml
+5
-0
locale/gitlab.pot
locale/gitlab.pot
+20
-2
qa/qa/page/project/settings/incidents.rb
qa/qa/page/project/settings/incidents.rb
+4
-2
qa/qa/page/project/settings/operations.rb
qa/qa/page/project/settings/operations.rb
+1
-1
qa/qa/specs/features/ee/browser_ui/8_monitor/all_monitor_features_spec.rb
...ures/ee/browser_ui/8_monitor/all_monitor_features_spec.rb
+0
-3
spec/features/projects/settings/operations_settings_spec.rb
spec/features/projects/settings/operations_settings_spec.rb
+1
-4
spec/frontend/incidents_settings/components/__snapshots__/alerts_form_spec.js.snap
...ettings/components/__snapshots__/alerts_form_spec.js.snap
+99
-0
spec/frontend/incidents_settings/components/__snapshots__/incidents_settings_tabs_spec.js.snap
...onents/__snapshots__/incidents_settings_tabs_spec.js.snap
+56
-0
spec/frontend/incidents_settings/components/alerts_form_spec.js
...rontend/incidents_settings/components/alerts_form_spec.js
+71
-0
spec/frontend/incidents_settings/components/incidents_settings_tabs_spec.js
...dents_settings/components/incidents_settings_tabs_spec.js
+53
-0
No files found.
app/assets/javascripts/incidents_settings/components/alerts_form.vue
0 → 100644
View file @
6c6ac293
<
script
>
import
{
GlButton
,
GlSprintf
,
GlLink
,
GlIcon
,
GlFormGroup
,
GlFormCheckbox
,
GlNewDropdown
,
GlNewDropdownItem
,
}
from
'
@gitlab/ui
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
{
refreshCurrentPage
}
from
'
~/lib/utils/url_utility
'
;
import
createFlash
from
'
~/flash
'
;
import
{
I18N_ALERT_SETTINGS_FORM
,
NO_ISSUE_TEMPLATE_SELECTED
,
TAKING_INCIDENT_ACTION_DOCS_LINK
,
ISSUE_TEMPLATES_DOCS_LINK
,
ERROR_MSG
,
}
from
'
../constants
'
;
export
default
{
components
:
{
GlButton
,
GlSprintf
,
GlLink
,
GlFormGroup
,
GlIcon
,
GlFormCheckbox
,
GlNewDropdown
,
GlNewDropdownItem
,
},
inject
:
[
'
alertSettings
'
,
'
operationsSettingsEndpoint
'
],
data
()
{
return
{
templates
:
[
NO_ISSUE_TEMPLATE_SELECTED
,
...
this
.
alertSettings
.
templates
],
createIssueEnabled
:
this
.
alertSettings
.
createIssue
,
issueTemplate
:
this
.
alertSettings
.
issueTemplateKey
,
sendEmailEnabled
:
this
.
alertSettings
.
sendEmail
,
loading
:
false
,
};
},
i18n
:
I18N_ALERT_SETTINGS_FORM
,
TAKING_INCIDENT_ACTION_DOCS_LINK
,
ISSUE_TEMPLATES_DOCS_LINK
,
computed
:
{
issueTemplateHeader
()
{
return
this
.
issueTemplate
||
NO_ISSUE_TEMPLATE_SELECTED
.
name
;
},
formData
()
{
return
{
create_issue
:
this
.
createIssueEnabled
,
issue_template_key
:
this
.
issueTemplate
,
send_email
:
this
.
sendEmailEnabled
,
};
},
},
methods
:
{
selectIssueTemplate
(
templateKey
)
{
this
.
issueTemplate
=
templateKey
;
},
isTemplateSelected
(
templateKey
)
{
return
templateKey
===
this
.
issueTemplate
;
},
updateAlertsIntegrationSettings
()
{
this
.
loading
=
true
;
return
axios
.
patch
(
this
.
operationsSettingsEndpoint
,
{
project
:
{
incident_management_setting_attributes
:
this
.
formData
,
},
})
.
then
(()
=>
{
refreshCurrentPage
();
})
.
catch
(({
response
})
=>
{
const
message
=
response
?.
data
?.
message
||
''
;
createFlash
(
`
${
ERROR_MSG
}
${
message
}
`
,
'
alert
'
);
})
.
finally
(()
=>
{
this
.
loading
=
false
;
});
},
},
};
</
script
>
<
template
>
<div>
<p>
<gl-sprintf
:message=
"$options.i18n.introText"
>
<template
#docsLink
>
<gl-link
:href=
"$options.TAKING_INCIDENT_ACTION_DOCS_LINK"
target=
"_blank"
>
<span>
{{
$options
.
i18n
.
introLinkText
}}
</span>
</gl-link>
</
template
>
</gl-sprintf>
</p>
<form
ref=
"settingsForm"
@
submit.prevent=
"updateAlertsIntegrationSettings"
>
<gl-form-group
class=
"gl-pl-0"
>
<gl-form-checkbox
v-model=
"createIssueEnabled"
data-qa-selector=
"create_issue_checkbox"
>
<span>
{{ $options.i18n.createIssue.label }}
</span>
</gl-form-checkbox>
</gl-form-group>
<gl-form-group
label-size=
"sm"
label-for=
"alert-integration-settings-issue-template"
class=
"col-8 col-md-9 gl-px-6"
>
<label
class=
"gl-display-inline-flex"
for=
"alert-integration-settings-issue-template"
>
{{ $options.i18n.issueTemplate.label }}
<gl-link
:href=
"$options.ISSUE_TEMPLATES_DOCS_LINK"
target=
"_blank"
>
<gl-icon
name=
"question"
:size=
"12"
/>
</gl-link>
</label>
<gl-new-dropdown
id=
"alert-integration-settings-issue-template"
data-qa-selector=
"incident_templates_dropdown"
:text=
"issueTemplateHeader"
:block=
"true"
>
<gl-new-dropdown-item
v-for=
"template in templates"
:key=
"template.key"
data-qa-selector=
"incident_templates_item"
:is-check-item=
"true"
:is-checked=
"isTemplateSelected(template.key)"
@
click=
"selectIssueTemplate(template.key)"
>
{{ template.name }}
</gl-new-dropdown-item>
</gl-new-dropdown>
</gl-form-group>
<gl-form-group
class=
"gl-pl-0 gl-mb-5"
>
<gl-form-checkbox
v-model=
"sendEmailEnabled"
>
<span>
{{ $options.i18n.sendEmail.label }}
</span>
</gl-form-checkbox>
</gl-form-group>
<gl-button
ref=
"submitBtn"
data-qa-selector=
"save_changes_button"
:disabled=
"loading"
variant=
"success"
type=
"submit"
class=
"js-no-auto-disable"
>
{{ $options.i18n.saveBtnLabel }}
</gl-button>
</form>
</div>
</template>
app/assets/javascripts/incidents_settings/components/incidents_settings_tabs.vue
0 → 100644
View file @
6c6ac293
<
script
>
import
{
GlButton
,
GlTabs
,
GlTab
}
from
'
@gitlab/ui
'
;
import
AlertsSettingsForm
from
'
./alerts_form.vue
'
;
import
{
INTEGRATION_TABS_CONFIG
,
I18N_INTEGRATION_TABS
}
from
'
../constants
'
;
export
default
{
components
:
{
GlButton
,
GlTabs
,
GlTab
,
AlertsSettingsForm
,
},
tabs
:
INTEGRATION_TABS_CONFIG
,
i18n
:
I18N_INTEGRATION_TABS
,
};
</
script
>
<
template
>
<section
id=
"incident-management-settings"
data-qa-selector=
"incidents_settings_content"
class=
"settings no-animate qa-incident-management-settings"
>
<div
class=
"settings-header"
>
<h3
ref=
"sectionHeader"
class=
"h4"
>
{{
$options
.
i18n
.
headerText
}}
</h3>
<gl-button
ref=
"toggleBtn"
class=
"js-settings-toggle"
>
{{
$options
.
i18n
.
expandBtnLabel
}}
</gl-button>
<p
ref=
"sectionSubHeader"
>
{{
$options
.
i18n
.
subHeaderText
}}
</p>
</div>
<div
class=
"settings-content"
>
<gl-tabs>
<gl-tab
v-for=
"(tab, index) in $options.tabs"
v-if=
"tab.active"
:key=
"`$
{tab.title}_${index}`"
:title="tab.title"
>
<component
:is=
"tab.component"
class=
"gl-pt-3"
:data-testid=
"`$
{tab.component}-tab`" />
</gl-tab>
</gl-tabs>
</div>
</section>
</
template
>
app/assets/javascripts/incidents_settings/constants.js
0 → 100644
View file @
6c6ac293
import
{
__
,
s__
}
from
'
~/locale
'
;
export
const
INTEGRATION_TABS_CONFIG
=
[
{
title
:
s__
(
'
IncidentSettings|Alert integration
'
),
component
:
'
AlertsSettingsForm
'
,
active
:
true
,
},
{
title
:
s__
(
'
IncidentSettings|PagerDuty integration
'
),
component
:
''
,
active
:
false
,
},
{
title
:
s__
(
'
IncidentSettings|Grafana integration
'
),
component
:
''
,
active
:
false
,
},
];
export
const
I18N_INTEGRATION_TABS
=
{
headerText
:
s__
(
'
IncidentSettings|Incidents
'
),
expandBtnLabel
:
__
(
'
Expand
'
),
saveBtnLabel
:
__
(
'
Save changes
'
),
subHeaderText
:
s__
(
'
IncidentSettings|Set up integrations with external tools to help better manage incidents.
'
,
),
};
export
const
I18N_ALERT_SETTINGS_FORM
=
{
saveBtnLabel
:
__
(
'
Save changes
'
),
introText
:
__
(
'
Action to take when receiving an alert. %{docsLink}
'
),
introLinkText
:
__
(
'
More information.
'
),
createIssue
:
{
label
:
__
(
'
Create an issue. Issues are created for each alert triggered.
'
),
},
issueTemplate
:
{
label
:
__
(
'
Issue template (optional)
'
),
},
sendEmail
:
{
label
:
__
(
'
Send a separate email notification to Developers.
'
),
},
};
export
const
NO_ISSUE_TEMPLATE_SELECTED
=
{
key
:
''
,
name
:
__
(
'
No template selected
'
)
};
export
const
TAKING_INCIDENT_ACTION_DOCS_LINK
=
'
/help/user/project/integrations/prometheus#taking-action-on-incidents-ultimate
'
;
export
const
ISSUE_TEMPLATES_DOCS_LINK
=
'
/help/user/project/description_templates#creating-issue-templates
'
;
export
const
ERROR_MSG
=
__
(
'
There was an error saving your changes.
'
);
app/assets/javascripts/incidents_settings/index.js
0 → 100644
View file @
6c6ac293
import
Vue
from
'
vue
'
;
import
{
parseBoolean
}
from
'
~/lib/utils/common_utils
'
;
import
SettingsTabs
from
'
./components/incidents_settings_tabs.vue
'
;
export
default
()
=>
{
const
el
=
document
.
querySelector
(
'
.js-incidents-settings
'
);
if
(
!
el
)
{
return
null
;
}
const
{
dataset
:
{
operationsSettingsEndpoint
,
templates
,
createIssue
,
issueTemplateKey
,
sendEmail
},
}
=
el
;
return
new
Vue
({
el
,
provide
:
{
operationsSettingsEndpoint
,
alertSettings
:
{
templates
:
JSON
.
parse
(
templates
),
createIssue
:
parseBoolean
(
createIssue
),
issueTemplateKey
,
sendEmail
:
parseBoolean
(
sendEmail
),
},
},
render
(
createElement
)
{
return
createElement
(
SettingsTabs
);
},
});
};
app/assets/javascripts/pages/projects/settings/operations/show/index.js
View file @
6c6ac293
...
...
@@ -3,8 +3,10 @@ import mountAlertsSettings from '~/alerts_settings';
import
mountOperationSettings
from
'
~/operation_settings
'
;
import
mountGrafanaIntegration
from
'
~/grafana_integration
'
;
import
initSettingsPanels
from
'
~/settings_panels
'
;
import
initIncidentsSettings
from
'
~/incidents_settings
'
;
document
.
addEventListener
(
'
DOMContentLoaded
'
,
()
=>
{
initIncidentsSettings
();
mountErrorTrackingForm
();
mountOperationSettings
();
mountGrafanaIntegration
();
...
...
app/views/projects/settings/operations/_incidents.html.haml
View file @
6c6ac293
-
templates
=
[]
-
setting
=
project_incident_management_setting
-
templates
=
setting
.
available_issue_templates
.
map
{
|
t
|
[
t
.
name
,
t
.
key
]
}
-
templates
=
setting
.
available_issue_templates
.
map
{
|
t
|
{
key:
t
.
key
,
name:
t
.
name
}
}
%section
.settings.no-animate.qa-incident-management-settings
{
data:
{
qa_selector:
'incidents_settings_content'
}
}
.settings-header
%h3
{
:class
=>
"h4"
}=
_
(
'Incidents'
)
%button
.btn.js-settings-toggle
{
type:
'button'
}
=
_
(
'Expand'
)
%p
=
_
(
'Action to take when receiving an alert.'
)
=
link_to
help_page_path
(
'user/project/integrations/prometheus'
,
anchor:
'taking-action-on-incidents-ultimate'
)
do
=
_
(
'More information'
)
.settings-content
=
form_for
@project
,
url:
project_settings_operations_path
(
@project
),
method: :patch
do
|
f
|
=
form_errors
(
@project
.
incident_management_setting
)
.form-group
=
f
.
fields_for
:incident_management_setting_attributes
,
setting
do
|
form
|
.form-group
=
form
.
check_box
:create_issue
,
data:
{
qa_selector:
'create_issue_checkbox'
}
=
form
.
label
:create_issue
,
_
(
'Create an issue. Issues are created for each alert triggered.'
),
class:
'form-check-label'
.form-group.col-sm-8
=
form
.
label
:issue_template_key
,
class:
'label-bold'
do
=
_
(
'Issue template (optional)'
)
=
link_to
icon
(
'question-circle'
),
help_page_path
(
'user/project/description_templates'
,
anchor:
'creating-issue-templates'
),
target:
'_blank'
,
rel:
'noopener noreferrer'
.select-wrapper
=
form
.
select
:issue_template_key
,
templates
,
{
include_blank:
'No template selected'
},
class:
"form-control select-control"
,
data:
{
qa_selector:
'incident_templates_dropdown'
}
=
icon
(
'chevron-down'
)
.form-group
=
form
.
check_box
:send_email
=
form
.
label
:send_email
,
_
(
'Send a separate email notification to Developers.'
),
class:
'form-check-label'
=
f
.
submit
_
(
'Save changes'
),
class:
'btn btn-success'
,
data:
{
qa_selector:
'save_changes_button'
}
.js-incidents-settings
{
data:
{
operations_settings_endpoint:
project_settings_operations_path
(
@project
),
templates:
templates
.
to_json
,
create_issue:
setting
.
create_issue
.
to_s
,
issue_template_key:
setting
.
issue_template_key
.
to_s
,
send_email:
setting
.
send_email
.
to_s
}
}
changelogs/unreleased/119018-move-alert-settings-to-Vue.yml
0 → 100644
View file @
6c6ac293
---
title
:
Move alert integrations setting to Vue
merge_request
:
36110
author
:
type
:
changed
locale/gitlab.pot
View file @
6c6ac293
...
...
@@ -1289,7 +1289,7 @@ msgstr ""
msgid "Account: %{account}"
msgstr ""
msgid "Action to take when receiving an alert."
msgid "Action to take when receiving an alert.
%{docsLink}
"
msgstr ""
msgid "Actions"
...
...
@@ -12380,7 +12380,19 @@ msgstr ""
msgid "Incident Management Limits"
msgstr ""
msgid "Incidents"
msgid "IncidentSettings|Alert integration"
msgstr ""
msgid "IncidentSettings|Grafana integration"
msgstr ""
msgid "IncidentSettings|Incidents"
msgstr ""
msgid "IncidentSettings|PagerDuty integration"
msgstr ""
msgid "IncidentSettings|Set up integrations with external tools to help better manage incidents."
msgstr ""
msgid "Include a Terms of Service agreement and Privacy Policy that all users must accept."
...
...
@@ -15038,6 +15050,9 @@ msgstr ""
msgid "More information is available|here"
msgstr ""
msgid "More information."
msgstr ""
msgid "More than %{number_commits_distance} commits different with %{default_branch}"
msgstr ""
...
...
@@ -15607,6 +15622,9 @@ msgstr ""
msgid "No template"
msgstr ""
msgid "No template selected"
msgstr ""
msgid "No test coverage"
msgstr ""
...
...
qa/qa/page/project/settings/incidents.rb
View file @
6c6ac293
...
...
@@ -5,10 +5,11 @@ module QA
module
Project
module
Settings
class
Incidents
<
Page
::
Base
view
'app/
views/projects/settings/operations/_incidents.html.haml
'
do
view
'app/
assets/javascripts/incidents_settings/components/alerts_form.vue
'
do
element
:create_issue_checkbox
element
:incident_templates_dropdown
element
:save_changes_button
element
:incident_templates_item
end
def
enable_issues_for_incidents
...
...
@@ -16,8 +17,9 @@ module QA
end
def
select_issue_template
(
template
)
click_element
(
:incident_templates_dropdown
)
within_element
:incident_templates_dropdown
do
find
(
:option
,
template
).
select_option
find
_element
(
:incident_templates_item
,
text:
template
).
click
end
end
...
...
qa/qa/page/project/settings/operations.rb
View file @
6c6ac293
...
...
@@ -7,7 +7,7 @@ module QA
class
Operations
<
Page
::
Base
include
QA
::
Page
::
Settings
::
Common
view
'app/
views/projects/settings/operations/_incidents.html.haml
'
do
view
'app/
assets/javascripts/incidents_settings/components/incidents_settings_tabs.vue
'
do
element
:incidents_settings_content
end
...
...
qa/qa/specs/features/ee/browser_ui/8_monitor/all_monitor_features_spec.rb
View file @
6c6ac293
...
...
@@ -46,9 +46,6 @@ module QA
incident_settings
.
select_issue_template
(
'incident'
)
incident_settings
.
save_incident_settings
end
settings
.
expand_incidents
do
|
incident_settings
|
expect
(
incident_settings
).
to
have_template
(
'incident'
)
end
end
end
...
...
spec/features/projects/settings/operations_settings_spec.rb
View file @
6c6ac293
...
...
@@ -45,15 +45,12 @@ RSpec.describe 'Projects > Settings > For a forked project', :js do
it
'updates form values'
do
check
(
create_issue
)
template_select
=
find_field
(
'Issue template'
)
template_select
.
find
(
:xpath
,
'option[2]'
).
select_option
uncheck
(
send_email
)
save_form
click_expand_incident_management_button
expect
(
find_field
(
create_issue
)).
to
be_checked
expect
(
page
).
to
have_select
(
'Issue template'
,
selected:
'bug'
)
expect
(
find_field
(
send_email
)).
not_to
be_checked
end
...
...
@@ -64,7 +61,7 @@ RSpec.describe 'Projects > Settings > For a forked project', :js do
end
def
save_form
page
.
within
"
#edit_project_
#{
project
.
id
}
"
do
page
.
within
"
.qa-incident-management-settings
"
do
click_on
'Save changes'
end
end
...
...
spec/frontend/incidents_settings/components/__snapshots__/alerts_form_spec.js.snap
0 → 100644
View file @
6c6ac293
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Alert integration settings form default state should match the default snapshot 1`] = `
<div>
<p>
<gl-sprintf-stub
message="Action to take when receiving an alert. %{docsLink}"
/>
</p>
<form>
<gl-form-group-stub
class="gl-pl-0"
>
<gl-form-checkbox-stub
checked="true"
data-qa-selector="create_issue_checkbox"
>
<span>
Create an issue. Issues are created for each alert triggered.
</span>
</gl-form-checkbox-stub>
</gl-form-group-stub>
<gl-form-group-stub
class="col-8 col-md-9 gl-px-6"
label-for="alert-integration-settings-issue-template"
label-size="sm"
>
<label
class="gl-display-inline-flex"
for="alert-integration-settings-issue-template"
>
Issue template (optional)
<gl-link-stub
href="/help/user/project/description_templates#creating-issue-templates"
target="_blank"
>
<gl-icon-stub
name="question"
size="12"
/>
</gl-link-stub>
</label>
<gl-new-dropdown-stub
block="true"
category="tertiary"
data-qa-selector="incident_templates_dropdown"
headertext=""
id="alert-integration-settings-issue-template"
size="medium"
text="selecte_tmpl"
variant="default"
>
<gl-new-dropdown-item-stub
avatarurl=""
data-qa-selector="incident_templates_item"
iconcolor=""
iconname=""
iconrightname=""
ischeckitem="true"
secondarytext=""
>
No template selected
</gl-new-dropdown-item-stub>
</gl-new-dropdown-stub>
</gl-form-group-stub>
<gl-form-group-stub
class="gl-pl-0 gl-mb-5"
>
<gl-form-checkbox-stub>
<span>
Send a separate email notification to Developers.
</span>
</gl-form-checkbox-stub>
</gl-form-group-stub>
<gl-button-stub
category="tertiary"
class="js-no-auto-disable"
data-qa-selector="save_changes_button"
icon=""
size="medium"
type="submit"
variant="success"
>
Save changes
</gl-button-stub>
</form>
</div>
`;
spec/frontend/incidents_settings/components/__snapshots__/incidents_settings_tabs_spec.js.snap
0 → 100644
View file @
6c6ac293
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`IncidentsSettingTabs should render the component 1`] = `
<section
class="settings no-animate qa-incident-management-settings"
data-qa-selector="incidents_settings_content"
id="incident-management-settings"
>
<div
class="settings-header"
>
<h3
class="h4"
>
Incidents
</h3>
<gl-button-stub
category="tertiary"
class="js-settings-toggle"
icon=""
size="medium"
variant="default"
>
Expand
</gl-button-stub>
<p>
Set up integrations with external tools to help better manage incidents.
</p>
</div>
<div
class="settings-content"
>
<gl-tabs-stub
theme="indigo"
>
<gl-tab-stub
title="Alert integration"
>
<alertssettingsform-stub
class="gl-pt-3"
data-testid="AlertsSettingsForm-tab"
/>
</gl-tab-stub>
<!---->
<!---->
</gl-tabs-stub>
</div>
</section>
`;
spec/frontend/incidents_settings/components/alerts_form_spec.js
0 → 100644
View file @
6c6ac293
import
{
shallowMount
}
from
'
@vue/test-utils
'
;
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
AlertsSettingsForm
from
'
~/incidents_settings/components/alerts_form.vue
'
;
import
{
ERROR_MSG
}
from
'
~/incidents_settings/constants
'
;
import
createFlash
from
'
~/flash
'
;
import
{
refreshCurrentPage
}
from
'
~/lib/utils/url_utility
'
;
import
waitForPromises
from
'
helpers/wait_for_promises
'
;
jest
.
mock
(
'
~/flash
'
);
jest
.
mock
(
'
~/lib/utils/url_utility
'
);
describe
(
'
Alert integration settings form
'
,
()
=>
{
let
wrapper
;
const
findForm
=
()
=>
wrapper
.
find
({
ref
:
'
settingsForm
'
});
beforeEach
(()
=>
{
wrapper
=
shallowMount
(
AlertsSettingsForm
,
{
provide
:
{
operationsSettingsEndpoint
:
'
operations/endpoint
'
,
alertSettings
:
{
issueTemplateKey
:
'
selecte_tmpl
'
,
createIssue
:
true
,
sendEmail
:
false
,
templates
:
[],
},
},
});
});
afterEach
(()
=>
{
if
(
wrapper
)
{
wrapper
.
destroy
();
}
});
describe
(
'
default state
'
,
()
=>
{
it
(
'
should match the default snapshot
'
,
()
=>
{
expect
(
wrapper
.
element
).
toMatchSnapshot
();
});
});
describe
(
'
form
'
,
()
=>
{
let
mock
;
beforeEach
(()
=>
{
mock
=
new
MockAdapter
(
axios
);
});
afterEach
(()
=>
{
mock
.
restore
();
});
it
(
'
should refresh the page on successful submit
'
,
()
=>
{
mock
.
onPatch
().
reply
(
200
);
findForm
().
trigger
(
'
submit
'
);
return
waitForPromises
().
then
(()
=>
{
expect
(
refreshCurrentPage
).
toHaveBeenCalled
();
});
});
it
(
'
should display a flah message on unsuccessful submit
'
,
()
=>
{
mock
.
onPatch
().
reply
(
400
);
findForm
().
trigger
(
'
submit
'
);
return
waitForPromises
().
then
(()
=>
{
expect
(
createFlash
).
toHaveBeenCalledWith
(
expect
.
stringContaining
(
ERROR_MSG
),
'
alert
'
);
});
});
});
});
spec/frontend/incidents_settings/components/incidents_settings_tabs_spec.js
0 → 100644
View file @
6c6ac293
import
{
shallowMount
}
from
'
@vue/test-utils
'
;
import
{
GlTab
}
from
'
@gitlab/ui
'
;
import
IncidentsSettingTabs
from
'
~/incidents_settings/components/incidents_settings_tabs.vue
'
;
describe
(
'
IncidentsSettingTabs
'
,
()
=>
{
let
wrapper
;
beforeEach
(()
=>
{
wrapper
=
shallowMount
(
IncidentsSettingTabs
);
});
afterEach
(()
=>
{
if
(
wrapper
)
{
wrapper
.
destroy
();
}
});
const
findToggleButton
=
()
=>
wrapper
.
find
({
ref
:
'
toggleBtn
'
});
const
findSectionHeader
=
()
=>
wrapper
.
find
({
ref
:
'
sectionHeader
'
});
const
findIntegrationTabs
=
()
=>
wrapper
.
findAll
(
GlTab
);
it
(
'
renders header text
'
,
()
=>
{
expect
(
findSectionHeader
().
text
()).
toBe
(
'
Incidents
'
);
});
describe
(
'
expand/collapse button
'
,
()
=>
{
it
(
'
renders as an expand button by default
'
,
()
=>
{
expect
(
findToggleButton
().
text
()).
toBe
(
'
Expand
'
);
});
});
it
(
'
should render the component
'
,
()
=>
{
expect
(
wrapper
.
element
).
toMatchSnapshot
();
});
it
(
'
should render the tab for each active integration
'
,
()
=>
{
const
activeTabs
=
wrapper
.
vm
.
$options
.
tabs
.
filter
(
tab
=>
tab
.
active
);
expect
(
findIntegrationTabs
().
length
).
toBe
(
activeTabs
.
length
);
activeTabs
.
forEach
((
tab
,
index
)
=>
{
expect
(
findIntegrationTabs
()
.
at
(
index
)
.
attributes
(
'
title
'
),
).
toBe
(
tab
.
title
);
expect
(
findIntegrationTabs
()
.
at
(
index
)
.
find
(
`[data-testid="
${
tab
.
component
}
-tab"]`
)
.
exists
(),
).
toBe
(
true
);
});
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment