import React from 'react';
import { fireEvent, render } from '../../test-utils';
import HorizontalTabs from '../HorizontalTabs';
import { Size } from '../../types';
import 'jest-styled-components';
import '@testing-library/jest-dom';
const tabs = [
{
value: 'Tab1',
selected: false,
to: 'tab1',
},
{
value: 'Tab2',
selected: true,
to: 'tab2',
},
{
value: 'Tab3',
selected: false,
to: 'tab3',
disabled: true,
},
];
describe('', () => {
it('Renders tabs component', async () => {
const { queryByTestId } = render( {}}>);
expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
expect(queryByTestId('horizontal-tabs-container')?.querySelectorAll('[data-testid*="tab_"]')).toHaveLength(3);
});
it('Renders tabs component with side fill', async () => {
const { queryByTestId } = render( {}}>);
expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
expect(queryByTestId('horizontal-tabs-container')?.querySelector('.fill')).toBeTruthy();
});
it('Renders tabs component with no tabs provided', async () => {
const { queryByTestId } = render( {}}>);
expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
expect(queryByTestId('horizontal-tabs-container')?.querySelectorAll('[data-testid*="tab_"]')).toHaveLength(0);
});
it('Check disabled tabs rendered correctly', async () => {
const { queryByTestId } = render( {}}>);
const disabledTab = tabs.find((t) => t.disabled);
const notDisabledTab = tabs.find((t) => !t.disabled);
expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
const disabledTabElem = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_${disabledTab?.value}"]`);
const notDisabledTabElem = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_${notDisabledTab?.value}"]`);
//check disabled/non-disabled rendered
expect(disabledTabElem).toBeTruthy();
expect(notDisabledTabElem).toBeTruthy();
//check tab index prop set correct
expect(disabledTabElem).toHaveAttribute('tabindex', '-1');
expect(notDisabledTabElem).not.toHaveClass('disabled');
});
it('Check tab change callback called on tab click', async () => {
const tabChangeFn = jest.fn();
const { queryByTestId } = render();
const notDisabledTab = tabs.find((t) => !t.disabled);
const notDisabledTabElem = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_${notDisabledTab?.value}"]`);
//fire click tab click event
fireEvent(
notDisabledTabElem as HTMLButtonElement,
new MouseEvent('click', {
bubbles: true,
cancelable: true,
}),
);
//check has been called
expect(tabChangeFn).toHaveBeenCalledTimes(1);
});
it('Check tab width calculed correctly when fullWidth prop set', async () => {
const { queryByTestId, queryByText } = render( {}}>);
const tabElement = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_Tab1"]`) as HTMLButtonElement;
expect(tabElement).toBeTruthy();
expect(tabElement.style).toHaveProperty('width', `${100 / tabs.length}%`);
});
});