import { render, screen } from '@testing-library/react';
import { AdHocFiltersVariable, sceneGraph, SceneObjectRef, SceneVariableSet } from '@grafana/scenes';
import { DataTrail } from './DataTrail';
import { DataTrailsHome } from './DataTrailsHome';
import { getTrailStore } from './TrailStore/TrailStore';
import { VAR_FILTERS } from './shared';
jest.mock('./TrailStore/TrailStore', () => ({
getTrailStore: jest.fn(),
}));
describe('DataTrailsHome', () => {
let scene: DataTrailsHome;
beforeEach(() => {
const filtersVariable = new AdHocFiltersVariable({ name: VAR_FILTERS });
(getTrailStore as jest.Mock).mockImplementation(() => ({
bookmarks: [],
recent: [],
}));
scene = new DataTrailsHome({
$variables: new SceneVariableSet({
variables: [filtersVariable],
}),
});
});
it('renders the start button', () => {
render();
expect(screen.getByText("Let's start!")).toBeInTheDocument();
});
it('renders the learn more button and checks its href', () => {
render();
const learnMoreButton = screen.getByText('Learn more');
expect(learnMoreButton).toBeInTheDocument();
expect(learnMoreButton.closest('a')).toHaveAttribute(
'href',
'https://grafana.com/docs/grafana/latest/explore/explore-metrics/'
);
});
it('does not show recent metrics and bookmarks headers for first time user', () => {
render();
expect(screen.queryByText('Or view a recent exploration')).not.toBeInTheDocument();
expect(screen.queryByText('Or view bookmarks')).not.toBeInTheDocument();
expect(screen.queryByRole('separator')).not.toBeInTheDocument();
});
it('truncates singular long label in recent explorations', () => {
const trail = new DataTrail({});
function getFilterVar() {
const variable = sceneGraph.lookupVariable(VAR_FILTERS, trail);
if (variable instanceof AdHocFiltersVariable) {
return variable;
}
throw new Error('getFilterVar failed');
}
const filtersVariable = getFilterVar();
const longLabel = 'averylongalskdjlalsjflajkfklsajdfalskjdflkasjdflkadjf';
filtersVariable.setState({
filters: [{ key: 'zone', operator: '=', value: longLabel }],
});
const trailWithResolveMethod = new SceneObjectRef(trail);
(getTrailStore as jest.Mock).mockImplementation(() => ({
bookmarks: [],
recent: [trailWithResolveMethod],
}));
render();
expect(screen.getByText('...', { exact: false })).toBeInTheDocument();
});
});