diff --git a/test/end-to-end-tests/src/scenario.js b/test/end-to-end-tests/src/scenario.js index c44f209bf3..7d3c5f1cd9 100644 --- a/test/end-to-end-tests/src/scenario.js +++ b/test/end-to-end-tests/src/scenario.js @@ -20,6 +20,7 @@ const toastScenarios = require('./scenarios/toast'); const roomDirectoryScenarios = require('./scenarios/directory'); const lazyLoadingScenarios = require('./scenarios/lazy-loading'); const e2eEncryptionScenarios = require('./scenarios/e2e-encryption'); +const spacesScenarios = require('./scenarios/spaces'); module.exports = async function scenario(createSession, restCreator) { let firstUser = true; @@ -40,6 +41,7 @@ module.exports = async function scenario(createSession, restCreator) { await toastScenarios(alice, bob); await roomDirectoryScenarios(alice, bob); await e2eEncryptionScenarios(alice, bob); + await spacesScenarios(alice, bob); console.log("create REST users:"); const charlies = await createRestUsers(restCreator); await lazyLoadingScenarios(alice, bob, charlies); diff --git a/test/end-to-end-tests/src/scenarios/spaces.js b/test/end-to-end-tests/src/scenarios/spaces.js new file mode 100644 index 0000000000..9cb5c02d0e --- /dev/null +++ b/test/end-to-end-tests/src/scenarios/spaces.js @@ -0,0 +1,31 @@ +/* +Copyright 2021 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +const { createSpace, inviteSpace } = require("../usecases/create-space"); + +module.exports = async function spacesScenarios(alice, bob) { + console.log(" creating a space for spaces scenarios:"); + + await setupSpaceUsingAliceAndInviteBob(alice, bob); +}; + +const space = "Test Space"; + +async function setupSpaceUsingAliceAndInviteBob(alice, bob) { + await createSpace(alice, space); + await inviteSpace(alice, space, "@bob:localhost"); + await bob.query(`.mx_SpaceButton[aria-label="${space}"]`); // assert invite received +} diff --git a/test/end-to-end-tests/src/usecases/create-space.js b/test/end-to-end-tests/src/usecases/create-space.js new file mode 100644 index 0000000000..d6acaac489 --- /dev/null +++ b/test/end-to-end-tests/src/usecases/create-space.js @@ -0,0 +1,79 @@ +/* +Copyright 2021 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +async function openSpaceCreateMenu(session) { + const spaceCreateButton = await session.query('.mx_SpaceButton_new'); + await spaceCreateButton.click(); +} + +async function createSpace(session, name, isPublic = false) { + session.log.step(`creates space "${name}"`); + + await openSpaceCreateMenu(session); + const visibilityButton = await session.query(isPublic ? ".mx_SpaceCreateMenuType_public" : ".mx_SpaceCreateMenuType_private"); + await visibilityButton.click(); + + const nameInput = await session.query('input[name="spaceName"]'); + await session.replaceInputText(nameInput, name); + + await session.delay(100); + + const createButton = await session.query('.mx_SpaceCreateMenu_wrapper .mx_AccessibleButton_kind_primary'); + await createButton.click(); + + if (!isPublic) { + const justMeButton = await session.query('.mx_SpaceRoomView_privateScope_justMeButton'); + await justMeButton.click(); + const continueButton = await session.query('.mx_AddExistingToSpace_footer .mx_AccessibleButton_kind_primary'); + await continueButton.click(); + } else { + for (let i = 0; i < 2; i++) { + const continueButton = await session.query('.mx_SpaceRoomView_buttons .mx_AccessibleButton_kind_primary'); + await continueButton.click(); + } + } + + session.log.done(); +} + +async function inviteSpace(session, spaceName, userId) { + session.log.step(`invites "${userId}" to space "${spaceName}"`); + + const spaceButton = await session.query(`.mx_SpaceButton[aria-label="${spaceName}"]`); + await spaceButton.click({ + button: 'right', + }); + + const inviteButton = await session.query('[aria-label="Invite people"]'); + await inviteButton.click(); + + try { + const button = await session.query('.mx_SpacePublicShare_inviteButton'); + await button.click(); + } catch (e) { + // ignore + } + + const inviteTextArea = await session.query(".mx_InviteDialog_editor input"); + await inviteTextArea.type(userId); + const selectUserItem = await session.query(".mx_InviteDialog_roomTile"); + await selectUserItem.click(); + const confirmButton = await session.query(".mx_InviteDialog_goButton"); + await confirmButton.click(); + session.log.done(); +} + +module.exports = { openSpaceCreateMenu, createSpace, inviteSpace };