grouped_test_reports_app.vue 3.2 KB
Newer Older
1
<script>
F
Filipa Lacerda 已提交
2
  import { mapActions, mapGetters, mapState } from 'vuex';
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  import { s__ } from '~/locale';
  import { componentNames } from '~/vue_shared/components/reports/issue_body';
  import ReportSection from '~/vue_shared/components/reports/report_section.vue';
  import SummaryRow from '~/vue_shared/components/reports/summary_row.vue';
  import IssuesList from '~/vue_shared/components/reports/issues_list.vue';
  import Modal from './modal.vue';
  import createStore from '../store';
  import { summaryTextBuilder, reportTextBuilder, statusIcon } from '../store/utils';

  export default {
    name: 'GroupedTestReportsApp',
    store: createStore(),
    components: {
      ReportSection,
      SummaryRow,
      IssuesList,
      Modal,
    },
    props: {
      endpoint: {
        type: String,
        required: true,
      },
    },
    componentNames,
    computed: {
F
Filipa Lacerda 已提交
29
      ...mapState([
30 31 32
        'reports',
        'isLoading',
        'hasError',
F
Filipa Lacerda 已提交
33 34 35 36 37 38 39 40
        'summary',
      ]),
      ...mapState({
        modalTitle: state => state.modal.title || '',
        modalData: state => state.modal.data || {},
      }),
      ...mapGetters([
        'summaryStatus',
41 42 43 44 45 46
      ]),
      groupedSummaryText() {
        if (this.isLoading) {
          return s__('Reports|Test summary results are being parsed');
        }

F
Filipa Lacerda 已提交
47
        if (this.hasError) {
48 49 50
          return s__('Reports|Test summary failed loading results');
        }

F
Filipa Lacerda 已提交
51
        return summaryTextBuilder(s__('Reports|Test summary'), this.summary);
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
      },
    },
    created() {
      this.setEndpoint(this.endpoint);

      this.fetchReports();
    },
    methods: {
      ...mapActions(['setEndpoint', 'fetchReports']),
      reportText(report) {
        const summary = report.summary || {};
        return reportTextBuilder(report.name, summary);
      },
      getReportIcon(report) {
        return statusIcon(report.status);
      },
      shouldRenderIssuesList(report) {
        return (
          report.existing_failures.length > 0 ||
          report.new_failures.length > 0 ||
F
Filipa Lacerda 已提交
72
          report.resolved_failures.length > 0
73 74 75 76 77 78 79 80 81 82 83 84
        );
      },
    },
  };
</script>
<template>
  <report-section
    :status="summaryStatus"
    :success-text="groupedSummaryText"
    :loading-text="groupedSummaryText"
    :error-text="groupedSummaryText"
    :has-issues="reports.length > 0"
85
    class="mr-widget-border-top grouped-security-reports mr-report"
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
  >
    <div
      slot="body"
      class="mr-widget-grouped-section report-block"
    >
      <template
        v-for="(report, i) in reports"
      >
        <summary-row
          :summary="reportText(report)"
          :status-icon="getReportIcon(report)"
          :key="`summary-row-${i}`"
        />
        <issues-list
          v-if="shouldRenderIssuesList(report)"
          :unresolved-issues="report.existing_failures"
          :new-issues="report.new_failures"
          :resolved-issues="report.resolved_failures"
          :key="`issues-list-${i}`"
          :component="$options.componentNames.TestIssueBody"
          class="report-block-group-list"
        />
      </template>

      <modal
        :title="modalTitle"
        :modal-data="modalData"
      />
    </div>
  </report-section>
</template>