import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import Card from '../Card/Card';
import { ArticleCardProps } from '../types';
import { tealiumTrackingHandler } from '../utils';
jest.mock('../utils', () => ({
...jest.requireActual('../utils'),
tealiumTrackingHandler: jest.fn()
}));
describe('Card Component', () => {
const mockProps: ArticleCardProps = {
article: {
id: '1',
url: 'https://example.com/travel',
headline: 'Test Headline',
image: { url: 'https://example.com/image.jpg', alt: 'test' },
summary: 'Test Summary',
label: ''
},
numOfArticles: 3,
isLastCard: false,
sectionTitle: '',
isLeadingArticle: false
};
it('renders the article headline and summary', () => {
render();
expect(screen.getByText('Test Headline')).toBeInTheDocument();
expect(screen.getByText('Test Summary')).toBeInTheDocument();
});
it('renders the article image with correct src', () => {
render();
const image = screen.getByRole('img');
expect(image).toHaveAttribute(
'src',
'https://example.com/image.jpg?resize=750'
);
});
it('renders the link with correct href', () => {
render();
const link = screen.getAllByRole('link')[0];
expect(link).toHaveAttribute('href', '/travel');
});
it('logs the headline when the link is clicked', () => {
const mockTealiumTrackingHandler = jest.fn();
(tealiumTrackingHandler as jest.Mock).mockImplementation(
mockTealiumTrackingHandler
);
render();
const link = screen.getAllByRole('link')[0];
fireEvent.click(link);
expect(mockTealiumTrackingHandler).toHaveBeenCalledWith(
'Test Headline',
'Test Headline'
);
});
});