fix(a11y): preserve keyboard focus during confirmation transitions

This commit is contained in:
cesnimda
2026-10-20 20:46:43 +02:00
parent 8bbaf1f875
commit c5cfc8756c
3 changed files with 30 additions and 4 deletions
+16 -1
View File
@@ -1,6 +1,6 @@
import React from 'react';
import '@testing-library/jest-dom';
import { render, screen, fireEvent } from '@testing-library/react';
import { render, screen, fireEvent, act } from '@testing-library/react';
import { ConfirmProvider, useConfirm } from './confirm';
import { I18nProvider } from './i18n/I18nProvider';
@@ -52,3 +52,18 @@ test('uses the selected language for shared dialog defaults', async () => {
expect(screen.getByRole('button', { name: 'Bekreft' })).toBeInTheDocument();
window.localStorage.removeItem('uiLanguage');
});
test('finishing the opening transition preserves focus already moved inside the dialog', async () => {
jest.useFakeTimers();
try {
render(<ConfirmProvider><Demo /></ConfirmProvider>);
fireEvent.click(screen.getByRole('button', { name: /open confirm/i }));
expect(screen.getByRole('button', { name: 'Cancel' })).toHaveFocus();
const message = screen.getByRole('region', { name: 'Delete job' });
act(() => message.focus());
await act(async () => { jest.advanceTimersByTime(1000); });
expect(message).toHaveFocus();
} finally {
jest.useRealTimers();
}
});