import { render as rtlRender, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { TestProvider } from 'test/helpers/TestProvider'; import { FolderDTO } from 'app/types'; import { mockFolderDTO } from '../fixtures/folder.fixture'; import CreateNewButton from './CreateNewButton'; const mockParentFolder = mockFolderDTO(); function render(...[ui, options]: Parameters) { rtlRender({ui}, options); } async function renderAndOpen(folder?: FolderDTO) { render(); const newButton = screen.getByText('New'); await userEvent.click(newButton); } describe('NewActionsButton', () => { it('should display the correct urls with a given parent folder', async () => { await renderAndOpen(mockParentFolder); expect(screen.getByRole('link', { name: 'New dashboard' })).toHaveAttribute( 'href', `/dashboard/new?folderUid=${mockParentFolder.uid}` ); expect(screen.getByRole('link', { name: 'Import' })).toHaveAttribute( 'href', `/dashboard/import?folderUid=${mockParentFolder.uid}` ); }); it('should display urls without params when there is no parent folder', async () => { await renderAndOpen(); expect(screen.getByRole('link', { name: 'New dashboard' })).toHaveAttribute('href', '/dashboard/new'); expect(screen.getByRole('link', { name: 'Import' })).toHaveAttribute('href', '/dashboard/import'); }); it('clicking the "New folder" button opens the drawer', async () => { render(); const newButton = screen.getByText('New'); await userEvent.click(newButton); await userEvent.click(screen.getByText('New folder')); const drawer = screen.getByRole('dialog', { name: 'Drawer title New folder' }); expect(drawer).toBeInTheDocument(); expect(within(drawer).getByRole('heading', { name: 'New folder' })).toBeInTheDocument(); expect(within(drawer).getByText(`Location: ${mockParentFolder.title}`)).toBeInTheDocument(); }); it('should only render dashboard items when folder creation is disabled', async () => { render(); const newButton = screen.getByText('New'); await userEvent.click(newButton); expect(screen.getByRole('link', { name: 'New dashboard' })).toBeInTheDocument(); expect(screen.getByText('Import')).toBeInTheDocument(); expect(screen.queryByText('New folder')).not.toBeInTheDocument(); }); it('should only render folder item when dashboard creation is disabled', async () => { render(); const newButton = screen.getByText('New'); await userEvent.click(newButton); expect(screen.queryByText('New dashboard')).not.toBeInTheDocument(); expect(screen.queryByText('Import')).not.toBeInTheDocument(); expect(screen.getByText('New folder')).toBeInTheDocument(); }); });