// Copyright 2026 certctl LLC. All rights reserved. // SPDX-License-Identifier: BUSL-1.1 import { render, screen, fireEvent } from '@testing-library/react'; import { describe, it, expect, vi } from 'vitest'; import EmptyState from './EmptyState'; describe('EmptyState', () => { it('renders the title', () => { render(); expect(screen.getByText('No certificates yet')).toBeInTheDocument(); }); it('renders description when provided', () => { render( , ); expect( screen.getByText('Issue your first certificate to get started.'), ).toBeInTheDocument(); }); it('renders icon slot when provided', () => { render( 📜} title="No certificates" />, ); expect(screen.getByTestId('empty-icon')).toBeInTheDocument(); }); it('renders primaryAction button and fires its onClick', () => { const onClick = vi.fn(); render( , ); fireEvent.click(screen.getByRole('button', { name: 'Issue certificate' })); expect(onClick).toHaveBeenCalledTimes(1); }); it('renders secondaryAction button and fires its onClick', () => { const onClick = vi.fn(); render( , ); fireEvent.click(screen.getByRole('button', { name: 'Read docs' })); expect(onClick).toHaveBeenCalledTimes(1); }); it('renders both actions side-by-side', () => { render( {} }} secondaryAction={{ label: 'Connect issuer', onClick: () => {} }} />, ); expect(screen.getByRole('button', { name: 'Issue' })).toBeInTheDocument(); expect( screen.getByRole('button', { name: 'Connect issuer' }), ).toBeInTheDocument(); }); it('exposes role="status" for screen readers', () => { render(); expect(screen.getByRole('status')).toBeInTheDocument(); }); });