264 lines
11 KiB
TypeScript
264 lines
11 KiB
TypeScript
import { config } from '@grafana/runtime';
|
|
|
|
import {
|
|
clearNotFound,
|
|
expandDashboardFolder,
|
|
searchDashboards,
|
|
toggleDashboards,
|
|
updateScopes,
|
|
} from './utils/actions';
|
|
import {
|
|
expectDashboardFolderNotInDocument,
|
|
expectDashboardInDocument,
|
|
expectDashboardLength,
|
|
expectDashboardNotInDocument,
|
|
expectDashboardsClosed,
|
|
expectDashboardSearchValue,
|
|
expectDashboardsOpen,
|
|
expectDashboardsSearch,
|
|
expectNoDashboardsForFilter,
|
|
expectNoDashboardsForScope,
|
|
expectNoDashboardsNoScopes,
|
|
expectNoDashboardsSearch,
|
|
} from './utils/assertions';
|
|
import { fetchDashboardsSpy, getDatasource, getInstanceSettings, getMock } from './utils/mocks';
|
|
import { renderDashboard, resetScenes } from './utils/render';
|
|
|
|
jest.mock('@grafana/runtime', () => ({
|
|
__esModule: true,
|
|
...jest.requireActual('@grafana/runtime'),
|
|
useChromeHeaderHeight: jest.fn(),
|
|
getBackendSrv: () => ({ get: getMock }),
|
|
getDataSourceSrv: () => ({ get: getDatasource, getInstanceSettings }),
|
|
usePluginLinks: jest.fn().mockReturnValue({ links: [] }),
|
|
}));
|
|
|
|
describe('Dashboards list', () => {
|
|
beforeAll(() => {
|
|
config.featureToggles.scopeFilters = true;
|
|
config.featureToggles.groupByVariable = true;
|
|
});
|
|
|
|
beforeEach(() => {
|
|
renderDashboard();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await resetScenes();
|
|
});
|
|
|
|
it('Opens container and fetches dashboards list when a scope is selected', async () => {
|
|
expectDashboardsClosed();
|
|
await updateScopes(['mimir']);
|
|
expectDashboardsOpen();
|
|
expect(fetchDashboardsSpy).toHaveBeenCalled();
|
|
});
|
|
|
|
it('Closes container when no scopes are selected', async () => {
|
|
await updateScopes(['mimir']);
|
|
expectDashboardsOpen();
|
|
await updateScopes(['mimir', 'loki']);
|
|
expectDashboardsOpen();
|
|
await updateScopes([]);
|
|
expectDashboardsClosed();
|
|
});
|
|
|
|
it('Fetches dashboards list when the list is expanded', async () => {
|
|
await toggleDashboards();
|
|
await updateScopes(['mimir']);
|
|
expect(fetchDashboardsSpy).toHaveBeenCalled();
|
|
});
|
|
|
|
it('Fetches dashboards list when the list is expanded after scope selection', async () => {
|
|
await updateScopes(['mimir']);
|
|
await toggleDashboards();
|
|
expect(fetchDashboardsSpy).toHaveBeenCalled();
|
|
});
|
|
|
|
it('Shows dashboards for multiple scopes', async () => {
|
|
await toggleDashboards();
|
|
await updateScopes(['grafana']);
|
|
await expandDashboardFolder('General');
|
|
await expandDashboardFolder('Observability');
|
|
await expandDashboardFolder('Usage');
|
|
expectDashboardFolderNotInDocument('Components');
|
|
expectDashboardFolderNotInDocument('Investigations');
|
|
expectDashboardInDocument('general-data-sources');
|
|
expectDashboardInDocument('general-usage');
|
|
expectDashboardInDocument('observability-backend-errors');
|
|
expectDashboardInDocument('observability-backend-logs');
|
|
expectDashboardInDocument('observability-frontend-errors');
|
|
expectDashboardInDocument('observability-frontend-logs');
|
|
expectDashboardInDocument('usage-data-sources');
|
|
expectDashboardInDocument('usage-stats');
|
|
expectDashboardInDocument('usage-usage-overview');
|
|
expectDashboardInDocument('frontend');
|
|
expectDashboardInDocument('overview');
|
|
expectDashboardInDocument('stats');
|
|
expectDashboardNotInDocument('multiple3-datasource-errors');
|
|
expectDashboardNotInDocument('multiple4-datasource-logs');
|
|
expectDashboardNotInDocument('multiple0-ingester');
|
|
expectDashboardNotInDocument('multiple1-distributor');
|
|
expectDashboardNotInDocument('multiple2-compacter');
|
|
expectDashboardNotInDocument('another-stats');
|
|
|
|
await updateScopes(['grafana', 'mimir']);
|
|
await expandDashboardFolder('General');
|
|
await expandDashboardFolder('Observability');
|
|
await expandDashboardFolder('Usage');
|
|
await expandDashboardFolder('Components');
|
|
await expandDashboardFolder('Investigations');
|
|
expectDashboardInDocument('general-data-sources');
|
|
expectDashboardInDocument('general-usage');
|
|
expectDashboardInDocument('observability-backend-errors');
|
|
expectDashboardInDocument('observability-backend-logs');
|
|
expectDashboardInDocument('observability-frontend-errors');
|
|
expectDashboardInDocument('observability-frontend-logs');
|
|
expectDashboardInDocument('usage-data-sources');
|
|
expectDashboardInDocument('usage-stats');
|
|
expectDashboardInDocument('usage-usage-overview');
|
|
expectDashboardInDocument('frontend');
|
|
expectDashboardInDocument('overview');
|
|
expectDashboardInDocument('stats');
|
|
expectDashboardLength('multiple3-datasource-errors', 2);
|
|
expectDashboardLength('multiple4-datasource-logs', 2);
|
|
expectDashboardLength('multiple0-ingester', 2);
|
|
expectDashboardLength('multiple1-distributor', 2);
|
|
expectDashboardLength('multiple2-compacter', 2);
|
|
expectDashboardInDocument('another-stats');
|
|
|
|
await updateScopes(['grafana']);
|
|
await expandDashboardFolder('General');
|
|
await expandDashboardFolder('Observability');
|
|
await expandDashboardFolder('Usage');
|
|
expectDashboardFolderNotInDocument('Components');
|
|
expectDashboardFolderNotInDocument('Investigations');
|
|
expectDashboardInDocument('general-data-sources');
|
|
expectDashboardInDocument('general-usage');
|
|
expectDashboardInDocument('observability-backend-errors');
|
|
expectDashboardInDocument('observability-backend-logs');
|
|
expectDashboardInDocument('observability-frontend-errors');
|
|
expectDashboardInDocument('observability-frontend-logs');
|
|
expectDashboardInDocument('usage-data-sources');
|
|
expectDashboardInDocument('usage-stats');
|
|
expectDashboardInDocument('usage-usage-overview');
|
|
expectDashboardInDocument('frontend');
|
|
expectDashboardInDocument('overview');
|
|
expectDashboardInDocument('stats');
|
|
expectDashboardFolderNotInDocument('multiple3-datasource-errors');
|
|
expectDashboardFolderNotInDocument('multiple4-datasource-logs');
|
|
expectDashboardFolderNotInDocument('multiple0-ingester');
|
|
expectDashboardFolderNotInDocument('multiple1-distributor');
|
|
expectDashboardFolderNotInDocument('multiple2-compacter');
|
|
expectDashboardFolderNotInDocument('another-stats');
|
|
});
|
|
|
|
it('Filters the dashboards list for dashboards', async () => {
|
|
await toggleDashboards();
|
|
await updateScopes(['grafana']);
|
|
await expandDashboardFolder('General');
|
|
await expandDashboardFolder('Observability');
|
|
await expandDashboardFolder('Usage');
|
|
expectDashboardInDocument('general-data-sources');
|
|
expectDashboardInDocument('general-usage');
|
|
expectDashboardInDocument('observability-backend-errors');
|
|
expectDashboardInDocument('observability-backend-logs');
|
|
expectDashboardInDocument('observability-frontend-errors');
|
|
expectDashboardInDocument('observability-frontend-logs');
|
|
expectDashboardInDocument('usage-data-sources');
|
|
expectDashboardInDocument('usage-stats');
|
|
expectDashboardInDocument('usage-usage-overview');
|
|
expectDashboardInDocument('frontend');
|
|
expectDashboardInDocument('overview');
|
|
expectDashboardInDocument('stats');
|
|
|
|
await searchDashboards('Stats');
|
|
expectDashboardFolderNotInDocument('general-data-sources');
|
|
expectDashboardFolderNotInDocument('general-usage');
|
|
expectDashboardFolderNotInDocument('observability-backend-errors');
|
|
expectDashboardFolderNotInDocument('observability-backend-logs');
|
|
expectDashboardFolderNotInDocument('observability-frontend-errors');
|
|
expectDashboardFolderNotInDocument('observability-frontend-logs');
|
|
expectDashboardFolderNotInDocument('usage-data-sources');
|
|
expectDashboardInDocument('usage-stats');
|
|
expectDashboardFolderNotInDocument('usage-usage-overview');
|
|
expectDashboardFolderNotInDocument('frontend');
|
|
expectDashboardFolderNotInDocument('overview');
|
|
expectDashboardInDocument('stats');
|
|
});
|
|
|
|
it('Filters the dashboards list for folders', async () => {
|
|
await toggleDashboards();
|
|
await updateScopes(['grafana']);
|
|
await expandDashboardFolder('General');
|
|
await expandDashboardFolder('Observability');
|
|
await expandDashboardFolder('Usage');
|
|
expectDashboardInDocument('general-data-sources');
|
|
expectDashboardInDocument('general-usage');
|
|
expectDashboardInDocument('observability-backend-errors');
|
|
expectDashboardInDocument('observability-backend-logs');
|
|
expectDashboardInDocument('observability-frontend-errors');
|
|
expectDashboardInDocument('observability-frontend-logs');
|
|
expectDashboardInDocument('usage-data-sources');
|
|
expectDashboardInDocument('usage-stats');
|
|
expectDashboardInDocument('usage-usage-overview');
|
|
expectDashboardInDocument('frontend');
|
|
expectDashboardInDocument('overview');
|
|
expectDashboardInDocument('stats');
|
|
|
|
await searchDashboards('Usage');
|
|
expectDashboardFolderNotInDocument('general-data-sources');
|
|
expectDashboardInDocument('general-usage');
|
|
expectDashboardFolderNotInDocument('observability-backend-errors');
|
|
expectDashboardFolderNotInDocument('observability-backend-logs');
|
|
expectDashboardFolderNotInDocument('observability-frontend-errors');
|
|
expectDashboardFolderNotInDocument('observability-frontend-logs');
|
|
expectDashboardInDocument('usage-data-sources');
|
|
expectDashboardInDocument('usage-stats');
|
|
expectDashboardInDocument('usage-usage-overview');
|
|
expectDashboardFolderNotInDocument('frontend');
|
|
expectDashboardFolderNotInDocument('overview');
|
|
expectDashboardFolderNotInDocument('stats');
|
|
});
|
|
|
|
it('Deduplicates the dashboards list', async () => {
|
|
await toggleDashboards();
|
|
await updateScopes(['dev', 'ops']);
|
|
await expandDashboardFolder('Cardinality Management');
|
|
await expandDashboardFolder('Usage Insights');
|
|
expectDashboardLength('cardinality-management-labels', 1);
|
|
expectDashboardLength('cardinality-management-metrics', 1);
|
|
expectDashboardLength('cardinality-management-overview', 1);
|
|
expectDashboardLength('usage-insights-alertmanager', 1);
|
|
expectDashboardLength('usage-insights-data-sources', 1);
|
|
expectDashboardLength('usage-insights-metrics-ingestion', 1);
|
|
expectDashboardLength('usage-insights-overview', 1);
|
|
expectDashboardLength('usage-insights-query-errors', 1);
|
|
expectDashboardLength('billing-usage', 1);
|
|
});
|
|
|
|
it('Shows a proper message when no scopes are selected', async () => {
|
|
await toggleDashboards();
|
|
expectNoDashboardsNoScopes();
|
|
expectNoDashboardsSearch();
|
|
});
|
|
|
|
it('Does not show the input when there are no dashboards found for scope', async () => {
|
|
await toggleDashboards();
|
|
await updateScopes(['cloud']);
|
|
expectNoDashboardsForScope();
|
|
expectNoDashboardsSearch();
|
|
});
|
|
|
|
it('Shows the input and a message when there are no dashboards found for filter', async () => {
|
|
await toggleDashboards();
|
|
await updateScopes(['mimir']);
|
|
await searchDashboards('unknown');
|
|
expectDashboardsSearch();
|
|
expectNoDashboardsForFilter();
|
|
|
|
await clearNotFound();
|
|
expectDashboardSearchValue('');
|
|
});
|
|
});
|