import { act } from 'react';
import { render, screen } from '../test-utils';
import ProcessIndicator, { ProcessIndicatorProps } from './ProcessIndicator';
describe('ProcessIndicator', () => {
beforeEach(() => {
jest.useFakeTimers();
});
afterEach(async () => {
await jest.runOnlyPendingTimersAsync();
jest.useRealTimers();
});
it('supports transitioning between states', async () => {
const handleAnimationCompleted = jest.fn();
const initialProps = {
'data-testid': 'process-indicator',
onAnimationCompleted: handleAnimationCompleted,
} satisfies ProcessIndicatorProps;
const view = render();
expect(screen.getByTestId('process-indicator')).not.toHaveClass('process-success');
expect(screen.getByTestId('process-indicator')).not.toHaveClass('process-xl');
const updatedProps = {
status: 'succeeded',
size: 'xl',
} satisfies ProcessIndicatorProps;
view.rerender();
await act(async () => {
await jest.runOnlyPendingTimersAsync();
});
expect(screen.getByTestId('process-indicator')).toHaveClass('process-success');
expect(screen.getByTestId('process-indicator')).toHaveClass('process-xl');
expect(handleAnimationCompleted).not.toHaveBeenCalled();
await jest.runOnlyPendingTimersAsync();
expect(handleAnimationCompleted).toHaveBeenCalledWith(updatedProps.status);
expect(handleAnimationCompleted).toHaveBeenCalledTimes(1);
});
});