mirror of
https://github.com/grafana/grafana.git
synced 2025-09-28 14:54:15 +08:00

* adds better aria-label for run and interval buttons * enable refreshPicker to be keyboard navigable * adds support for closing menu using esc key * Fix: weird behaviour when navigating menu items * adds focus trapping to refresh picker * WIP: sanitize time interval values for screen readers to pronounce correctly * WIP: improve sanitizeLabel function to work for all use cases * Chore: move label sanitization to refreshPicker component instead * Chore: add fallback label when ariaLabel prop is not set * Chore: fix some type errors * code cleanup * update tests * rename function to be more descriptive * remove unnecessary type casting * WIP: use cleaner solution * WIP: use parseDuration util instead * use more descriptive aria label * fix: modify parseDuration util to output correct interval unit format * fix: move interval unit format logic to refreshPicker * Chore: add back old refreshPicker e2e selectors for backward compatibility * Fix: improve refresh picker to voice out selected interval option * Fix: use appropriate aria roles and states to aid screen reader a11y * Fix: support dropdown expansion using down arrow key * Chore: use better type construct * Fix: add support for tab to close menu * add more context to the deprecation warning message * Chore: use formatDuration util instead to format interval labels * Chore: small syntax fix * chore: syntax fix * syntax fix * Chore: add back lockfile
67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import React from 'react';
|
|
import { render } from '@testing-library/react';
|
|
import { DashNavTimeControls } from './DashNavTimeControls';
|
|
import { DashboardModel } from '../../state/DashboardModel';
|
|
import { getDashboardModel } from '../../../../../test/helpers/getDashboardModel';
|
|
|
|
describe('DashNavTimeControls', () => {
|
|
let dashboardModel: DashboardModel;
|
|
|
|
beforeEach(() => {
|
|
const json = {
|
|
panels: [
|
|
{
|
|
datasource: null,
|
|
gridPos: {
|
|
h: 3,
|
|
w: 24,
|
|
x: 0,
|
|
y: 8,
|
|
},
|
|
id: 1,
|
|
type: 'welcome',
|
|
},
|
|
],
|
|
refresh: '',
|
|
templating: {
|
|
list: [],
|
|
},
|
|
};
|
|
dashboardModel = getDashboardModel(json);
|
|
});
|
|
|
|
it('renders RefreshPicker with run button in panel view', () => {
|
|
const container = render(
|
|
<DashNavTimeControls dashboard={dashboardModel} onChangeTimeZone={jest.fn()} key="time-controls" />
|
|
);
|
|
expect(container.queryByLabelText(/Refresh dashboard/i)).toBeInTheDocument();
|
|
});
|
|
|
|
it('renders RefreshPicker with interval button in panel view', () => {
|
|
const container = render(
|
|
<DashNavTimeControls dashboard={dashboardModel} onChangeTimeZone={jest.fn()} key="time-controls" />
|
|
);
|
|
expect(container.queryByLabelText(/Choose refresh time interval/i)).toBeInTheDocument();
|
|
});
|
|
|
|
it('should not render RefreshPicker interval button in panel edit', () => {
|
|
const panel: any = { destroy: jest.fn(), isEditing: true };
|
|
dashboardModel.startRefresh = jest.fn();
|
|
dashboardModel.panelInEdit = panel;
|
|
const container = render(
|
|
<DashNavTimeControls dashboard={dashboardModel} onChangeTimeZone={jest.fn()} key="time-controls" />
|
|
);
|
|
expect(container.queryByLabelText(/Choose refresh time interval/i)).not.toBeInTheDocument();
|
|
});
|
|
|
|
it('should render RefreshPicker run button in panel edit', () => {
|
|
const panel: any = { destroy: jest.fn(), isEditing: true };
|
|
dashboardModel.startRefresh = jest.fn();
|
|
dashboardModel.panelInEdit = panel;
|
|
const container = render(
|
|
<DashNavTimeControls dashboard={dashboardModel} onChangeTimeZone={jest.fn()} key="time-controls" />
|
|
);
|
|
expect(container.queryByLabelText(/Refresh dashboard/i)).toBeInTheDocument();
|
|
});
|
|
});
|