Skip to content

Commit ac33466

Browse files
committed
Added tests, updated props
1 parent 10b8bcd commit ac33466

6 files changed

Lines changed: 190 additions & 20 deletions

File tree

packages/react-core/src/components/Button/__tests__/Button.test.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,28 @@ describe('Favorite button', () => {
555555
});
556556
});
557557

558+
describe('Dock variant', () => {
559+
test(`Renders with class ${styles.modifiers.dock} when isDock = true`, () => {
560+
render(<Button isDock>Dock Button</Button>);
561+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.dock);
562+
});
563+
564+
test(`Does not render with class ${styles.modifiers.dock} when isDock is not passed`, () => {
565+
render(<Button>Button</Button>);
566+
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.dock);
567+
});
568+
569+
test(`Renders with class ${styles.modifiers.textExpanded} when isTextExpanded = true`, () => {
570+
render(<Button isTextExpanded>Text Expanded Button</Button>);
571+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.textExpanded);
572+
});
573+
574+
test(`Does not render with class ${styles.modifiers.textExpanded} when isTextExpanded is not passed`, () => {
575+
render(<Button>Button</Button>);
576+
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.textExpanded);
577+
});
578+
});
579+
558580
test(`Renders basic button`, () => {
559581
const { asFragment } = render(<Button aria-label="basic button">Basic Button</Button>);
560582
expect(asFragment()).toMatchSnapshot();

packages/react-core/src/components/Masthead/__tests__/Masthead.test.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,29 @@ describe('MastheadLogo', () => {
127127

128128
expect(asFragment()).toMatchSnapshot();
129129
});
130+
131+
test(`Renders with ${styles.modifiers.compact} class when isCompact is true`, () => {
132+
render(
133+
<MastheadLogo isCompact data-testid="compact-logo">
134+
test
135+
</MastheadLogo>
136+
);
137+
expect(screen.getByTestId('compact-logo')).toHaveClass(styles.modifiers.compact);
138+
});
139+
140+
test(`Does not render with ${styles.modifiers.compact} class when isCompact is false`, () => {
141+
render(
142+
<MastheadLogo isCompact={false} data-testid="logo">
143+
test
144+
</MastheadLogo>
145+
);
146+
expect(screen.getByTestId('logo')).not.toHaveClass(styles.modifiers.compact);
147+
});
148+
149+
test(`Does not render with ${styles.modifiers.compact} class when isCompact is not passed`, () => {
150+
render(<MastheadLogo data-testid="logo">test</MastheadLogo>);
151+
expect(screen.getByTestId('logo')).not.toHaveClass(styles.modifiers.compact);
152+
});
130153
});
131154

132155
describe('MastheadContent', () => {

packages/react-core/src/components/MenuToggle/__tests__/MenuToggle.test.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,23 @@ test('Does not render custom icon when icon prop and isSettings are passed', ()
138138
);
139139
expect(screen.queryByText('Custom icon')).not.toBeInTheDocument();
140140
});
141+
142+
test(`Renders with class ${styles.modifiers.dock} when isDock is passed`, () => {
143+
render(<MenuToggle isDock>Dock Toggle</MenuToggle>);
144+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.dock);
145+
});
146+
147+
test(`Does not render with class ${styles.modifiers.dock} when isDock is not passed`, () => {
148+
render(<MenuToggle>Toggle</MenuToggle>);
149+
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.dock);
150+
});
151+
152+
test(`Renders with class ${styles.modifiers.textExpanded} when isTextExpanded is passed`, () => {
153+
render(<MenuToggle isTextExpanded>Text Expanded Toggle</MenuToggle>);
154+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.textExpanded);
155+
});
156+
157+
test(`Does not render with class ${styles.modifiers.textExpanded} when isTextExpanded is not passed`, () => {
158+
render(<MenuToggle>Toggle</MenuToggle>);
159+
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.textExpanded);
160+
});

packages/react-core/src/components/Nav/__tests__/Nav.test.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,4 +274,34 @@ describe('Nav', () => {
274274
);
275275
expect(screen.getByTestId('docked-nav')).toHaveClass(styles.modifiers.docked);
276276
});
277+
278+
test(`Renders with ${styles.modifiers.textExpanded} class when isTextExpanded is true`, () => {
279+
renderNav(
280+
<Nav isTextExpanded data-testid="text-expanded-nav">
281+
<NavList>
282+
{props.items.map((item) => (
283+
<NavItem to={item.to} key={item.to}>
284+
{item.label}
285+
</NavItem>
286+
))}
287+
</NavList>
288+
</Nav>
289+
);
290+
expect(screen.getByTestId('text-expanded-nav')).toHaveClass(styles.modifiers.textExpanded);
291+
});
292+
293+
test(`Does not render with ${styles.modifiers.textExpanded} class when isTextExpanded is not passed`, () => {
294+
renderNav(
295+
<Nav data-testid="nav">
296+
<NavList>
297+
{props.items.map((item) => (
298+
<NavItem to={item.to} key={item.to}>
299+
{item.label}
300+
</NavItem>
301+
))}
302+
</NavList>
303+
</Nav>
304+
);
305+
expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.textExpanded);
306+
});
277307
});

packages/react-core/src/components/Page/Page.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
2121
/** Additional classes added to the page layout */
2222
className?: string;
2323
/** @beta Indicates the layout variant */
24-
variant?: 'default' | 'docked';
25-
/** @beta Flag indicating the docked nav is expanded on mobile. Only applies when variant is docked. */
24+
variant?: 'default' | 'dock';
25+
/** @beta Flag indicating the dock nav is expanded on mobile. Only applies when variant is dock. */
2626
isDockExpanded?: boolean;
27-
/** @beta Flag indicating the docked nav should display text. Only applies when variant is docked. */
27+
/** @beta Flag indicating the dock nav should display text. Only applies when variant is dock. */
2828
isDockTextExpanded?: boolean;
29-
/** Masthead component (e.g. <Masthead />) */
29+
/** The horizontal masthead content (e.g. <Masthead />). When using the dock variant, this content will only render at mobile viewports. */
3030
masthead?: React.ReactNode;
31-
dockedMasthead?: React.ReactNode;
31+
/** @beta Content to render in the vertical dock when variant of dock is used. At mobile viewports, this content will be replaced with the content passed to masthead. */
32+
dockContent?: React.ReactNode;
3233
/** Sidebar component for a side nav, recommended to be a PageSidebar. If set to null, the page grid layout
3334
* will render without a sidebar.
3435
*/
@@ -240,7 +241,7 @@ class Page extends Component<PageProps, PageState> {
240241
isDockExpanded = false,
241242
isDockTextExpanded = false,
242243
masthead,
243-
dockedMasthead,
244+
dockContent,
244245
sidebar,
245246
notificationDrawer,
246247
isNotificationDrawerExpanded,
@@ -347,7 +348,7 @@ class Page extends Component<PageProps, PageState> {
347348
{...rest}
348349
className={css(
349350
styles.page,
350-
variant === 'docked' && styles.modifiers.dock,
351+
variant === 'dock' && styles.modifiers.dock,
351352
width !== null && height !== null && 'pf-m-resize-observer',
352353
width !== null && `pf-m-breakpoint-${getBreakpoint(width)}`,
353354
height !== null && `pf-m-height-breakpoint-${getVerticalBreakpoint(height)}`,
@@ -356,7 +357,7 @@ class Page extends Component<PageProps, PageState> {
356357
)}
357358
>
358359
{skipToContent}
359-
{variant === 'docked' ? (
360+
{variant === 'dock' ? (
360361
<>
361362
{masthead}
362363
<div
@@ -366,7 +367,7 @@ class Page extends Component<PageProps, PageState> {
366367
isDockTextExpanded && styles.modifiers.textExpanded
367368
)}
368369
>
369-
<div className={css(styles.pageDockMain)}>{dockedMasthead}</div>
370+
<div className={css(styles.pageDockMain)}>{dockContent}</div>
370371
</div>
371372
</>
372373
) : (

packages/react-core/src/components/Page/__tests__/Page.test.tsx

Lines changed: 85 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -389,28 +389,102 @@ describe('Page', () => {
389389

390390
expect(screen.getByRole('main').parentElement).not.toHaveClass(styles.modifiers.noFill);
391391
});
392+
});
393+
394+
describe('Page dock variant', () => {
395+
test(`Does not render with dock classes when variant is default`, () => {
396+
render(<Page {...props} variant="default" data-testid="page"></Page>);
397+
398+
const page = screen.getByTestId('page');
399+
expect(page).not.toHaveClass(styles.modifiers.dock);
400+
expect(page.querySelector(styles.pageDock)).not.toBeInTheDocument();
401+
expect(page.querySelector(styles.pageDockMain)).not.toBeInTheDocument();
402+
});
403+
404+
test(`Does not render with dock classes when variant is not passed`, () => {
405+
render(<Page data-testid="page"></Page>);
406+
407+
const page = screen.getByTestId('page');
408+
expect(page).not.toHaveClass(styles.modifiers.dock);
409+
expect(page.querySelector(styles.pageDock)).not.toBeInTheDocument();
410+
expect(page.querySelector(styles.pageDockMain)).not.toBeInTheDocument();
411+
});
392412

393-
test(`Renders with ${styles.modifiers.dock} class when variant is docked`, () => {
394-
render(<Page {...props} variant="docked" data-testid="page"></Page>);
413+
test(`Renders with ${styles.modifiers.dock} class when variant is dock`, () => {
414+
render(<Page {...props} variant="dock" data-testid="page"></Page>);
395415

396416
expect(screen.getByTestId('page')).toHaveClass(styles.modifiers.dock);
397417
});
398418

399-
test(`Does not render with ${styles.modifiers.dock} class when variant is default`, () => {
400-
render(<Page {...props} variant="default" data-testid="page"></Page>);
419+
test('Renders dock content when dockContent and variant="dock" is passed', () => {
420+
render(<Page variant="dock" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
401421

402-
expect(screen.getByTestId('page')).not.toHaveClass(styles.modifiers.dock);
422+
expect(screen.getByText('Dock content')).toBeInTheDocument();
403423
});
404424

405-
test(`Does not render with ${styles.modifiers.dock} class when variant is not passed`, () => {
406-
render(<Page data-testid="page"></Page>);
407-
expect(screen.getByTestId('page')).not.toHaveClass(styles.modifiers.dock);
425+
test('Renders masthead content when masthead and variant="dock" is passed', () => {
426+
render(
427+
<Page variant="dock" dockContent={<>Dock content</>} masthead={<>Masthead content</>} data-testid="page"></Page>
428+
);
429+
430+
expect(screen.getByText('Masthead content')).toBeInTheDocument();
431+
});
432+
433+
test(`Renders with ${styles.pageDock} wrapper when variant is dock`, () => {
434+
render(<Page variant="dock" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
435+
436+
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
437+
expect(pageDock).toBeInTheDocument();
438+
});
439+
440+
test(`Does not render with ${styles.modifiers.expanded} by default when variant is dock`, () => {
441+
render(<Page variant="dock" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
442+
443+
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
444+
expect(pageDock).not.toHaveClass(styles.modifiers.expanded);
445+
});
446+
447+
test(`Does not render with ${styles.modifiers.textExpanded} by default when variant is dock`, () => {
448+
render(<Page variant="dock" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
449+
450+
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
451+
expect(pageDock).not.toHaveClass(styles.modifiers.textExpanded);
452+
});
453+
454+
test(`Renders with ${styles.modifiers.expanded} when isDockExpanded is true and variant is dock`, () => {
455+
render(
456+
<Page
457+
variant="dock"
458+
isDockExpanded
459+
dockContent={<>Dock content</>}
460+
masthead={<>Masthead</>}
461+
data-testid="page"
462+
></Page>
463+
);
464+
465+
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
466+
expect(pageDock).toHaveClass(styles.modifiers.expanded);
467+
});
468+
469+
test(`Renders with ${styles.modifiers.textExpanded} when isDockTextExpanded is true and variant is dock`, () => {
470+
render(
471+
<Page
472+
variant="dock"
473+
isDockTextExpanded
474+
dockContent={<>Dock content</>}
475+
masthead={<>Masthead</>}
476+
data-testid="page"
477+
></Page>
478+
);
479+
480+
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
481+
expect(pageDock).toHaveClass(styles.modifiers.textExpanded);
408482
});
409483

410-
test(`Renders with ${styles.pageDockMain} wrapper when variant is docked`, () => {
411-
render(<Page variant="docked" masthead={<>Masthead</>} data-testid="page"></Page>);
484+
test(`Renders with ${styles.pageDockMain} wrapper when variant is dock`, () => {
485+
render(<Page variant="dock" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
412486

413-
const pageDockMain = screen.getByText('Masthead').closest(`.${styles.pageDockMain}`);
487+
const pageDockMain = screen.getByText('Dock content').closest(`.${styles.pageDockMain}`);
414488
expect(pageDockMain).toBeInTheDocument();
415489
});
416490
});

0 commit comments

Comments
 (0)