文件
mynode/packages/app-desktop/gui/PromptDialog.test.ts
chen 301194963b
一些检查失败了
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
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

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();
});
});