144 lines
4.8 KiB
TypeScript
144 lines
4.8 KiB
TypeScript
import { setTestProperties } from '../../helpers/TestProperties';
|
|
import { ensureOneParticipant } from '../../helpers/participants';
|
|
|
|
setTestProperties(__filename, {
|
|
usesBrowsers: [ 'p1' ]
|
|
});
|
|
|
|
const REACTION_SHORTCUT_CHARACTERS = [ 'T', 'C', 'L', 'O', 'B', 'S', 'H' ];
|
|
|
|
/**
|
|
* Returns the currently registered keyboard shortcut keys.
|
|
*/
|
|
function getRegisteredShortcutKeys() {
|
|
return ctx.p1.execute(() =>
|
|
Array.from(APP.store.getState()['features/keyboard-shortcuts'].shortcuts.keys()));
|
|
}
|
|
|
|
/**
|
|
* Returns the persisted Ctrl+Alt reaction shortcut preference.
|
|
*/
|
|
function getPersistedCtrlAltReactionShortcutsPreference() {
|
|
return ctx.p1.execute(() => {
|
|
const persistedState = localStorage.getItem('features/keyboard-shortcuts');
|
|
|
|
return persistedState
|
|
? JSON.parse(persistedState).ctrlAltReactionShortcutsEnabled
|
|
: undefined;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Dispatches a Ctrl+Alt+T key event and returns the reactions it adds to the buffer.
|
|
*/
|
|
function sendCtrlAltT() {
|
|
return ctx.p1.execute(() => {
|
|
const activeElement = document.activeElement as HTMLElement;
|
|
|
|
activeElement?.blur();
|
|
|
|
const buffer = APP.store.getState()['features/reactions'].buffer;
|
|
const originalLength = buffer.length;
|
|
|
|
window.dispatchEvent(new KeyboardEvent('keyup', {
|
|
altKey: true,
|
|
code: 'KeyT',
|
|
ctrlKey: true,
|
|
key: 't'
|
|
}));
|
|
|
|
return APP.store.getState()['features/reactions'].buffer.slice(originalLength);
|
|
});
|
|
}
|
|
|
|
describe('Reaction keyboard shortcut aliases', () => {
|
|
it('joins the meeting', async () => {
|
|
await ensureOneParticipant();
|
|
});
|
|
|
|
it('registers Ctrl+Alt aliases only on Firefox', async () => {
|
|
const isFirefox = await ctx.p1.execute(() => navigator.userAgent.includes('Firefox/'));
|
|
const shortcuts = await getRegisteredShortcutKeys();
|
|
|
|
REACTION_SHORTCUT_CHARACTERS.forEach(character => {
|
|
expect(shortcuts).toContain(`:${character}`);
|
|
|
|
if (isFirefox) {
|
|
expect(shortcuts).toContain(`-:${character}`);
|
|
} else {
|
|
expect(shortcuts).not.toContain(`-:${character}`);
|
|
}
|
|
});
|
|
|
|
if (isFirefox) {
|
|
expect(await sendCtrlAltT()).toEqual([ 'like' ]);
|
|
}
|
|
});
|
|
|
|
it('shows and saves the Firefox-only setting', async () => {
|
|
const { p1 } = ctx;
|
|
const isFirefox = await p1.execute(() => navigator.userAgent.includes('Firefox/'));
|
|
|
|
await p1.getToolbar().clickSettingsButton();
|
|
|
|
const settings = p1.getSettingsDialog();
|
|
|
|
await settings.waitForDisplay();
|
|
await settings.openShortcutsTab();
|
|
expect(await settings.hasCtrlAltReactionShortcutsSetting()).toBe(isFirefox);
|
|
|
|
if (!isFirefox) {
|
|
await settings.clickCloseButton();
|
|
|
|
return;
|
|
}
|
|
|
|
expect(await settings.isCtrlAltReactionShortcutsEnabled()).toBe(true);
|
|
|
|
const shortcutLabels = await settings.getShortcutKeyLabels();
|
|
|
|
REACTION_SHORTCUT_CHARACTERS.forEach(character => {
|
|
expect(shortcutLabels).toContain(`Alt + ${character}`);
|
|
expect(shortcutLabels).toContain(`Ctrl + Alt + ${character}`);
|
|
});
|
|
|
|
await settings.setCtrlAltReactionShortcutsEnabled(false);
|
|
|
|
const disabledShortcutLabels = await settings.getShortcutKeyLabels();
|
|
|
|
REACTION_SHORTCUT_CHARACTERS.forEach(character => {
|
|
expect(disabledShortcutLabels).toContain(`Alt + ${character}`);
|
|
expect(disabledShortcutLabels).not.toContain(`Ctrl + Alt + ${character}`);
|
|
});
|
|
|
|
await settings.submit();
|
|
|
|
await p1.driver.waitUntil(async () => {
|
|
const shortcuts = await getRegisteredShortcutKeys();
|
|
|
|
return REACTION_SHORTCUT_CHARACTERS.every(character =>
|
|
shortcuts.includes(`:${character}`) && !shortcuts.includes(`-:${character}`));
|
|
});
|
|
await p1.driver.waitUntil(async () =>
|
|
await getPersistedCtrlAltReactionShortcutsPreference() === false, { timeout: 3000 });
|
|
|
|
expect(await sendCtrlAltT()).toEqual([]);
|
|
|
|
await p1.getToolbar().clickSettingsButton();
|
|
await settings.waitForDisplay();
|
|
await settings.openShortcutsTab();
|
|
expect(await settings.isCtrlAltReactionShortcutsEnabled()).toBe(false);
|
|
|
|
await settings.setCtrlAltReactionShortcutsEnabled(true);
|
|
await settings.submit();
|
|
|
|
await p1.driver.waitUntil(async () => {
|
|
const shortcuts = await getRegisteredShortcutKeys();
|
|
|
|
return REACTION_SHORTCUT_CHARACTERS.every(character => shortcuts.includes(`-:${character}`));
|
|
});
|
|
await p1.driver.waitUntil(async () =>
|
|
await getPersistedCtrlAltReactionShortcutsPreference() === true, { timeout: 3000 });
|
|
});
|
|
});
|