diff --git a/src/Card/tests/BaseCard.test.jsx b/src/Card/tests/BaseCard.test.jsx new file mode 100644 index 00000000000..56d390a1e94 --- /dev/null +++ b/src/Card/tests/BaseCard.test.jsx @@ -0,0 +1,81 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import BaseCard from '../BaseCard'; + +describe('BaseCard Component', () => { + test('renders a default card', () => { + render(Default Card Content); + const cardElement = screen.getByText('Default Card Content'); + expect(cardElement).toBeInTheDocument(); + expect(cardElement).toHaveClass('card'); + }); + + test('applies the correct background color', () => { + render(Card with Background); + const cardElement = screen.getByText('Card with Background'); + expect(cardElement).toHaveClass('bg-primary'); + }); + + test('applies the correct text color', () => { + render(Card with Text Color); + const cardElement = screen.getByText('Card with Text Color'); + expect(cardElement).toHaveClass('text-muted'); + }); + + test('applies the correct border color', () => { + render(Card with Border Color); + const cardElement = screen.getByText('Card with Border Color'); + expect(cardElement).toHaveClass('border-danger'); + }); + + test('renders children inside CardBody when hasBody is true', () => { + render( + + Content in CardBody + , + ); + const cardBodyElement = screen.getByText('Content in CardBody'); + expect(cardBodyElement).toBeInTheDocument(); + expect(cardBodyElement.closest('div')).toHaveClass('pgn__card-body'); + }); + + test('renders children directly when hasBody is false', () => { + render( + + Direct Content + , + ); + const contentElement = screen.getByText('Direct Content'); + expect(contentElement).toBeInTheDocument(); + expect(contentElement.closest('div')).not.toHaveClass('card-body'); + }); + + test('supports a custom tag with the `as` prop', () => { + render( + + Custom Tag + , + ); + const sectionElement = screen.getByText('Custom Tag').closest('section'); + expect(sectionElement).toBeInTheDocument(); + expect(sectionElement).toHaveClass('card'); + }); + + test('applies additional class names', () => { + render(Custom Class); + const cardElement = screen.getByText('Custom Class'); + expect(cardElement).toHaveClass('custom-class'); + }); + + test('uses prefix correctly', () => { + render(Prefixed Card); + const cardElement = screen.getByText('Prefixed Card'); + expect(cardElement).toHaveClass('test-prefix-card'); + }); + + test('renders without children', () => { + render(); + const cardElement = document.querySelector('.card'); + expect(cardElement).toBeInTheDocument(); + }); +});