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'); }); }); });