Commit d9e821db authored by GitLab Bot's avatar GitLab Bot

Add latest changes from gitlab-org/gitlab@master

parent efb0c7f5
......@@ -47,6 +47,11 @@ export default {
thClass: 'w-15p',
tdClass: 'table-col d-flex align-items-center d-sm-table-cell',
},
{
key: 'ignore',
label: '',
tdClass: 'table-col d-flex align-items-center d-sm-table-cell',
},
{
key: 'details',
tdClass: 'table-col d-sm-none d-flex align-items-center',
......@@ -97,6 +102,14 @@ export default {
type: Boolean,
required: true,
},
projectPath: {
type: String,
required: true,
},
listPath: {
type: String,
required: true,
},
},
hasLocalStorage: AccessorUtils.isLocalStorageAccessSafe(),
data() {
......@@ -144,6 +157,7 @@ export default {
'loadRecentSearches',
'setIndexPath',
'fetchPaginatedResults',
'updateStatus',
]),
setSearchText(text) {
this.errorSearchQuery = text;
......@@ -166,6 +180,16 @@ export default {
isCurrentSortField(field) {
return field === this.sortField;
},
getIssueUpdatePath(errorId) {
return `/${this.projectPath}/-/error_tracking/${errorId}.json`;
},
updateIssueStatus(errorId, status) {
this.updateStatus({
endpoint: this.getIssueUpdatePath(errorId),
redirectUrl: this.listPath,
status,
});
},
},
};
</script>
......@@ -299,6 +323,16 @@ export default {
<time-ago :time="errors.item.lastSeen" class="text-secondary" />
</div>
</template>
<template v-slot:ignore="errors">
<gl-button
ref="ignoreError"
v-gl-tooltip.hover
:title="__('Ignore')"
@click="updateIssueStatus(errors.item.id, 'ignored')"
>
<gl-icon name="eye-slash" :size="12" />
</gl-button>
</template>
<template v-slot:details="errors">
<gl-button
:href="getDetailsLink(errors.item.id)"
......
......@@ -13,7 +13,13 @@ export default () => {
store,
render(createElement) {
const domEl = document.querySelector(this.$options.el);
const { indexPath, enableErrorTrackingLink, illustrationPath } = domEl.dataset;
const {
indexPath,
enableErrorTrackingLink,
illustrationPath,
projectPath,
listPath,
} = domEl.dataset;
let { errorTrackingEnabled, userCanEnableErrorTracking } = domEl.dataset;
errorTrackingEnabled = parseBoolean(errorTrackingEnabled);
......@@ -26,6 +32,8 @@ export default () => {
errorTrackingEnabled,
illustrationPath,
userCanEnableErrorTracking,
projectPath,
listPath,
},
});
},
......
......@@ -21,8 +21,8 @@ export const createStore = () =>
list: {
namespaced: true,
state: listState(),
actions: listActions,
mutations: listMutations,
actions: { ...actions, ...listActions },
mutations: { ...mutations, ...listMutations },
},
details: {
namespaced: true,
......
......@@ -10,6 +10,8 @@ module Projects::ErrorTrackingHelper
'user-can-enable-error-tracking' => can?(current_user, :admin_operations, project).to_s,
'enable-error-tracking-link' => project_settings_operations_path(project),
'error-tracking-enabled' => error_tracking_enabled.to_s,
'project-path' => project.full_path,
'list-path' => project_error_tracking_index_path(project),
'illustration-path' => image_path('illustrations/cluster_popover.svg')
}
end
......
---
title: Implement ability to ignore Sentry errrors from the list view
merge_request: 22819
author:
type: added
---
title: Upgrade Pages to 1.13.0
merge_request: 23023
author:
type: added
......@@ -14,7 +14,7 @@ document more information about using branches to work together.
Forking a project is in most cases a two-step process.
1. Click on the fork button located located in between the star and clone buttons on the project's home page.
1. Click on the fork button located in between the star and clone buttons on the project's home page.
![Fork button](img/forking_workflow_fork_button.png)
......
......@@ -31,6 +31,8 @@ describe('ErrorTrackingList', () => {
store,
propsData: {
indexPath: '/path',
listPath: '/error_tracking',
projectPath: 'project/test',
enableErrorTrackingLink: '/link',
userCanEnableErrorTracking,
errorTrackingEnabled,
......@@ -59,6 +61,7 @@ describe('ErrorTrackingList', () => {
searchByQuery: jest.fn(),
sortByField: jest.fn(),
fetchPaginatedResults: jest.fn(),
updateStatus: jest.fn(),
};
const state = {
......@@ -139,6 +142,14 @@ describe('ErrorTrackingList', () => {
});
});
it('each error in the list should have an ignore button', () => {
const error = wrapper.findAll('tbody tr');
error.wrappers.forEach((_, index) => {
expect(error.at(index).exists('glicon-stub[name="eye-slash"]')).toBe(true);
});
});
describe('filtering', () => {
const findSearchBox = () => wrapper.find(GlFormInput);
......@@ -205,6 +216,35 @@ describe('ErrorTrackingList', () => {
});
});
describe('When the ignore button on an error is clicked', () => {
beforeEach(() => {
store.state.list.loading = false;
store.state.list.errors = errorsList;
mountComponent({
stubs: {
GlTable: false,
GlLink: false,
GlButton: false,
},
});
});
it('sends the "ignored" status and error ID', () => {
const ignoreButton = wrapper.find({ ref: 'ignoreError' });
ignoreButton.trigger('click');
expect(actions.updateStatus).toHaveBeenCalledWith(
expect.anything(),
{
endpoint: '/project/test/-/error_tracking/3.json',
redirectUrl: '/error_tracking',
status: 'ignored',
},
undefined,
);
});
});
describe('When error tracking is disabled and user is not allowed to enable it', () => {
beforeEach(() => {
mountComponent({
......
......@@ -11,6 +11,8 @@ describe Projects::ErrorTrackingHelper do
describe '#error_tracking_data' do
let(:can_enable_error_tracking) { true }
let(:setting_path) { project_settings_operations_path(project) }
let(:list_path) { project_error_tracking_index_path(project) }
let(:project_path) { project.full_path }
let(:index_path) do
project_error_tracking_index_path(project, format: :json)
......@@ -30,6 +32,8 @@ describe Projects::ErrorTrackingHelper do
'user-can-enable-error-tracking' => 'true',
'enable-error-tracking-link' => setting_path,
'error-tracking-enabled' => 'false',
'list-path' => list_path,
'project-path' => project_path,
'illustration-path' => match_asset_path('/assets/illustrations/cluster_popover.svg')
)
end
......
......@@ -17,6 +17,7 @@ describe 'Test coverage of the Project Import' do
# opening a follow-up issue to fix this.
MUTED_RELATIONS = %w[
project.milestones.events.push_event_payload
project.issues.events
project.issues.events.push_event_payload
project.issues.notes.events
project.issues.notes.events.push_event_payload
......@@ -55,13 +56,19 @@ describe 'Test coverage of the Project Import' do
# Note that we use separate fixture to test ee-only features.
# Most of the relations are present in `complex/project.json`
# which is our main fixture.
PROJECT_JSON_FIXTURES_EE =
if Gitlab.ee?
['ee/spec/fixtures/lib/gitlab/import_export/designs/project.json'].freeze
else
[]
end
PROJECT_JSON_FIXTURES = [
'spec/fixtures/lib/gitlab/import_export/complex/project.json',
'spec/fixtures/lib/gitlab/import_export/group/project.json',
'spec/fixtures/lib/gitlab/import_export/light/project.json',
'spec/fixtures/lib/gitlab/import_export/milestone-iid/project.json',
'ee/spec/fixtures/lib/gitlab/import_export/designs/project.json'
].freeze
'spec/fixtures/lib/gitlab/import_export/milestone-iid/project.json'
].freeze + PROJECT_JSON_FIXTURES_EE
it 'ensures that all imported/exported relations are present in test JSONs' do
not_tested_relations = (relations_from_config - tested_relations) - MUTED_RELATIONS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment