1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
2.4 KiB

import React from 'react';
import { fireEvent, render, screen } from '@testing-library/react';
import { selectors } from '@grafana/e2e-selectors';
import { Props, SearchResults } from './SearchResults';
import { generalFolder, searchResults } from '../testData';
import { SearchLayout } from '../types';
beforeEach(() => {
jest.clearAllMocks();
});
const setup = (propOverrides?: Partial<Props>) => {
const props: Props = {
results: searchResults,
onTagSelected: (name: string) => {},
onToggleSection: () => {},
editable: false,
layout: SearchLayout.Folders,
};
Object.assign(props, propOverrides);
render(<SearchResults {...props} />);
};
describe('SearchResults', () => {
it('should render result items', () => {
setup();
expect(screen.getAllByTestId(selectors.components.Search.sectionV2)).toHaveLength(2);
});
it('should render section items for expanded section', () => {
setup();
expect(screen.getAllByTestId(selectors.components.Search.collapseFolder('0'))).toHaveLength(1);
expect(screen.getAllByTestId(selectors.components.Search.itemsV2)).toHaveLength(1);
expect(screen.getAllByTestId(selectors.components.Search.dashboardItem('Test 1'))).toHaveLength(1);
expect(screen.getAllByTestId(selectors.components.Search.dashboardItem('Test 2'))).toHaveLength(1);
});
it('should not render checkboxes for non-editable results', () => {
setup({ editable: false });
expect(screen.queryAllByRole('checkbox')).toHaveLength(0);
});
it('should render checkboxes for editable results', () => {
setup({ editable: true });
expect(screen.getAllByRole('checkbox')).toHaveLength(4);
});
it('should collapse folder item list on header click', () => {
const mockOnToggleSection = jest.fn();
setup({ onToggleSection: mockOnToggleSection });
fireEvent.click(screen.getByTestId(selectors.components.Search.collapseFolder('0')));
expect(mockOnToggleSection).toHaveBeenCalledTimes(1);
expect(mockOnToggleSection).toHaveBeenCalledWith(generalFolder);
});
it('should not throw an error if the search results have an empty title', () => {
const mockOnToggleSection = jest.fn();
const searchResultsEmptyTitle = searchResults.slice();
searchResultsEmptyTitle[0].title = '';
expect(() => {
setup({ results: searchResultsEmptyTitle, onToggleSection: mockOnToggleSection });
}).not.toThrowError();
});
});