You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
6.8 KiB
TypeScript
187 lines
6.8 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
|
import { beforeAllClean } from './setup/beforeEach';
|
|
import {
|
|
clickOnElement,
|
|
clickOnMatchingText,
|
|
clickOnTestIdWithText,
|
|
doesTextIncludeString,
|
|
typeIntoInput,
|
|
waitForControlMessageWithText,
|
|
waitForMatchingText,
|
|
waitForTestIdWithText,
|
|
} from './utilities/utils';
|
|
import { renameGroup } from './utilities/rename_group';
|
|
import { createGroup } from './setup/create_group';
|
|
// import { leaveGroup } from './utilities/leave_group';
|
|
import { newUser } from './setup/new_user';
|
|
import { leaveGroup } from './utilities/leave_group';
|
|
import { openApp } from './setup/open';
|
|
import { sleepFor } from '../../session/utils/Promise';
|
|
import { createContact } from './utilities/create_contact';
|
|
|
|
test.beforeEach(beforeAllClean);
|
|
|
|
// test.afterEach(() => forceCloseAllWindows(windows));
|
|
|
|
test('Create group', async () => {
|
|
// Open Electron
|
|
const [windowA, windowB, windowC] = await openApp(3);
|
|
const [userA, userB, userC] = await Promise.all([
|
|
newUser(windowA, 'Alice'),
|
|
newUser(windowB, 'Bob'),
|
|
newUser(windowC, 'Chloe'),
|
|
]);
|
|
|
|
await createGroup('Tiny Bubble Gang', userA, windowA, userB, windowB, userC, windowC);
|
|
// Check config messages in all windows
|
|
await sleepFor(1000);
|
|
// await waitForTestIdWithText(windowA, 'control-message');
|
|
await Promise.all([
|
|
waitForControlMessageWithText(
|
|
windowA,
|
|
`"${userB.userName}", "${userC.userName}", You joined the group.`
|
|
),
|
|
waitForControlMessageWithText(
|
|
windowB,
|
|
`You, "${userC.userName}", "${userA.userName}" joined the group.`
|
|
),
|
|
waitForControlMessageWithText(
|
|
windowC,
|
|
`"${userB.userName}", You, "${userA.userName}" joined the group.`
|
|
),
|
|
]);
|
|
});
|
|
|
|
test('Add contact to group', async () => {
|
|
const [windowA, windowB, windowC, windowD] = await openApp(4);
|
|
const [userA, userB, userC, userD] = await Promise.all([
|
|
newUser(windowA, 'Alice'),
|
|
newUser(windowB, 'Bob'),
|
|
newUser(windowC, 'Chloe'),
|
|
newUser(windowD, 'Dracula'),
|
|
]);
|
|
const testGroup = await createGroup(
|
|
'Tiny Bubble Gang',
|
|
userA,
|
|
windowA,
|
|
userB,
|
|
windowB,
|
|
userC,
|
|
windowC
|
|
);
|
|
// Check config messages in all windows
|
|
await sleepFor(1000);
|
|
await createContact(windowA, windowD, userA, userD);
|
|
await clickOnTestIdWithText(
|
|
windowA,
|
|
'module-conversation__user__profile-name',
|
|
testGroup.userName
|
|
);
|
|
await clickOnElement(windowA, 'data-testid', 'conversation-options-avatar');
|
|
await clickOnElement(windowA, 'data-testid', 'add-user-button');
|
|
// Waiting for animation of right panel to appear
|
|
await sleepFor(1000);
|
|
await clickOnMatchingText(windowA, userD.userName);
|
|
await clickOnMatchingText(windowA, 'OK');
|
|
await waitForControlMessageWithText(windowA, `"${userD.userName}" joined the group.`);
|
|
await waitForControlMessageWithText(windowB, `${userD.sessionid} joined the group.`);
|
|
await waitForControlMessageWithText(windowC, `${userD.sessionid} joined the group.`);
|
|
await clickOnTestIdWithText(
|
|
windowD,
|
|
'module-conversation__user__profile-name',
|
|
testGroup.userName
|
|
);
|
|
await doesTextIncludeString(windowD, 'control-message', 'You joined the group.');
|
|
});
|
|
|
|
test('Change group name', async () => {
|
|
const [windowA, windowB, windowC] = await openApp(3);
|
|
const [userA, userB, userC] = await Promise.all([
|
|
newUser(windowA, 'Alice'),
|
|
newUser(windowB, 'Bob'),
|
|
newUser(windowC, 'Chloe'),
|
|
]);
|
|
const newGroupName = 'Otter lovers';
|
|
const group = await createGroup(
|
|
'Tiny Bubble Gang',
|
|
userA,
|
|
windowA,
|
|
userB,
|
|
windowB,
|
|
userC,
|
|
windowC
|
|
);
|
|
// Change the name of the group and check that it syncs to all devices (config messages)
|
|
// Click on already created group
|
|
// Check that renaming a group is working
|
|
await renameGroup(windowA, group.userName, newGroupName);
|
|
// Check config message in window B for group name change
|
|
await clickOnMatchingText(windowB, newGroupName);
|
|
await waitForMatchingText(windowB, `Group name is now '${newGroupName}'.`);
|
|
// Click on conversation options
|
|
// Check to see that you can't change group name to empty string
|
|
// Click on edit group name
|
|
await clickOnMatchingText(windowA, 'Edit group name');
|
|
await windowA.fill('.profile-name-input', ' ');
|
|
await windowA.keyboard.press('Enter');
|
|
const errorMessage = windowA.locator('.error-message');
|
|
await expect(errorMessage).toContainText('Please enter a group name');
|
|
await clickOnMatchingText(windowA, 'Cancel');
|
|
await clickOnTestIdWithText(windowA, 'back-button-conversation-options');
|
|
});
|
|
|
|
test('Test mentions', async () => {
|
|
const [windowA, windowB, windowC] = await openApp(3);
|
|
const [userA, userB, userC] = await Promise.all([
|
|
newUser(windowA, 'Alice'),
|
|
newUser(windowB, 'Bob'),
|
|
newUser(windowC, 'Chloe'),
|
|
]);
|
|
const group = await createGroup(
|
|
'Tiny Bubble Gang',
|
|
userA,
|
|
windowA,
|
|
userB,
|
|
windowB,
|
|
userC,
|
|
windowC
|
|
);
|
|
|
|
// in windowA we should be able to mentions userB and userC
|
|
|
|
await clickOnTestIdWithText(windowA, 'module-conversation__user__profile-name', group.userName);
|
|
await typeIntoInput(windowA, 'message-input-text-area', '@');
|
|
// does 'message-input-text-area' have aria-expanded: true when @ is typed into input
|
|
await waitForTestIdWithText(windowA, 'mentions-popup-row');
|
|
await waitForTestIdWithText(windowA, 'mentions-popup-row', userB.userName);
|
|
await waitForTestIdWithText(windowA, 'mentions-popup-row', userC.userName);
|
|
|
|
// in windowB we should be able to mentions userA and userC
|
|
await clickOnTestIdWithText(windowB, 'module-conversation__user__profile-name', group.userName);
|
|
await typeIntoInput(windowB, 'message-input-text-area', '@');
|
|
// does 'message-input-text-area' have aria-expanded: true when @ is typed into input
|
|
await waitForTestIdWithText(windowB, 'mentions-popup-row');
|
|
await waitForTestIdWithText(windowB, 'mentions-popup-row', userA.userName);
|
|
await waitForTestIdWithText(windowB, 'mentions-popup-row', userC.userName);
|
|
|
|
// in windowC we should be able to mentions userA and userB
|
|
await clickOnTestIdWithText(windowC, 'module-conversation__user__profile-name', group.userName);
|
|
await typeIntoInput(windowC, 'message-input-text-area', '@');
|
|
// does 'message-input-text-area' have aria-expanded: true when @ is typed into input
|
|
await waitForTestIdWithText(windowC, 'mentions-popup-row');
|
|
await waitForTestIdWithText(windowC, 'mentions-popup-row', userA.userName);
|
|
await waitForTestIdWithText(windowC, 'mentions-popup-row', userB.userName);
|
|
});
|
|
|
|
test('Leave group', async () => {
|
|
const [windowA, windowB, windowC] = await openApp(3);
|
|
const [userA, userB, userC] = await Promise.all([
|
|
newUser(windowA, 'Alice'),
|
|
newUser(windowB, 'Bob'),
|
|
newUser(windowC, 'Chloe'),
|
|
]);
|
|
await createGroup('Tiny Bubble Gang', userA, windowA, userB, windowB, userC, windowC);
|
|
|
|
await leaveGroup(windowC);
|
|
});
|