import { render, screen } from '../test-utils';
import SentimentSurface from './SentimentSurface';
import { Sentiment, Emphasis } from './SentimentSurface.types';
describe('SentimentSurface', () => {
const testContent = 'Test content';
describe('rendering', () => {
it('renders with children', () => {
render({testContent});
expect(screen.getByText(testContent)).toBeInTheDocument();
});
it('renders as div by default', () => {
render(
{testContent}
,
);
expect(screen.getByTestId('surface').tagName).toBe('DIV');
});
it('renders as custom element when as prop is provided', () => {
render(
{testContent}
,
);
expect(screen.getByTestId('surface').tagName).toBe('SECTION');
});
});
describe('hasBaseStyles', () => {
it('applies base styles by default', () => {
render(
{testContent}
,
);
expect(screen.getByTestId('surface')).toHaveClass('wds-sentiment-surface--hasBaseStyles');
});
it('does not apply base styles when hasBaseStyles is false', () => {
render(
{testContent}
,
);
expect(screen.getByTestId('surface')).not.toHaveClass('wds-sentiment-surface--hasBaseStyles');
});
});
describe('sentiment variants', () => {
const sentiments: Sentiment[] = ['negative', 'warning', 'neutral', 'success', 'proposition'];
sentiments.forEach((sentiment) => {
it(`renders ${sentiment} sentiment with correct class`, () => {
render(
{testContent}
,
);
const element = screen.getByTestId('surface');
expect(element).toHaveClass('wds-sentiment-surface');
expect(element).toHaveClass(`wds-sentiment-surface-${sentiment}-base`);
});
});
});
describe('emphasis variants', () => {
const emphasisLevels: Emphasis[] = ['base', 'elevated'];
emphasisLevels.forEach((emphasis) => {
it(`renders ${emphasis} emphasis with correct class`, () => {
render(
{testContent}
,
);
const element = screen.getByTestId('surface');
expect(element).toHaveClass('wds-sentiment-surface');
expect(element).toHaveClass(`wds-sentiment-surface-neutral-${emphasis}`);
});
});
it('defaults to base emphasis when not provided', () => {
render(
{testContent}
,
);
const element = screen.getByTestId('surface');
expect(element).toHaveClass('wds-sentiment-surface');
expect(element).toHaveClass('wds-sentiment-surface-neutral-base');
});
});
describe('custom props', () => {
it('applies custom className', () => {
const customClass = 'custom-class';
render(
{testContent}
,
);
expect(screen.getByTestId('surface')).toHaveClass(customClass);
});
it('applies custom id', () => {
const customId = 'custom-id';
render(
{testContent}
,
);
expect(screen.getByText(testContent)).toHaveAttribute('id', customId);
});
it('applies data-testid attribute', () => {
const testId = 'test-surface';
render(
{testContent}
,
);
expect(screen.getByTestId(testId)).toBeInTheDocument();
});
it('applies custom style', () => {
const customStyle = { padding: '20px' };
render(
{testContent}
,
);
expect(screen.getByTestId('surface')).toHaveStyle(customStyle);
});
});
describe('HTML attributes', () => {
it('supports aria-label attribute', () => {
const ariaLabel = 'Surface label';
render(
{testContent}
,
);
expect(screen.getByTestId('surface')).toHaveAttribute('aria-label', ariaLabel);
});
it('supports role attribute', () => {
render(
{testContent}
,
);
expect(screen.getByTestId('surface')).toHaveAttribute('role', 'region');
});
});
});