summaryrefslogtreecommitdiff
path: root/spec/frontend/monitoring/components/dashboard_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/monitoring/components/dashboard_spec.js')
-rw-r--r--spec/frontend/monitoring/components/dashboard_spec.js522
1 files changed, 15 insertions, 507 deletions
diff --git a/spec/frontend/monitoring/components/dashboard_spec.js b/spec/frontend/monitoring/components/dashboard_spec.js
index 4b7f7a9ddb3..f37d95317ab 100644
--- a/spec/frontend/monitoring/components/dashboard_spec.js
+++ b/spec/frontend/monitoring/components/dashboard_spec.js
@@ -1,19 +1,14 @@
import { shallowMount, mount } from '@vue/test-utils';
-import Tracking from '~/tracking';
-import { ESC_KEY, ESC_KEY_IE11 } from '~/lib/utils/keys';
-import { GlModal, GlDropdownItem, GlDeprecatedButton, GlIcon } from '@gitlab/ui';
-import { objectToQuery } from '~/lib/utils/url_utility';
import VueDraggable from 'vuedraggable';
import MockAdapter from 'axios-mock-adapter';
+import { TEST_HOST } from 'helpers/test_constants';
+import { ESC_KEY } from '~/lib/utils/keys';
+import { objectToQuery } from '~/lib/utils/url_utility';
import axios from '~/lib/utils/axios_utils';
import { dashboardEmptyStates, metricStates } from '~/monitoring/constants';
import Dashboard from '~/monitoring/components/dashboard.vue';
import DashboardHeader from '~/monitoring/components/dashboard_header.vue';
-import RefreshButton from '~/monitoring/components/refresh_button.vue';
-import DateTimePicker from '~/vue_shared/components/date_time_picker/date_time_picker.vue';
-import CustomMetricsFormFields from '~/custom_metrics/components/custom_metrics_form_fields.vue';
-import DashboardsDropdown from '~/monitoring/components/dashboards_dropdown.vue';
import EmptyState from '~/monitoring/components/empty_state.vue';
import GroupEmptyState from '~/monitoring/components/group_empty_state.vue';
import DashboardPanel from '~/monitoring/components/dashboard_panel.vue';
@@ -29,14 +24,13 @@ import {
setupStoreWithDataForPanelCount,
setupStoreWithLinks,
} from '../store_utils';
-import { environmentData, dashboardGitResponse, storeVariables } from '../mock_data';
+import { dashboardGitResponse, storeVariables } from '../mock_data';
import {
metricsDashboardViewModel,
metricsDashboardPanelCount,
dashboardProps,
} from '../fixture_data';
-import createFlash from '~/flash';
-import { TEST_HOST } from 'helpers/test_constants';
+import { deprecatedCreateFlash as createFlash } from '~/flash';
jest.mock('~/flash');
@@ -45,14 +39,6 @@ describe('Dashboard', () => {
let wrapper;
let mock;
- const findDashboardHeader = () => wrapper.find(DashboardHeader);
- const findEnvironmentsDropdown = () =>
- findDashboardHeader().find({ ref: 'monitorEnvironmentsDropdown' });
- const findAllEnvironmentsDropdownItems = () => findEnvironmentsDropdown().findAll(GlDropdownItem);
- const setSearchTerm = searchTerm => {
- store.commit(`monitoringDashboard/${types.SET_ENVIRONMENTS_FILTER}`, searchTerm);
- };
-
const createShallowWrapper = (props = {}, options = {}) => {
wrapper = shallowMount(Dashboard, {
propsData: { ...dashboardProps, ...props },
@@ -90,28 +76,6 @@ describe('Dashboard', () => {
}
});
- describe('no metrics are available yet', () => {
- beforeEach(() => {
- createShallowWrapper();
- });
-
- it('shows the environment selector', () => {
- expect(findEnvironmentsDropdown().exists()).toBe(true);
- });
- });
-
- describe('no data found', () => {
- beforeEach(() => {
- createShallowWrapper();
-
- return wrapper.vm.$nextTick();
- });
-
- it('shows the environment selector dropdown', () => {
- expect(findEnvironmentsDropdown().exists()).toBe(true);
- });
- });
-
describe('request information to the server', () => {
it('calls to set time range and fetch data', () => {
createShallowWrapper({ hasMetrics: true });
@@ -149,17 +113,14 @@ describe('Dashboard', () => {
});
it('fetches the metrics data with proper time window', () => {
- jest.spyOn(store, 'dispatch');
-
createMountedWrapper({ hasMetrics: true });
- store.commit(
- `monitoringDashboard/${types.RECEIVE_ENVIRONMENTS_DATA_SUCCESS}`,
- environmentData,
- );
-
return wrapper.vm.$nextTick().then(() => {
- expect(store.dispatch).toHaveBeenCalled();
+ expect(store.dispatch).toHaveBeenCalledWith('monitoringDashboard/fetchData', undefined);
+ expect(store.dispatch).toHaveBeenCalledWith(
+ 'monitoringDashboard/setTimeRange',
+ expect.objectContaining({ duration: { seconds: 28800 } }),
+ );
});
});
});
@@ -427,37 +388,6 @@ describe('Dashboard', () => {
);
});
});
-
- describe('when custom dashboard is selected', () => {
- const windowLocation = window.location;
- const findDashboardDropdown = () => wrapper.find(DashboardHeader).find(DashboardsDropdown);
-
- beforeEach(() => {
- store.commit(`monitoringDashboard/${types.SET_INITIAL_STATE}`, {
- projectPath: TEST_HOST,
- });
-
- delete window.location;
- window.location = { ...windowLocation, assign: jest.fn() };
- createMountedWrapper();
-
- return wrapper.vm.$nextTick();
- });
-
- afterEach(() => {
- window.location = windowLocation;
- });
-
- it('encodes dashboard param', () => {
- findDashboardDropdown().vm.$emit('selectDashboard', {
- path: '.gitlab/dashboards/dashboard&copy.yml',
- display_name: 'dashboard&copy.yml',
- });
- expect(window.location.assign).toHaveBeenCalledWith(
- `${TEST_HOST}/-/metrics/dashboard%26copy.yml`,
- );
- });
- });
});
describe('when all panels in the first group are loading', () => {
@@ -500,21 +430,6 @@ describe('Dashboard', () => {
return wrapper.vm.$nextTick();
});
- it('renders the environments dropdown with a number of environments', () => {
- expect(findAllEnvironmentsDropdownItems().length).toEqual(environmentData.length);
-
- findAllEnvironmentsDropdownItems().wrappers.forEach((itemWrapper, index) => {
- const anchorEl = itemWrapper.find('a');
- if (anchorEl.exists()) {
- const href = anchorEl.attributes('href');
- const currentDashboard = encodeURIComponent(dashboardGitResponse[0].path);
- const environmentId = encodeURIComponent(environmentData[index].id);
- const url = `${TEST_HOST}/-/metrics/${currentDashboard}?environment=${environmentId}`;
- expect(href).toBe(url);
- }
- });
- });
-
it('it does not show loading icons in any group', () => {
setupStoreWithData(store);
@@ -524,127 +439,6 @@ describe('Dashboard', () => {
});
});
});
-
- // Note: This test is not working, .active does not show the active environment
- // eslint-disable-next-line jest/no-disabled-tests
- it.skip('renders the environments dropdown with a single active element', () => {
- const activeItem = findAllEnvironmentsDropdownItems().wrappers.filter(itemWrapper =>
- itemWrapper.find('.active').exists(),
- );
-
- expect(activeItem.length).toBe(1);
- });
- });
-
- describe('star dashboards', () => {
- const findToggleStar = () => wrapper.find(DashboardHeader).find({ ref: 'toggleStarBtn' });
- const findToggleStarIcon = () => findToggleStar().find(GlIcon);
-
- beforeEach(() => {
- createShallowWrapper();
- setupAllDashboards(store);
- });
-
- it('toggle star button is shown', () => {
- expect(findToggleStar().exists()).toBe(true);
- expect(findToggleStar().props('disabled')).toBe(false);
- });
-
- it('toggle star button is disabled when starring is taking place', () => {
- store.commit(`monitoringDashboard/${types.REQUEST_DASHBOARD_STARRING}`);
-
- return wrapper.vm.$nextTick(() => {
- expect(findToggleStar().exists()).toBe(true);
- expect(findToggleStar().props('disabled')).toBe(true);
- });
- });
-
- describe('when the dashboard list is loaded', () => {
- // Tooltip element should wrap directly
- const getToggleTooltip = () => findToggleStar().element.parentElement.getAttribute('title');
-
- beforeEach(() => {
- setupAllDashboards(store);
- jest.spyOn(store, 'dispatch');
- });
-
- it('dispatches a toggle star action', () => {
- findToggleStar().vm.$emit('click');
-
- return wrapper.vm.$nextTick().then(() => {
- expect(store.dispatch).toHaveBeenCalledWith(
- 'monitoringDashboard/toggleStarredValue',
- undefined,
- );
- });
- });
-
- describe('when dashboard is not starred', () => {
- beforeEach(() => {
- store.commit(`monitoringDashboard/${types.SET_INITIAL_STATE}`, {
- currentDashboard: dashboardGitResponse[0].path,
- });
- return wrapper.vm.$nextTick();
- });
-
- it('toggle star button shows "Star dashboard"', () => {
- expect(getToggleTooltip()).toBe('Star dashboard');
- });
-
- it('toggle star button shows an unstarred state', () => {
- expect(findToggleStarIcon().attributes('name')).toBe('star-o');
- });
- });
-
- describe('when dashboard is starred', () => {
- beforeEach(() => {
- store.commit(`monitoringDashboard/${types.SET_INITIAL_STATE}`, {
- currentDashboard: dashboardGitResponse[1].path,
- });
- return wrapper.vm.$nextTick();
- });
-
- it('toggle star button shows "Star dashboard"', () => {
- expect(getToggleTooltip()).toBe('Unstar dashboard');
- });
-
- it('toggle star button shows a starred state', () => {
- expect(findToggleStarIcon().attributes('name')).toBe('star');
- });
- });
- });
- });
-
- it('hides the environments dropdown list when there is no environments', () => {
- createMountedWrapper({ hasMetrics: true });
-
- setupStoreWithDashboard(store);
-
- return wrapper.vm.$nextTick().then(() => {
- expect(findAllEnvironmentsDropdownItems()).toHaveLength(0);
- });
- });
-
- it('renders the datetimepicker dropdown', () => {
- createMountedWrapper({ hasMetrics: true });
-
- setupStoreWithData(store);
-
- return wrapper.vm.$nextTick().then(() => {
- expect(wrapper.find(DateTimePicker).exists()).toBe(true);
- });
- });
-
- it('renders the refresh dashboard button', () => {
- createMountedWrapper({ hasMetrics: true });
-
- setupStoreWithData(store);
-
- return wrapper.vm.$nextTick().then(() => {
- const refreshBtn = wrapper.find(DashboardHeader).find(RefreshButton);
-
- expect(refreshBtn.exists()).toBe(true);
- });
});
describe('variables section', () => {
@@ -772,15 +566,6 @@ describe('Dashboard', () => {
undefined,
);
});
-
- it('restores dashboard from full screen by typing the Escape key on IE11', () => {
- mockKeyup(ESC_KEY_IE11);
-
- expect(store.dispatch).toHaveBeenCalledWith(
- `monitoringDashboard/clearExpandedPanel`,
- undefined,
- );
- });
});
});
@@ -811,100 +596,6 @@ describe('Dashboard', () => {
});
});
- describe('searchable environments dropdown', () => {
- beforeEach(() => {
- createMountedWrapper({ hasMetrics: true }, { attachToDocument: true });
-
- setupStoreWithData(store);
-
- return wrapper.vm.$nextTick();
- });
-
- afterEach(() => {
- wrapper.destroy();
- });
-
- it('renders a search input', () => {
- expect(
- wrapper
- .find(DashboardHeader)
- .find({ ref: 'monitorEnvironmentsDropdownSearch' })
- .exists(),
- ).toBe(true);
- });
-
- it('renders dropdown items', () => {
- findAllEnvironmentsDropdownItems().wrappers.forEach((itemWrapper, index) => {
- const anchorEl = itemWrapper.find('a');
- if (anchorEl.exists()) {
- expect(anchorEl.text()).toBe(environmentData[index].name);
- }
- });
- });
-
- it('filters rendered dropdown items', () => {
- const searchTerm = 'production';
- const resultEnvs = environmentData.filter(({ name }) => name.indexOf(searchTerm) !== -1);
- setSearchTerm(searchTerm);
-
- return wrapper.vm.$nextTick().then(() => {
- expect(findAllEnvironmentsDropdownItems().length).toEqual(resultEnvs.length);
- });
- });
-
- it('does not filter dropdown items if search term is empty string', () => {
- const searchTerm = '';
- setSearchTerm(searchTerm);
-
- return wrapper.vm.$nextTick(() => {
- expect(findAllEnvironmentsDropdownItems().length).toEqual(environmentData.length);
- });
- });
-
- it("shows error message if search term doesn't match", () => {
- const searchTerm = 'does-not-exist';
- setSearchTerm(searchTerm);
-
- return wrapper.vm.$nextTick(() => {
- expect(
- wrapper
- .find(DashboardHeader)
- .find({ ref: 'monitorEnvironmentsDropdownMsg' })
- .isVisible(),
- ).toBe(true);
- });
- });
-
- it('shows loading element when environments fetch is still loading', () => {
- store.commit(`monitoringDashboard/${types.REQUEST_ENVIRONMENTS_DATA}`);
-
- return wrapper.vm
- .$nextTick()
- .then(() => {
- expect(
- wrapper
- .find(DashboardHeader)
- .find({ ref: 'monitorEnvironmentsDropdownLoading' })
- .exists(),
- ).toBe(true);
- })
- .then(() => {
- store.commit(
- `monitoringDashboard/${types.RECEIVE_ENVIRONMENTS_DATA_SUCCESS}`,
- environmentData,
- );
- })
- .then(() => {
- expect(
- wrapper
- .find(DashboardHeader)
- .find({ ref: 'monitorEnvironmentsDropdownLoading' })
- .exists(),
- ).toBe(false);
- });
- });
- });
-
describe('drag and drop function', () => {
const findDraggables = () => wrapper.findAll(VueDraggable);
const findEnabledDraggables = () => findDraggables().filter(f => !f.attributes('disabled'));
@@ -998,57 +689,6 @@ describe('Dashboard', () => {
});
});
- describe('dashboard timezone', () => {
- const setupWithTimezone = value => {
- store = createStore({ dashboardTimezone: value });
- setupStoreWithData(store);
- createShallowWrapper({ hasMetrics: true });
- return wrapper.vm.$nextTick;
- };
-
- describe('local timezone is enabled by default', () => {
- beforeEach(() => {
- return setupWithTimezone();
- });
-
- it('shows the data time picker in local timezone', () => {
- expect(
- findDashboardHeader()
- .find(DateTimePicker)
- .props('utc'),
- ).toBe(false);
- });
- });
-
- describe('when LOCAL timezone is enabled', () => {
- beforeEach(() => {
- return setupWithTimezone('LOCAL');
- });
-
- it('shows the data time picker in local timezone', () => {
- expect(
- findDashboardHeader()
- .find(DateTimePicker)
- .props('utc'),
- ).toBe(false);
- });
- });
-
- describe('when UTC timezone is enabled', () => {
- beforeEach(() => {
- return setupWithTimezone('UTC');
- });
-
- it('shows the data time picker in UTC format', () => {
- expect(
- findDashboardHeader()
- .find(DateTimePicker)
- .props('utc'),
- ).toBe(true);
- });
- });
- });
-
describe('cluster health', () => {
beforeEach(() => {
createShallowWrapper({ hasMetrics: true, showHeader: false });
@@ -1068,36 +708,9 @@ describe('Dashboard', () => {
});
});
- describe('dashboard edit link', () => {
- const findEditLink = () => wrapper.find('.js-edit-link');
-
- beforeEach(() => {
- createShallowWrapper({ hasMetrics: true });
-
- setupAllDashboards(store);
- return wrapper.vm.$nextTick();
- });
-
- it('is not present for the default dashboard', () => {
- expect(findEditLink().exists()).toBe(false);
- });
-
- it('is present for a custom dashboard, and links to its edit_path', () => {
- const dashboard = dashboardGitResponse[1];
- store.commit(`monitoringDashboard/${types.SET_INITIAL_STATE}`, {
- currentDashboard: dashboard.path,
- });
-
- return wrapper.vm.$nextTick().then(() => {
- expect(findEditLink().exists()).toBe(true);
- expect(findEditLink().attributes('href')).toBe(dashboard.project_blob_path);
- });
- });
- });
-
describe('document title', () => {
const originalTitle = 'Original Title';
- const defaultDashboardName = dashboardGitResponse[0].display_name;
+ const overviewDashboardName = dashboardGitResponse[0].display_name;
beforeEach(() => {
document.title = originalTitle;
@@ -1108,11 +721,11 @@ describe('Dashboard', () => {
document.title = '';
});
- it('is prepended with default dashboard name by default', () => {
+ it('is prepended with the overview dashboard name by default', () => {
setupAllDashboards(store);
return wrapper.vm.$nextTick().then(() => {
- expect(document.title.startsWith(`${defaultDashboardName} · `)).toBe(true);
+ expect(document.title.startsWith(`${overviewDashboardName} · `)).toBe(true);
});
});
@@ -1127,11 +740,11 @@ describe('Dashboard', () => {
});
});
- it('is prepended with default dashboard name is path is not known', () => {
+ it('is prepended with the overview dashboard name if path is not known', () => {
setupAllDashboards(store, 'unknown/path');
return wrapper.vm.$nextTick().then(() => {
- expect(document.title.startsWith(`${defaultDashboardName} · `)).toBe(true);
+ expect(document.title.startsWith(`${overviewDashboardName} · `)).toBe(true);
});
});
@@ -1151,41 +764,6 @@ describe('Dashboard', () => {
});
});
- describe('Dashboard dropdown', () => {
- beforeEach(() => {
- createMountedWrapper({ hasMetrics: true });
- setupAllDashboards(store);
- return wrapper.vm.$nextTick();
- });
-
- it('shows the dashboard dropdown', () => {
- const dashboardDropdown = wrapper.find(DashboardsDropdown);
-
- expect(dashboardDropdown.exists()).toBe(true);
- });
- });
-
- describe('external dashboard link', () => {
- beforeEach(() => {
- createMountedWrapper({
- hasMetrics: true,
- showPanels: false,
- showTimeWindowDropdown: false,
- externalDashboardUrl: '/mockUrl',
- });
-
- return wrapper.vm.$nextTick();
- });
-
- it('shows the link', () => {
- const externalDashboardButton = wrapper.find('.js-external-dashboard-link');
-
- expect(externalDashboardButton.exists()).toBe(true);
- expect(externalDashboardButton.is(GlDeprecatedButton)).toBe(true);
- expect(externalDashboardButton.text()).toContain('View full dashboard');
- });
- });
-
describe('Clipboard text in panels', () => {
const currentDashboard = dashboardGitResponse[1].path;
const panelIndex = 1; // skip expanded panel
@@ -1243,74 +821,4 @@ describe('Dashboard', () => {
expect(dashboardPanel.exists()).toBe(true);
});
});
-
- describe('add custom metrics', () => {
- const findAddMetricButton = () => wrapper.find(DashboardHeader).find({ ref: 'addMetricBtn' });
-
- describe('when not available', () => {
- beforeEach(() => {
- createShallowWrapper({
- hasMetrics: true,
- customMetricsPath: '/endpoint',
- });
- });
- it('does not render add button on the dashboard', () => {
- expect(findAddMetricButton().exists()).toBe(false);
- });
- });
-
- describe('when available', () => {
- let origPage;
- beforeEach(done => {
- jest.spyOn(Tracking, 'event').mockReturnValue();
- createShallowWrapper({
- hasMetrics: true,
- customMetricsPath: '/endpoint',
- customMetricsAvailable: true,
- });
- setupStoreWithData(store);
-
- origPage = document.body.dataset.page;
- document.body.dataset.page = 'projects:environments:metrics';
-
- wrapper.vm.$nextTick(done);
- });
- afterEach(() => {
- document.body.dataset.page = origPage;
- });
-
- it('renders add button on the dashboard', () => {
- expect(findAddMetricButton()).toBeDefined();
- });
-
- it('uses modal for custom metrics form', () => {
- expect(wrapper.find(GlModal).exists()).toBe(true);
- expect(wrapper.find(GlModal).attributes().modalid).toBe('addMetric');
- });
- it('adding new metric is tracked', done => {
- const submitButton = wrapper
- .find(DashboardHeader)
- .find({ ref: 'submitCustomMetricsFormBtn' }).vm;
- wrapper.vm.$nextTick(() => {
- submitButton.$el.click();
- wrapper.vm.$nextTick(() => {
- expect(Tracking.event).toHaveBeenCalledWith(
- document.body.dataset.page,
- 'click_button',
- {
- label: 'add_new_metric',
- property: 'modal',
- value: undefined,
- },
- );
- done();
- });
- });
- });
-
- it('renders custom metrics form fields', () => {
- expect(wrapper.find(CustomMetricsFormFields).exists()).toBe(true);
- });
- });
- });
});