1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 18:00:18 +01:00
metamask-extension/ui/components/component-library/button/button.test.tsx
Garrett Bear 66292330fe
Feat/18890/button ts update (#20492)
* button to TS migration

working demo

style props

broken mapping - need switch

working types file

working types

fix dependent imports of Button

variant mapping

working types

fix lint

fix test

fix ButtonSize issue on QuizContent

box fix

test if this works

fix button being used on QuizContent

fix button_variant import

readme fix

* fix button import

* fix primary button as anchor hover

* deprecated

* button to TS migration

fix lint

fix test

* fix rebase issue

* fix rebase issue

* lint fix
2023-08-28 14:42:00 -07:00

162 lines
4.8 KiB
TypeScript

/* eslint-disable jest/require-top-level-describe */
import { render } from '@testing-library/react';
import React from 'react';
import { IconName } from '..';
import { Button } from './button';
import { ButtonSize, ButtonVariant } from '.';
describe('Button', () => {
it('should render button element correctly', () => {
const { getByTestId, getByText, container } = render(
<Button data-testid="button">Button</Button>,
);
expect(getByText('Button')).toBeDefined();
expect(container.querySelector('button')).toBeDefined();
expect(getByTestId('button')).toHaveClass('mm-button-base');
expect(container).toMatchSnapshot();
});
it('should render anchor element correctly', () => {
const { getByTestId, container } = render(
<Button as="a" data-testid="button">
Button
</Button>,
);
expect(getByTestId('button')).toHaveClass('mm-button-base');
const anchor = container.getElementsByTagName('a').length;
expect(anchor).toBe(1);
});
it('should render anchor element correctly by href only being passed', () => {
const { getByTestId, container } = render(
<Button href="/metamask" data-testid="button">
Visit Site
</Button>,
);
expect(getByTestId('button')).toHaveClass('mm-button-base');
const anchor = container.getElementsByTagName('a').length;
expect(anchor).toBe(1);
});
it('should render button as block', () => {
const { getByTestId } = render(<Button block data-testid="block" />);
expect(getByTestId('block')).toHaveClass(`mm-button-base--block`);
});
it('should render with different button types', () => {
const { getByTestId, container } = render(
<>
<Button
variant={ButtonVariant.Primary}
data-testid={ButtonVariant.Primary}
>
Button
</Button>
<Button
variant={ButtonVariant.Secondary}
data-testid={ButtonVariant.Secondary}
>
Button
</Button>
<Button variant={ButtonVariant.Link} data-testid={ButtonVariant.Link}>
Button
</Button>
</>,
);
expect(getByTestId(ButtonVariant.Primary)).toHaveClass(
`mm-button-${ButtonVariant.Primary}`,
);
expect(getByTestId(ButtonVariant.Secondary)).toHaveClass(
`mm-button-${ButtonVariant.Secondary}`,
);
expect(getByTestId(ButtonVariant.Link)).toHaveClass(
`mm-button-${ButtonVariant.Link}`,
);
expect(container).toMatchSnapshot();
});
it('should render with different size classes', () => {
const { getByTestId } = render(
<>
<Button
variant={ButtonVariant.Link}
size={ButtonSize.Inherit}
data-testid={ButtonSize.Inherit}
>
Button {ButtonSize.Inherit}
</Button>
<Button size={ButtonSize.Sm} data-testid={ButtonSize.Sm}>
Button {ButtonSize.Sm}
</Button>
<Button size={ButtonSize.Md} data-testid={ButtonSize.Md}>
Button {ButtonSize.Md}
</Button>
<Button size={ButtonSize.Lg} data-testid={ButtonSize.Lg}>
Button {ButtonSize.Lg}
</Button>
</>,
);
expect(getByTestId(ButtonSize.Inherit)).toHaveClass(
`mm-button-link--size-${ButtonSize.Inherit}`,
);
expect(getByTestId(ButtonSize.Sm)).toHaveClass(
`mm-button-base--size-${ButtonSize.Sm}`,
);
expect(getByTestId(ButtonSize.Md)).toHaveClass(
`mm-button-base--size-${ButtonSize.Md}`,
);
expect(getByTestId(ButtonSize.Lg)).toHaveClass(
`mm-button-base--size-${ButtonSize.Lg}`,
);
});
it('should render with added classname', () => {
const { getByTestId } = render(
<Button data-testid="classname" className="mm-button-base--test">
Button
</Button>,
);
expect(getByTestId('classname')).toHaveClass('mm-button-base--test');
});
it('should render with different button states', () => {
const { getByTestId } = render(
<>
<Button loading data-testid="loading">
Button
</Button>
<Button disabled data-testid="disabled">
Button
</Button>
</>,
);
expect(getByTestId('loading')).toHaveClass(`mm-button-base--loading`);
expect(getByTestId('disabled')).toHaveClass(`mm-button-base--disabled`);
});
it('should render with icon', () => {
const { getByTestId } = render(
<Button
data-testid="icon"
startIconName={IconName.AddSquare}
startIconProps={{ 'data-testid': 'start-button-icon' }}
>
Button
</Button>,
);
expect(getByTestId('start-button-icon')).toBeDefined();
});
});
it('should render as danger', () => {
const { getByTestId } = render(
<>
<Button danger data-testid="danger">
Button Danger
</Button>
</>,
);
expect(getByTestId('danger')).toHaveClass('mm-button-primary--type-danger');
});