一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
53 行
1.8 KiB
TypeScript
53 行
1.8 KiB
TypeScript
import PromptDialog from './PromptDialog';
|
|
|
|
describe('PromptDialog', () => {
|
|
|
|
const setupKeyHandler = (inputType: string, menuIsOpened: boolean) => {
|
|
const onCloseMock = jest.fn();
|
|
const instance = new PromptDialog({
|
|
themeId: 1,
|
|
defaultValue: '',
|
|
visible: true,
|
|
buttons: ['ok', 'cancel'],
|
|
onClose: onCloseMock,
|
|
inputType,
|
|
description: '',
|
|
autocomplete: [],
|
|
label: 'Test',
|
|
answer: null,
|
|
});
|
|
instance.state = { visible: true, answer: 'some-answer' };
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Accessing private property for test setup
|
|
(instance as unknown as any).menuIsOpened_ = menuIsOpened;
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Navigating React element tree for handler extraction
|
|
const rendered = instance.render() as any;
|
|
const dialogChildren = rendered.props.children;
|
|
const inputWrapper = dialogChildren[1];
|
|
const wrapperChildren = inputWrapper.props.children;
|
|
const inputComp = Array.isArray(wrapperChildren)
|
|
? wrapperChildren[0]
|
|
: wrapperChildren;
|
|
|
|
return { onKeyDown: inputComp.props.onKeyDown, onCloseMock };
|
|
};
|
|
|
|
test('closes dialog for text input', () => {
|
|
const { onKeyDown, onCloseMock } = setupKeyHandler('text', false);
|
|
onKeyDown({ key: 'Escape' });
|
|
expect(onCloseMock).toHaveBeenCalledWith(null, 'cancel');
|
|
});
|
|
|
|
test('closes dialog for dropdown when menu is closed', () => {
|
|
const { onKeyDown, onCloseMock } = setupKeyHandler('dropdown', false);
|
|
onKeyDown({ key: 'Escape' });
|
|
expect(onCloseMock).toHaveBeenCalledWith(null, 'cancel');
|
|
});
|
|
|
|
test('does not close dialog when react-select menu is open', () => {
|
|
const { onKeyDown, onCloseMock } = setupKeyHandler('dropdown', true);
|
|
onKeyDown({ key: 'Escape' });
|
|
expect(onCloseMock).not.toHaveBeenCalled();
|
|
});
|
|
});
|