debian-mirror-gitlab/app/assets/javascripts/reports/components/grouped_test_reports_app.vue

184 lines
5.2 KiB
Vue
Raw Normal View History

2018-11-18 11:00:15 +05:30
<script>
2020-10-24 23:57:45 +05:30
import { GlButton } from '@gitlab/ui';
2021-03-11 19:13:27 +05:30
import { once } from 'lodash';
import { mapActions, mapGetters, mapState } from 'vuex';
2020-05-24 23:13:21 +05:30
import { sprintf, s__ } from '~/locale';
2021-01-29 00:20:46 +05:30
import Tracking from '~/tracking';
2021-03-11 19:13:27 +05:30
import createStore from '../store';
2021-01-29 00:20:46 +05:30
import {
summaryTextBuilder,
reportTextBuilder,
statusIcon,
recentFailuresTextBuilder,
} from '../store/utils';
2021-03-11 19:13:27 +05:30
import { componentNames } from './issue_body';
import IssuesList from './issues_list.vue';
import Modal from './modal.vue';
import ReportSection from './report_section.vue';
import SummaryRow from './summary_row.vue';
2018-11-18 11:00:15 +05:30
2018-12-13 13:39:08 +05:30
export default {
name: 'GroupedTestReportsApp',
store: createStore(),
components: {
ReportSection,
SummaryRow,
IssuesList,
Modal,
2020-07-28 23:09:34 +05:30
GlButton,
2018-12-13 13:39:08 +05:30
},
2021-03-08 18:12:59 +05:30
mixins: [Tracking.mixin()],
2018-12-13 13:39:08 +05:30
props: {
endpoint: {
type: String,
required: true,
2018-11-18 11:00:15 +05:30
},
2020-07-28 23:09:34 +05:30
pipelinePath: {
type: String,
required: false,
default: '',
},
2018-12-13 13:39:08 +05:30
},
componentNames,
computed: {
...mapState(['reports', 'isLoading', 'hasError', 'summary']),
...mapState({
2021-03-08 18:12:59 +05:30
modalTitle: (state) => state.modal.title || '',
modalData: (state) => state.modal.data || {},
modalOpen: (state) => state.modal.open || false,
2018-12-13 13:39:08 +05:30
}),
...mapGetters(['summaryStatus']),
groupedSummaryText() {
if (this.isLoading) {
return s__('Reports|Test summary results are being parsed');
}
2018-11-18 11:00:15 +05:30
2018-12-13 13:39:08 +05:30
if (this.hasError) {
return s__('Reports|Test summary failed loading results');
}
2018-11-18 11:00:15 +05:30
2018-12-13 13:39:08 +05:30
return summaryTextBuilder(s__('Reports|Test summary'), this.summary);
2018-11-18 11:00:15 +05:30
},
2020-07-28 23:09:34 +05:30
testTabURL() {
return `${this.pipelinePath}/test_report`;
},
showViewFullReport() {
2020-10-24 23:57:45 +05:30
return this.pipelinePath.length;
2020-07-28 23:09:34 +05:30
},
2021-01-29 00:20:46 +05:30
handleToggleEvent() {
return once(() => {
this.track(this.$options.expandEvent);
});
},
2018-12-13 13:39:08 +05:30
},
created() {
this.setEndpoint(this.endpoint);
2018-11-18 11:00:15 +05:30
2018-12-13 13:39:08 +05:30
this.fetchReports();
},
methods: {
2021-03-08 18:12:59 +05:30
...mapActions(['setEndpoint', 'fetchReports', 'closeModal']),
2018-12-13 13:39:08 +05:30
reportText(report) {
2020-05-24 23:13:21 +05:30
const { name, summary } = report || {};
if (report.status === 'error') {
return sprintf(s__('Reports|An error occurred while loading %{name} results'), { name });
}
if (!report.name) {
return s__('Reports|An error occured while loading report');
}
return reportTextBuilder(name, summary);
2018-12-13 13:39:08 +05:30
},
2021-01-29 00:20:46 +05:30
hasRecentFailures(summary) {
2021-03-08 18:12:59 +05:30
return summary?.recentlyFailed > 0;
2021-01-29 00:20:46 +05:30
},
recentFailuresText(summary) {
return recentFailuresTextBuilder(summary);
},
2018-12-13 13:39:08 +05:30
getReportIcon(report) {
return statusIcon(report.status);
2018-11-18 11:00:15 +05:30
},
2018-12-13 13:39:08 +05:30
shouldRenderIssuesList(report) {
return (
report.existing_failures.length > 0 ||
report.new_failures.length > 0 ||
2020-03-13 15:44:24 +05:30
report.resolved_failures.length > 0 ||
report.existing_errors.length > 0 ||
report.new_errors.length > 0 ||
report.resolved_errors.length > 0
2018-12-13 13:39:08 +05:30
);
2018-11-18 11:00:15 +05:30
},
2020-03-13 15:44:24 +05:30
unresolvedIssues(report) {
return report.existing_failures.concat(report.existing_errors);
},
newIssues(report) {
return report.new_failures.concat(report.new_errors);
},
resolvedIssues(report) {
return report.resolved_failures.concat(report.resolved_errors);
},
2018-12-13 13:39:08 +05:30
},
2021-01-29 00:20:46 +05:30
expandEvent: 'expand_test_report_widget',
2018-12-13 13:39:08 +05:30
};
2018-11-18 11:00:15 +05:30
</script>
<template>
<report-section
:status="summaryStatus"
:success-text="groupedSummaryText"
:loading-text="groupedSummaryText"
:error-text="groupedSummaryText"
:has-issues="reports.length > 0"
2021-01-29 00:20:46 +05:30
:should-emit-toggle-event="true"
2018-12-13 13:39:08 +05:30
class="mr-widget-section grouped-security-reports mr-report"
2021-01-29 00:20:46 +05:30
@toggleEvent="handleToggleEvent"
2018-11-18 11:00:15 +05:30
>
2021-01-29 00:20:46 +05:30
<template v-if="showViewFullReport" #action-buttons>
2020-07-28 23:09:34 +05:30
<gl-button
:href="testTabURL"
2020-10-24 23:57:45 +05:30
target="_blank"
2020-07-28 23:09:34 +05:30
icon="external-link"
data-testid="group-test-reports-full-link"
class="gl-mr-3"
>
{{ s__('ciReport|View full report') }}
</gl-button>
</template>
2021-01-29 00:20:46 +05:30
<template v-if="hasRecentFailures(summary)" #sub-heading>
{{ recentFailuresText(summary) }}
</template>
2020-06-23 00:09:42 +05:30
<template #body>
<div class="mr-widget-grouped-section report-block">
<template v-for="(report, i) in reports">
2021-01-29 00:20:46 +05:30
<summary-row :key="`summary-row-${i}`" :status-icon="getReportIcon(report)">
<template #summary>
<div class="gl-display-inline-flex gl-flex-direction-column">
<div>{{ reportText(report) }}</div>
<div v-if="hasRecentFailures(report.summary)">
{{ recentFailuresText(report.summary) }}
</div>
</div>
</template>
</summary-row>
2020-06-23 00:09:42 +05:30
<issues-list
v-if="shouldRenderIssuesList(report)"
:key="`issues-list-${i}`"
:unresolved-issues="unresolvedIssues(report)"
:new-issues="newIssues(report)"
:resolved-issues="resolvedIssues(report)"
:component="$options.componentNames.TestIssueBody"
class="report-block-group-list"
/>
</template>
2021-03-08 18:12:59 +05:30
<modal
:visible="modalOpen"
:title="modalTitle"
:modal-data="modalData"
@hide="closeModal"
/>
2020-06-23 00:09:42 +05:30
</div>
</template>
2018-11-18 11:00:15 +05:30
</report-section>
</template>