Files
syndarix/frontend/tests/features/issues/components/StatusWorkflow.test.tsx
Felipe Cardoso a4c91cb8c3 refactor(frontend): clean up code by consolidating multi-line JSX into single lines where feasible
- Refactored JSX elements to improve readability by collapsing multi-line props and attributes into single lines if their length permits.
- Improved consistency in component imports by grouping and consolidating them.
- No functional changes, purely restructuring for clarity and maintainability.
2026-01-01 11:46:57 +01:00

72 lines
2.4 KiB
TypeScript

/**
* StatusWorkflow Component Tests
*/
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { StatusWorkflow } from '@/features/issues/components/StatusWorkflow';
describe('StatusWorkflow', () => {
const mockOnStatusChange = jest.fn();
beforeEach(() => {
mockOnStatusChange.mockClear();
});
it('renders all status options', () => {
render(<StatusWorkflow currentStatus="open" onStatusChange={mockOnStatusChange} />);
expect(screen.getByText('Open')).toBeInTheDocument();
expect(screen.getByText('In Progress')).toBeInTheDocument();
expect(screen.getByText('In Review')).toBeInTheDocument();
expect(screen.getByText('Blocked')).toBeInTheDocument();
expect(screen.getByText('Closed')).toBeInTheDocument();
});
it('highlights current status', () => {
render(<StatusWorkflow currentStatus="in_progress" onStatusChange={mockOnStatusChange} />);
const inProgressButton = screen.getByRole('radio', { name: /in progress/i });
expect(inProgressButton).toHaveAttribute('aria-checked', 'true');
});
it('calls onStatusChange when status is clicked', async () => {
const user = userEvent.setup();
render(<StatusWorkflow currentStatus="open" onStatusChange={mockOnStatusChange} />);
const inProgressButton = screen.getByRole('radio', { name: /in progress/i });
await user.click(inProgressButton);
expect(mockOnStatusChange).toHaveBeenCalledWith('in_progress');
});
it('disables status buttons when disabled prop is true', async () => {
const user = userEvent.setup();
render(<StatusWorkflow currentStatus="open" onStatusChange={mockOnStatusChange} disabled />);
const inProgressButton = screen.getByRole('radio', { name: /in progress/i });
expect(inProgressButton).toBeDisabled();
await user.click(inProgressButton);
expect(mockOnStatusChange).not.toHaveBeenCalled();
});
it('applies custom className', () => {
const { container } = render(
<StatusWorkflow
currentStatus="open"
onStatusChange={mockOnStatusChange}
className="custom-class"
/>
);
expect(container.firstChild).toHaveClass('custom-class');
});
it('has proper radiogroup role', () => {
render(<StatusWorkflow currentStatus="open" onStatusChange={mockOnStatusChange} />);
expect(screen.getByRole('radiogroup', { name: /issue status/i })).toBeInTheDocument();
});
});