337 lines
9.2 KiB
JavaScript
337 lines
9.2 KiB
JavaScript
import axios from '~/lib/utils/axios_utils';
|
|
import MockAdapter from 'axios-mock-adapter';
|
|
import store from '~/monitoring/stores';
|
|
import * as types from '~/monitoring/stores/mutation_types';
|
|
import {
|
|
fetchDashboard,
|
|
receiveMetricsDashboardSuccess,
|
|
receiveMetricsDashboardFailure,
|
|
fetchDeploymentsData,
|
|
fetchEnvironmentsData,
|
|
fetchPrometheusMetrics,
|
|
fetchPrometheusMetric,
|
|
requestMetricsData,
|
|
setEndpoints,
|
|
setGettingStartedEmptyState,
|
|
} from '~/monitoring/stores/actions';
|
|
import storeState from '~/monitoring/stores/state';
|
|
import testAction from 'spec/helpers/vuex_action_helper';
|
|
import { resetStore } from '../helpers';
|
|
import {
|
|
deploymentData,
|
|
environmentData,
|
|
metricsDashboardResponse,
|
|
metricsGroupsAPIResponse,
|
|
dashboardGitResponse,
|
|
} from '../mock_data';
|
|
|
|
describe('Monitoring store actions', () => {
|
|
let mock;
|
|
|
|
beforeEach(() => {
|
|
mock = new MockAdapter(axios);
|
|
});
|
|
|
|
afterEach(() => {
|
|
resetStore(store);
|
|
mock.restore();
|
|
});
|
|
|
|
describe('requestMetricsData', () => {
|
|
it('sets emptyState to loading', () => {
|
|
const commit = jasmine.createSpy();
|
|
const { state } = store;
|
|
|
|
requestMetricsData({ state, commit });
|
|
|
|
expect(commit).toHaveBeenCalledWith(types.REQUEST_METRICS_DATA);
|
|
});
|
|
});
|
|
|
|
describe('fetchDeploymentsData', () => {
|
|
it('commits RECEIVE_DEPLOYMENTS_DATA_SUCCESS on error', done => {
|
|
const dispatch = jasmine.createSpy();
|
|
const { state } = store;
|
|
state.deploymentsEndpoint = '/success';
|
|
|
|
mock.onGet(state.deploymentsEndpoint).reply(200, {
|
|
deployments: deploymentData,
|
|
});
|
|
|
|
fetchDeploymentsData({ state, dispatch })
|
|
.then(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('receiveDeploymentsDataSuccess', deploymentData);
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('commits RECEIVE_DEPLOYMENTS_DATA_FAILURE on error', done => {
|
|
const dispatch = jasmine.createSpy();
|
|
const { state } = store;
|
|
state.deploymentsEndpoint = '/error';
|
|
|
|
mock.onGet(state.deploymentsEndpoint).reply(500);
|
|
|
|
fetchDeploymentsData({ state, dispatch })
|
|
.then(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('receiveDeploymentsDataFailure');
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
});
|
|
|
|
describe('fetchEnvironmentsData', () => {
|
|
it('commits RECEIVE_ENVIRONMENTS_DATA_SUCCESS on error', done => {
|
|
const dispatch = jasmine.createSpy();
|
|
const { state } = store;
|
|
state.environmentsEndpoint = '/success';
|
|
|
|
mock.onGet(state.environmentsEndpoint).reply(200, {
|
|
environments: environmentData,
|
|
});
|
|
|
|
fetchEnvironmentsData({ state, dispatch })
|
|
.then(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('receiveEnvironmentsDataSuccess', environmentData);
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('commits RECEIVE_ENVIRONMENTS_DATA_FAILURE on error', done => {
|
|
const dispatch = jasmine.createSpy();
|
|
const { state } = store;
|
|
state.environmentsEndpoint = '/error';
|
|
|
|
mock.onGet(state.environmentsEndpoint).reply(500);
|
|
|
|
fetchEnvironmentsData({ state, dispatch })
|
|
.then(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('receiveEnvironmentsDataFailure');
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
});
|
|
|
|
describe('Set endpoints', () => {
|
|
let mockedState;
|
|
|
|
beforeEach(() => {
|
|
mockedState = storeState();
|
|
});
|
|
|
|
it('should commit SET_ENDPOINTS mutation', done => {
|
|
testAction(
|
|
setEndpoints,
|
|
{
|
|
metricsEndpoint: 'additional_metrics.json',
|
|
deploymentsEndpoint: 'deployments.json',
|
|
environmentsEndpoint: 'deployments.json',
|
|
},
|
|
mockedState,
|
|
[
|
|
{
|
|
type: types.SET_ENDPOINTS,
|
|
payload: {
|
|
metricsEndpoint: 'additional_metrics.json',
|
|
deploymentsEndpoint: 'deployments.json',
|
|
environmentsEndpoint: 'deployments.json',
|
|
},
|
|
},
|
|
],
|
|
[],
|
|
done,
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('Set empty states', () => {
|
|
let mockedState;
|
|
|
|
beforeEach(() => {
|
|
mockedState = storeState();
|
|
});
|
|
|
|
it('should commit SET_METRICS_ENDPOINT mutation', done => {
|
|
testAction(
|
|
setGettingStartedEmptyState,
|
|
null,
|
|
mockedState,
|
|
[{ type: types.SET_GETTING_STARTED_EMPTY_STATE }],
|
|
[],
|
|
done,
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('fetchDashboard', () => {
|
|
let dispatch;
|
|
let state;
|
|
const response = metricsDashboardResponse;
|
|
|
|
beforeEach(() => {
|
|
dispatch = jasmine.createSpy();
|
|
state = storeState();
|
|
state.dashboardEndpoint = '/dashboard';
|
|
});
|
|
|
|
it('dispatches receive and success actions', done => {
|
|
const params = {};
|
|
mock.onGet(state.dashboardEndpoint).reply(200, response);
|
|
|
|
fetchDashboard({ state, dispatch }, params)
|
|
.then(() => {
|
|
expect(dispatch).toHaveBeenCalledWith('requestMetricsDashboard');
|
|
expect(dispatch).toHaveBeenCalledWith('receiveMetricsDashboardSuccess', {
|
|
response,
|
|
params,
|
|
});
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('dispatches failure action', done => {
|
|
const params = {};
|
|
mock.onGet(state.dashboardEndpoint).reply(500);
|
|
|
|
fetchDashboard({ state, dispatch }, params)
|
|
.then(() => {
|
|
expect(dispatch).toHaveBeenCalledWith(
|
|
'receiveMetricsDashboardFailure',
|
|
new Error('Request failed with status code 500'),
|
|
);
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
});
|
|
|
|
describe('receiveMetricsDashboardSuccess', () => {
|
|
let commit;
|
|
let dispatch;
|
|
let state;
|
|
|
|
beforeEach(() => {
|
|
commit = jasmine.createSpy();
|
|
dispatch = jasmine.createSpy();
|
|
state = storeState();
|
|
});
|
|
|
|
it('stores groups ', () => {
|
|
const params = {};
|
|
const response = metricsDashboardResponse;
|
|
|
|
receiveMetricsDashboardSuccess({ state, commit, dispatch }, { response, params });
|
|
|
|
expect(commit).toHaveBeenCalledWith(
|
|
types.RECEIVE_METRICS_DATA_SUCCESS,
|
|
metricsDashboardResponse.dashboard.panel_groups,
|
|
);
|
|
|
|
expect(dispatch).toHaveBeenCalledWith('fetchPrometheusMetrics', params);
|
|
});
|
|
|
|
it('sets the dashboards loaded from the repository', () => {
|
|
const params = {};
|
|
const response = metricsDashboardResponse;
|
|
|
|
response.all_dashboards = dashboardGitResponse;
|
|
state.multipleDashboardsEnabled = true;
|
|
|
|
receiveMetricsDashboardSuccess({ state, commit, dispatch }, { response, params });
|
|
|
|
expect(commit).toHaveBeenCalledWith(types.SET_ALL_DASHBOARDS, dashboardGitResponse);
|
|
});
|
|
});
|
|
|
|
describe('receiveMetricsDashboardFailure', () => {
|
|
let commit;
|
|
|
|
beforeEach(() => {
|
|
commit = jasmine.createSpy();
|
|
});
|
|
|
|
it('commits failure action', () => {
|
|
receiveMetricsDashboardFailure({ commit });
|
|
|
|
expect(commit).toHaveBeenCalledWith(types.RECEIVE_METRICS_DATA_FAILURE, undefined);
|
|
});
|
|
|
|
it('commits failure action with error', () => {
|
|
receiveMetricsDashboardFailure({ commit }, 'uh-oh');
|
|
|
|
expect(commit).toHaveBeenCalledWith(types.RECEIVE_METRICS_DATA_FAILURE, 'uh-oh');
|
|
});
|
|
});
|
|
|
|
describe('fetchPrometheusMetrics', () => {
|
|
let commit;
|
|
let dispatch;
|
|
|
|
beforeEach(() => {
|
|
commit = jasmine.createSpy();
|
|
dispatch = jasmine.createSpy();
|
|
});
|
|
|
|
it('commits empty state when state.groups is empty', done => {
|
|
const state = storeState();
|
|
const params = {};
|
|
|
|
fetchPrometheusMetrics({ state, commit, dispatch }, params)
|
|
.then(() => {
|
|
expect(commit).toHaveBeenCalledWith(types.SET_NO_DATA_EMPTY_STATE);
|
|
expect(dispatch).not.toHaveBeenCalled();
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
});
|
|
|
|
it('dispatches fetchPrometheusMetric for each panel query', done => {
|
|
const params = {};
|
|
const state = storeState();
|
|
state.groups = metricsDashboardResponse.dashboard.panel_groups;
|
|
|
|
const metric = state.groups[0].panels[0].metrics[0];
|
|
|
|
fetchPrometheusMetrics({ state, commit, dispatch }, params)
|
|
.then(() => {
|
|
expect(dispatch.calls.count()).toEqual(3);
|
|
expect(dispatch).toHaveBeenCalledWith('fetchPrometheusMetric', { metric, params });
|
|
done();
|
|
})
|
|
.catch(done.fail);
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('fetchPrometheusMetric', () => {
|
|
it('commits prometheus query result', done => {
|
|
const commit = jasmine.createSpy();
|
|
const params = {
|
|
start: '2019-08-06T12:40:02.184Z',
|
|
end: '2019-08-06T20:40:02.184Z',
|
|
};
|
|
const metric = metricsDashboardResponse.dashboard.panel_groups[0].panels[0].metrics[0];
|
|
const state = storeState();
|
|
|
|
const data = metricsGroupsAPIResponse.data[0].metrics[0].queries[0];
|
|
const response = { data };
|
|
mock.onGet('http://test').reply(200, response);
|
|
|
|
fetchPrometheusMetric({ state, commit }, { metric, params });
|
|
|
|
setTimeout(() => {
|
|
expect(commit).toHaveBeenCalledWith(types.SET_QUERY_RESULT, {
|
|
metricId: metric.metric_id,
|
|
result: data.result,
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|