import { render, screen } from '@testing-library/react';
import { Compass } from '../Compass';
import styles from '@patternfly/react-styles/css/components/Compass/compass';
test('Renders without children', () => {
render(
);
expect(screen.getByTestId('test-compass').firstChild).toBeVisible();
});
test('Renders with custom class name when className prop is provided', () => {
render();
expect(screen.getByTestId('compass')).toHaveClass('custom-class');
});
test('Renders with default compass class', () => {
render();
expect(screen.getByTestId('compass')).toHaveClass(styles.compass);
});
test('Renders header content when provided', () => {
render(Header content} />);
expect(screen.getByText('Header content')).toBeVisible();
});
test('Renders sidebar start content when provided', () => {
render(Sidebar start} />);
expect(screen.getByText('Sidebar start')).toBeVisible();
});
test('Renders main content when provided', () => {
render(Main content} />);
expect(screen.getByText('Main content')).toBeVisible();
});
test('Renders sidebar end content when provided', () => {
render(Sidebar end} />);
expect(screen.getByText('Sidebar end')).toBeVisible();
});
test('Renders footer content when provided', () => {
render(Footer content} />);
expect(screen.getByText('Footer content')).toBeVisible();
});
test('Renders header with expanded class when isHeaderExpanded is true', () => {
render(Header} isHeaderExpanded />);
expect(screen.getByText('Header').parentElement).toHaveClass('pf-m-expanded');
});
test('Renders header without expanded class and with inert when isHeaderExpanded is false', () => {
render(Header} isHeaderExpanded={false} />);
const headerElement = screen.getByText('Header').parentElement;
expect(headerElement).not.toHaveClass('pf-m-expanded');
expect(headerElement).toHaveAttribute('inert');
});
test('Renders sidebar start with expanded class when isSidebarStartExpanded is true', () => {
render(Sidebar start} isSidebarStartExpanded />);
expect(screen.getByText('Sidebar start').parentElement).toHaveClass('pf-m-expanded');
});
test('Renders sidebar start without expanded class and with inert when isSidebarStartExpanded is false', () => {
render(Sidebar start} isSidebarStartExpanded={false} />);
const sidebarElement = screen.getByText('Sidebar start').parentElement;
expect(sidebarElement).not.toHaveClass('pf-m-expanded');
expect(sidebarElement).toHaveAttribute('inert');
});
test('Renders sidebar end with expanded class when isSidebarEndExpanded is true', () => {
render(Sidebar end} isSidebarEndExpanded />);
expect(screen.getByText('Sidebar end').parentElement).toHaveClass('pf-m-expanded');
});
test('Renders sidebar end without expanded class and with inert when isSidebarEndExpanded is false', () => {
render(Sidebar end} isSidebarEndExpanded={false} />);
const sidebarElement = screen.getByText('Sidebar end').parentElement;
expect(sidebarElement).not.toHaveClass('pf-m-expanded');
expect(sidebarElement).toHaveAttribute('inert');
});
test('Renders footer with expanded class when isFooterExpanded is true', () => {
render(Footer} isFooterExpanded />);
expect(screen.getByText('Footer').parentElement).toHaveClass('pf-m-expanded');
});
test('Renders footer without expanded class and with inert when isFooterExpanded is false', () => {
render(Footer} isFooterExpanded={false} />);
const footerElement = screen.getByText('Footer').parentElement;
expect(footerElement).not.toHaveClass('pf-m-expanded');
expect(footerElement).toHaveAttribute('inert');
});
test('Renders with drawer when drawerContent is provided', () => {
render(Drawer content} />);
expect(screen.getByText('Drawer content')).toBeVisible();
});
test('Renders with additional props spread to the component', () => {
render();
expect(screen.getByTestId('compass')).toHaveAccessibleName('Test label');
});
test('Renders with default expansion states', () => {
render(
Header}
sidebarStart={Sidebar start
}
sidebarEnd={Sidebar end
}
footer={Footer
}
>
Test
);
expect(screen.getByText('Header').parentElement).toHaveClass('pf-m-expanded');
expect(screen.getByText('Sidebar start').parentElement).toHaveClass('pf-m-expanded');
expect(screen.getByText('Sidebar end').parentElement).toHaveClass('pf-m-expanded');
expect(screen.getByText('Footer').parentElement).toHaveClass('pf-m-expanded');
});
test('Matches the snapshot with basic layout', () => {
const { asFragment } = render(
Header}
sidebarStart={Sidebar start
}
main={Main content
}
sidebarEnd={Sidebar end
}
footer={Footer
}
/>
);
expect(asFragment()).toMatchSnapshot();
});
test('Matches the snapshot with drawer', () => {
const { asFragment } = render(
Drawer content}
drawerProps={{ isExpanded: true }}
header={Header
}
sidebarStart={Sidebar start
}
main={Main content
}
sidebarEnd={Sidebar end
}
footer={Footer
}
/>
);
expect(asFragment()).toMatchSnapshot();
});
test(`Renders with ${styles.modifiers.docked} class when dock is passed`, () => {
render(Dock content} data-testid="compass" />);
expect(screen.getByTestId('compass')).toHaveClass(styles.modifiers.docked);
});
test(`Does not render with ${styles.modifiers.docked} class when dock is not passed`, () => {
render();
expect(screen.getByTestId('compass')).not.toHaveClass(styles.modifiers.docked);
});
test('Does not render masthead content when dock is not passed', () => {
render();
expect(screen.queryByText('Masthead content')).not.toBeInTheDocument();
});
test('Renders masthead content when dock is passed', () => {
render(Masthead content} dock={Dock content
} />);
expect(screen.getByText('Masthead content')).toBeVisible();
});
test(`Renders dock with ${styles.modifiers.expanded} class when isDockExpanded is true`, () => {
render();
expect(screen.getByText('Dock content')).toHaveClass(styles.modifiers.expanded);
});
test(`Renders dock without ${styles.modifiers.expanded} class when isDockExpanded is false`, () => {
render();
expect(screen.getByText('Dock content')).not.toHaveClass(styles.modifiers.expanded);
});
test(`Renders dock with ${styles.modifiers.textExpanded} class when isDockTextExpanded is true`, () => {
render();
expect(screen.getByText('Dock content')).toHaveClass(styles.modifiers.textExpanded);
});
test(`Renders dock without ${styles.modifiers.textExpanded} class when isDockTextExpanded is false`, () => {
render();
expect(screen.getByText('Dock content')).not.toHaveClass(styles.modifiers.textExpanded);
});