summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/pipelines/stores
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/pipelines/stores')
-rw-r--r--app/assets/javascripts/pipelines/stores/test_reports/actions.js45
-rw-r--r--app/assets/javascripts/pipelines/stores/test_reports/getters.js12
-rw-r--r--app/assets/javascripts/pipelines/stores/test_reports/index.js13
-rw-r--r--app/assets/javascripts/pipelines/stores/test_reports/mutation_types.js4
-rw-r--r--app/assets/javascripts/pipelines/stores/test_reports/mutations.js12
-rw-r--r--app/assets/javascripts/pipelines/stores/test_reports/state.js13
6 files changed, 66 insertions, 33 deletions
diff --git a/app/assets/javascripts/pipelines/stores/test_reports/actions.js b/app/assets/javascripts/pipelines/stores/test_reports/actions.js
index 71d875c1a83..ccacb9f7e97 100644
--- a/app/assets/javascripts/pipelines/stores/test_reports/actions.js
+++ b/app/assets/javascripts/pipelines/stores/test_reports/actions.js
@@ -3,17 +3,42 @@ import * as types from './mutation_types';
import createFlash from '~/flash';
import { s__ } from '~/locale';
-export const setEndpoint = ({ commit }, data) => commit(types.SET_ENDPOINT, data);
+export const fetchSummary = ({ state, commit, dispatch }) => {
+ // If we do this without the build_report_summary feature flag enabled
+ // it causes a race condition for toggleLoading and ruins the loading
+ // state in the application
+ if (state.useBuildSummaryReport) {
+ dispatch('toggleLoading');
+ }
-export const fetchReports = ({ state, commit, dispatch }) => {
+ return axios
+ .get(state.summaryEndpoint)
+ .then(({ data }) => {
+ commit(types.SET_SUMMARY, data);
+
+ if (!state.useBuildSummaryReport) {
+ // Set the tab counter badge to total_count
+ // This is temporary until we can server-side render that count number
+ // (see https://gitlab.com/gitlab-org/gitlab/-/issues/223134)
+ document.querySelector('.js-test-report-badge-counter').innerHTML = data.total_count || 0;
+ }
+ })
+ .catch(() => {
+ createFlash(s__('TestReports|There was an error fetching the summary.'));
+ })
+ .finally(() => {
+ if (state.useBuildSummaryReport) {
+ dispatch('toggleLoading');
+ }
+ });
+};
+
+export const fetchFullReport = ({ state, commit, dispatch }) => {
dispatch('toggleLoading');
return axios
- .get(state.endpoint)
- .then(response => {
- const { data } = response;
- commit(types.SET_REPORTS, data);
- })
+ .get(state.fullReportEndpoint)
+ .then(({ data }) => commit(types.SET_REPORTS, data))
.catch(() => {
createFlash(s__('TestReports|There was an error fetching the test reports.'));
})
@@ -22,8 +47,10 @@ export const fetchReports = ({ state, commit, dispatch }) => {
});
};
-export const setSelectedSuite = ({ commit }, data) => commit(types.SET_SELECTED_SUITE, data);
-export const removeSelectedSuite = ({ commit }) => commit(types.SET_SELECTED_SUITE, {});
+export const setSelectedSuiteIndex = ({ commit }, data) =>
+ commit(types.SET_SELECTED_SUITE_INDEX, data);
+export const removeSelectedSuiteIndex = ({ commit }) =>
+ commit(types.SET_SELECTED_SUITE_INDEX, null);
export const toggleLoading = ({ commit }) => commit(types.TOGGLE_LOADING);
// prevent babel-plugin-rewire from generating an invalid default during karma tests
diff --git a/app/assets/javascripts/pipelines/stores/test_reports/getters.js b/app/assets/javascripts/pipelines/stores/test_reports/getters.js
index 788c1d32987..877762b77c9 100644
--- a/app/assets/javascripts/pipelines/stores/test_reports/getters.js
+++ b/app/assets/javascripts/pipelines/stores/test_reports/getters.js
@@ -9,14 +9,12 @@ export const getTestSuites = state => {
}));
};
-export const getSuiteTests = state => {
- const { selectedSuite } = state;
-
- if (selectedSuite.test_cases) {
- return selectedSuite.test_cases.sort(sortTestCases).map(addIconStatus);
- }
+export const getSelectedSuite = state =>
+ state.testReports?.test_suites?.[state.selectedSuiteIndex] || {};
- return [];
+export const getSuiteTests = state => {
+ const { test_cases: testCases = [] } = getSelectedSuite(state);
+ return testCases.sort(sortTestCases).map(addIconStatus);
};
// prevent babel-plugin-rewire from generating an invalid default during karma tests
diff --git a/app/assets/javascripts/pipelines/stores/test_reports/index.js b/app/assets/javascripts/pipelines/stores/test_reports/index.js
index 318dff5bcb2..88f61b09025 100644
--- a/app/assets/javascripts/pipelines/stores/test_reports/index.js
+++ b/app/assets/javascripts/pipelines/stores/test_reports/index.js
@@ -7,9 +7,10 @@ import mutations from './mutations';
Vue.use(Vuex);
-export default new Vuex.Store({
- actions,
- getters,
- mutations,
- state,
-});
+export default initialState =>
+ new Vuex.Store({
+ actions,
+ getters,
+ mutations,
+ state: state(initialState),
+ });
diff --git a/app/assets/javascripts/pipelines/stores/test_reports/mutation_types.js b/app/assets/javascripts/pipelines/stores/test_reports/mutation_types.js
index 832e45cf7a1..76405557b51 100644
--- a/app/assets/javascripts/pipelines/stores/test_reports/mutation_types.js
+++ b/app/assets/javascripts/pipelines/stores/test_reports/mutation_types.js
@@ -1,4 +1,4 @@
-export const SET_ENDPOINT = 'SET_ENDPOINT';
export const SET_REPORTS = 'SET_REPORTS';
-export const SET_SELECTED_SUITE = 'SET_SELECTED_SUITE';
+export const SET_SELECTED_SUITE_INDEX = 'SET_SELECTED_SUITE_INDEX';
+export const SET_SUMMARY = 'SET_SUMMARY';
export const TOGGLE_LOADING = 'TOGGLE_LOADING';
diff --git a/app/assets/javascripts/pipelines/stores/test_reports/mutations.js b/app/assets/javascripts/pipelines/stores/test_reports/mutations.js
index 349e6ec0469..2531ab1e87c 100644
--- a/app/assets/javascripts/pipelines/stores/test_reports/mutations.js
+++ b/app/assets/javascripts/pipelines/stores/test_reports/mutations.js
@@ -1,16 +1,16 @@
import * as types from './mutation_types';
export default {
- [types.SET_ENDPOINT](state, endpoint) {
- Object.assign(state, { endpoint });
+ [types.SET_REPORTS](state, testReports) {
+ Object.assign(state, { testReports, hasFullReport: true });
},
- [types.SET_REPORTS](state, testReports) {
- Object.assign(state, { testReports });
+ [types.SET_SELECTED_SUITE_INDEX](state, selectedSuiteIndex) {
+ Object.assign(state, { selectedSuiteIndex });
},
- [types.SET_SELECTED_SUITE](state, selectedSuite) {
- Object.assign(state, { selectedSuite });
+ [types.SET_SUMMARY](state, summary) {
+ Object.assign(state, { testReports: { ...state.testReports, ...summary } });
},
[types.TOGGLE_LOADING](state) {
diff --git a/app/assets/javascripts/pipelines/stores/test_reports/state.js b/app/assets/javascripts/pipelines/stores/test_reports/state.js
index 80a0c2a46a0..bcf5c147916 100644
--- a/app/assets/javascripts/pipelines/stores/test_reports/state.js
+++ b/app/assets/javascripts/pipelines/stores/test_reports/state.js
@@ -1,6 +1,13 @@
-export default () => ({
- endpoint: '',
+export default ({
+ fullReportEndpoint = '',
+ summaryEndpoint = '',
+ useBuildSummaryReport = false,
+}) => ({
+ summaryEndpoint,
+ fullReportEndpoint,
testReports: {},
- selectedSuite: {},
+ selectedSuiteIndex: null,
+ hasFullReport: false,
isLoading: false,
+ useBuildSummaryReport,
});