import React from 'react';
import { act, render } from '@testing-library/react';
import 'regenerator-runtime';
import '@testing-library/jest-dom';
jest.mock('@times-components/image', () => ({
Placeholder: () => <>Placeholder>
}));
const mockInitSettings = jest.fn();
const mockInitStyleSheet = jest.fn();
const mockInitComponent = jest.fn();
const mockInitElement = jest.fn(() => {
const element = document.createElement('div');
element.appendChild(document.createTextNode('Widget'));
return element;
});
jest.mock('../../../utils/config', () => ({
initSettings: mockInitSettings,
initStyleSheet: mockInitStyleSheet,
initScript: () => new Promise(resolve => resolve({})),
initElement: mockInitElement,
initComponent: mockInitComponent
}));
import { OptaFootballStatsPageView } from '../OptaFootballStatsPageView';
afterEach(() => {
jest.clearAllMocks();
});
describe('OptaFootballStatsPageView', () => {
it('should render correctly', async () => {
const { asFragment } = render(
);
await act(async () => {
await Promise.resolve();
});
expect(mockInitSettings).toHaveBeenCalledTimes(1);
expect(mockInitStyleSheet).toHaveBeenCalledTimes(1);
expect(mockInitComponent).toHaveBeenCalledTimes(1);
expect(mockInitElement).toHaveBeenCalledWith(
'opta-widget',
expect.objectContaining({
sport: 'football',
widget: 'player_ranking',
season: '2025',
competition: '8'
})
);
expect(asFragment()).toMatchSnapshot();
});
it('should render with isApp prop', async () => {
const { asFragment } = render(
);
await act(async () => {
await Promise.resolve();
});
expect(asFragment()).toMatchSnapshot();
});
it('should show placeholder before widget loads', () => {
const { getByText } = render(
);
expect(getByText('Placeholder')).toBeInTheDocument();
});
it('should hide placeholder after widget loads', async () => {
const { queryByText } = render(
);
await act(async () => {
await Promise.resolve();
});
expect(queryByText('Placeholder')).not.toBeInTheDocument();
});
it('should render with default isApp as false', async () => {
const { container } = render(
);
await act(async () => {
await Promise.resolve();
});
expect(container).toBeTruthy();
expect(mockInitSettings).toHaveBeenCalled();
expect(mockInitStyleSheet).toHaveBeenCalledWith('football');
});
it('should pass correct widget configuration to initElement', async () => {
render();
await act(async () => {
await Promise.resolve();
});
expect(mockInitElement).toHaveBeenCalledWith(
'opta-widget',
expect.objectContaining({
sport: 'football',
widget: 'player_ranking',
season: '2024',
competition: '5',
template: 'normal',
live: true,
show_images: true,
navigation: 'tabs_more',
show_crests: true,
show_ranks: true,
show_appearances: false,
visible_categories:
'goals,assists,chances,clean_sheets,cards_yellow,cards_red',
limit: '100',
hide_zeroes: true,
show_team_names: true,
team_naming: 'full',
player_naming: 'full',
show_logo: true,
show_title: true,
date_format: 'DD/MM/YYYY',
breakpoints: 1
})
);
});
});