import axe from '../../../../axe-helper';
import React from 'react';
import { render, screen } from '@testing-library/react';
import NumberText from './NumberText';
import 'jest-styled-components';
const renderComponent = (props = {}) =>
render();
describe('', () => {
it('renders without errors', async () => {
const { container } = renderComponent({
formatterOptions: {
style: 'currency',
currency: 'GBP',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
},
});
expect(container).toMatchSnapshot();
});
it('should position the numerical value to the right and vertically align the text in the center', () => {
const value = '100,000';
const { container } = renderComponent({ numberPosition: 'right' });
expect(container.firstChild).toHaveStyleRule('flex-direction', 'row');
expect(container.firstChild).toHaveStyleRule('justify-content', 'space-between');
expect(container.firstChild).toHaveStyleRule('align-items', 'center');
expect(screen.getByText(value)).toHaveStyleRule('order', '2');
});
it('should position the numerical value to the left and vertically align the text in the center', () => {
const value = '100,000';
const { container } = renderComponent({ numberPosition: 'left' });
expect(container.firstChild).toHaveStyleRule('flex-direction', 'row');
expect(container.firstChild).toHaveStyleRule('justify-content', 'space-between');
expect(container.firstChild).toHaveStyleRule('align-items', 'center');
expect(screen.getByText(value)).toHaveStyleRule('order', '1');
});
it('should position the numerical value at the top and vertically align the text in the center', () => {
const value = '100,000';
const { container } = renderComponent({ numberPosition: 'top' });
expect(container.firstChild).toHaveStyleRule('flex-direction', 'column');
expect(container.firstChild).toHaveStyleRule('justify-content', 'center');
expect(screen.getByText(value)).toHaveStyleRule('order', '1');
});
it('should position the numerical value at the bottom and vertically align the text in the center', () => {
const value = '100,000';
const { container } = renderComponent({ numberPosition: 'bottom' });
expect(container.firstChild).toHaveStyleRule('flex-direction', 'column');
expect(container.firstChild).toHaveStyleRule('justify-content', 'center');
expect(screen.getByText(value)).toHaveStyleRule('order', '2');
});
it('renders the fallback option', () => {
const fallback = 'N/A';
render();
expect(screen.getByText(fallback)).toHaveTextContent('N/A');
});
it('renders the value when it is zero', () => {
const value = '0';
render();
expect(screen.getByText(value)).toHaveTextContent('0');
});
it('renders the value when it is negative', () => {
const value = '-10';
render();
expect(screen.getByText(value)).toHaveTextContent('-10');
});
it('should render the number with semiBold', () => {
const value = '100,000';
renderComponent({ numberPosition: 'top', semiBold: true });
expect(screen.getByText(value)).toHaveStyleRule('font-weight', '600');
});
it('renders without a11y violations', async () => {
const { container } = renderComponent();
const results = await axe(container.innerHTML);
expect(results).toHaveNoViolations();
});
});