import { render as rtlRender, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { TestProvider } from 'test/helpers/TestProvider'; import { assertIsDefined } from 'test/helpers/asserts'; import { selectors } from '@grafana/e2e-selectors'; import { config } from '@grafana/runtime'; import { sharedWithMeFolder, wellFormedDashboard, wellFormedEmptyFolder, wellFormedFolder, } from '../fixtures/dashboardsTreeItem.fixture'; import { SelectionState } from '../types'; import { DashboardsTree } from './DashboardsTree'; function render(...[ui, options]: Parameters) { rtlRender({ui}, options); } describe('browse-dashboards DashboardsTree', () => { const WIDTH = 800; const HEIGHT = 600; const folder = wellFormedFolder(1); const emptyFolderIndicator = wellFormedEmptyFolder(); const dashboard = wellFormedDashboard(2); const noop = () => {}; const isSelected = () => SelectionState.Unselected; const allItemsAreLoaded = () => true; const requestLoadMore = () => Promise.resolve(); beforeAll(() => { config.sharedWithMeFolderUID = 'sharedwithme'; }); it('renders a dashboard item', () => { render( ); expect(screen.queryByText(dashboard.item.title)).toBeInTheDocument(); expect(screen.queryByText(assertIsDefined(dashboard.item.tags)[0])).toBeInTheDocument(); expect(screen.getByTestId(selectors.pages.BrowseDashboards.table.checkbox(dashboard.item.uid))).toBeInTheDocument(); }); it('does not render checkbox when disabled', () => { render( ); expect( screen.queryByTestId(selectors.pages.BrowseDashboards.table.checkbox(dashboard.item.uid)) ).not.toBeInTheDocument(); }); it('renders a folder item', () => { render( ); expect(screen.queryByText(folder.item.title)).toBeInTheDocument(); }); it('renders a folder link', () => { render( ); expect(screen.queryByText(folder.item.title)).toHaveAttribute('href', folder.item.url); }); it("doesn't link to the sharedwithme pseudo-folder", () => { const sharedWithMe = sharedWithMeFolder(2); render( ); expect(screen.queryByText(sharedWithMe.item.title)).not.toHaveAttribute('href'); }); it("doesn't render a checkbox for the sharedwithme pseudo-folder", () => { const sharedWithMe = sharedWithMeFolder(2); render( ); expect( screen.queryByTestId(selectors.pages.BrowseDashboards.table.checkbox(sharedWithMe.item.uid)) ).not.toBeInTheDocument(); }); it('calls onFolderClick when a folder button is clicked', async () => { const handler = jest.fn(); render( ); const folderButton = screen.getByLabelText(`Expand folder ${folder.item.title}`); await userEvent.click(folderButton); expect(handler).toHaveBeenCalledWith(folder.item.uid, true); }); it('renders empty folder indicators', () => { render( ); expect(screen.queryByText('No items')).toBeInTheDocument(); }); });