grafana_bak/public/app/features/scopes/tests/dashboardsList.test.ts
2025-04-01 10:38:02 +09:00

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('');
});
});