From ac6a35602743f08acf3cfffb4a1662450d6b4b11 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 11 Feb 2022 11:37:31 +0000 Subject: [PATCH] End-to-end test alias publishing flow (#7779) --- .../views/elements/EditableItemList.tsx | 2 +- .../src/scenarios/directory.ts | 13 ++++- .../src/usecases/room-settings.ts | 55 ++++++++++++++++--- .../end-to-end-tests/src/usecases/settings.ts | 32 ----------- 4 files changed, 58 insertions(+), 44 deletions(-) diff --git a/src/components/views/elements/EditableItemList.tsx b/src/components/views/elements/EditableItemList.tsx index 5d6e24ab27..a6d1d3f06f 100644 --- a/src/components/views/elements/EditableItemList.tsx +++ b/src/components/views/elements/EditableItemList.tsx @@ -170,7 +170,7 @@ export default class EditableItemList

extends React.PureComponent 0 ? this.props.itemsLabel : this.props.noItemsLabel; return ( -

+
{ label }
diff --git a/test/end-to-end-tests/src/scenarios/directory.ts b/test/end-to-end-tests/src/scenarios/directory.ts index a0568c24d8..45428548e3 100644 --- a/test/end-to-end-tests/src/scenarios/directory.ts +++ b/test/end-to-end-tests/src/scenarios/directory.ts @@ -19,15 +19,24 @@ import { join } from '../usecases/join'; import { sendMessage } from '../usecases/send-message'; import { receiveMessage } from '../usecases/timeline'; import { createRoom } from '../usecases/create-room'; -import { changeRoomSettings } from '../usecases/room-settings'; +import { changeRoomSettings, checkRoomSettings } from '../usecases/room-settings'; import { ElementSession } from "../session"; export async function roomDirectoryScenarios(alice: ElementSession, bob: ElementSession) { console.log(" creating a public room and join through directory:"); const room = 'test'; await createRoom(alice, room); - await changeRoomSettings(alice, { directory: true, visibility: "public", alias: "#test" }); + + const settings = { + directory: true, + visibility: "public", + alias: "#test:localhost", + publishedAlias: "#test:localhost", + }; + await changeRoomSettings(alice, settings); await join(bob, room); //looks up room in directory + await checkRoomSettings(bob, settings); + const bobMessage = "hi Alice!"; await sendMessage(bob, bobMessage); await receiveMessage(alice, { sender: "bob", body: bobMessage }); diff --git a/test/end-to-end-tests/src/usecases/room-settings.ts b/test/end-to-end-tests/src/usecases/room-settings.ts index 462f37e7f9..72faa93a38 100644 --- a/test/end-to-end-tests/src/usecases/room-settings.ts +++ b/test/end-to-end-tests/src/usecases/room-settings.ts @@ -71,9 +71,10 @@ async function findTabs(session: ElementSession): Promise { } interface Settings { - encryption: boolean; + encryption?: boolean; directory?: boolean; alias?: string; + publishedAlias?: string; visibility?: string; } @@ -89,11 +90,22 @@ export async function checkRoomSettings(session: ElementSession, expectedSetting await checkSettingsToggle(session, isDirectory, expectedSettings.directory); } + if (expectedSettings.publishedAlias) { + session.log.step(`checks for published alias of ${expectedSettings.publishedAlias}`); + const publishedAliases = await session.queryAll('#roomAltAliases .mx_EditableItem_item, #roomAltAliases li'); + const publishedAliasTexts = await Promise.all(publishedAliases.map(a => session.innerText(a))); + if (publishedAliasTexts.find(a => a.includes(expectedSettings.publishedAlias))) { + session.log.done("present"); + } else { + throw new Error(`could not find published alias ${expectedSettings.publishedAlias}`); + } + } + if (expectedSettings.alias) { session.log.step(`checks for local alias of ${expectedSettings.alias}`); const summary = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings summary"); await summary.click(); - const localAliases = await session.queryAll('.mx_RoomSettingsDialog .mx_AliasSettings .mx_EditableItem_item'); + const localAliases = await session.queryAll('#roomAliases .mx_EditableItem_item, #roomAliases li'); const localAliasTexts = await Promise.all(localAliases.map(a => session.innerText(a))); if (localAliasTexts.find(a => a.includes(expectedSettings.alias))) { session.log.done("present"); @@ -115,12 +127,15 @@ export async function checkRoomSettings(session: ElementSession, expectedSetting if (expectedSettings.visibility) { session.log.step(`checks visibility is ${expectedSettings.visibility}`); const radios = await session.queryAll(".mx_RoomSettingsDialog input[type=radio]"); - assert.equal(radios.length, 6); - const [inviteOnlyRoom, publicRoom] = radios; + // the "Who can read history?" "Anyone" radio option is only shown if visibility is set to public + assert.equal(radios.length, expectedSettings.visibility === "public" ? 7 : 6); + const [inviteOnlyRoom, spaceMembers, publicRoom] = radios; let expectedRadio = null; if (expectedSettings.visibility === "invite_only") { expectedRadio = inviteOnlyRoom; + } else if (expectedSettings.visibility === "space_members") { + expectedRadio = spaceMembers; } else if (expectedSettings.visibility === "public") { expectedRadio = publicRoom; } else { @@ -139,7 +154,17 @@ export async function checkRoomSettings(session: ElementSession, expectedSetting session.log.endGroup(); } -export async function changeRoomSettings(session, settings) { +async function getValidationError(session: ElementSession): Promise { + try { + const validationDetail = await session.query(".mx_Validation_detail"); + return session.innerText(validationDetail); + } catch (e) { + // no validation tooltips + return undefined; + } +} + +export async function changeRoomSettings(session: ElementSession, settings: Settings) { session.log.startGroup(`changes the room settings`); const { securityTabButton, generalTabButton } = await findTabs(session); @@ -186,12 +211,24 @@ export async function changeRoomSettings(session, settings) { } if (settings.alias) { - session.log.step(`sets alias to ${settings.alias}`); - const aliasField = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings details input[type=text]"); + session.log.step(`adding local alias ${settings.alias}`); + const aliasField = await session.query("#roomAliases input[type=text]"); await session.replaceInputText(aliasField, settings.alias.substring(1, settings.alias.lastIndexOf(":"))); - const addButton = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings details .mx_AccessibleButton"); + const addButton = await session.query("#roomAliases .mx_AccessibleButton"); await addButton.click(); - await session.delay(10); // delay to give time for the validator to run and check the alias + await session.query("#roomAliases .mx_Field_valid, #roomAliases .mx_Field_invalid"); // await validator + assert.equal(await getValidationError(session), undefined); + session.log.done(); + } + + if (settings.publishedAlias) { + session.log.step(`adding published alias ${settings.alias}`); + const aliasField = await session.query("#roomAltAliases input[type=text]"); + await session.replaceInputText(aliasField, settings.alias.substring(1)); + const addButton = await session.query("#roomAltAliases .mx_AccessibleButton"); + await addButton.click(); + await session.query("#roomAltAliases .mx_Field_valid, #roomAltAliases .mx_Field_invalid"); // await validator + assert.equal(await getValidationError(session), undefined); session.log.done(); } diff --git a/test/end-to-end-tests/src/usecases/settings.ts b/test/end-to-end-tests/src/usecases/settings.ts index f0a3fdc35d..110a5b58cc 100644 --- a/test/end-to-end-tests/src/usecases/settings.ts +++ b/test/end-to-end-tests/src/usecases/settings.ts @@ -15,8 +15,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { strict as assert } from 'assert'; - import { ElementSession } from "../session"; export async function openSettings(session: ElementSession, section: string): Promise { @@ -30,33 +28,3 @@ export async function openSettings(session: ElementSession, section: string): Pr await sectionButton.click(); } } - -export async function enableLazyLoading(session: ElementSession): Promise { - session.log.step(`enables lazy loading of members in the lab settings`); - const settingsButton = await session.query('.mx_BottomLeftMenu_settings'); - await settingsButton.click(); - const llCheckbox = await session.query("#feature_lazyloading"); - await llCheckbox.click(); - await session.waitForReload(); - const closeButton = await session.query(".mx_RoomHeader_cancelButton"); - await closeButton.click(); - session.log.done(); -} - -interface E2EDevice { - id: string; - key: string; -} - -export async function getE2EDeviceFromSettings(session: ElementSession): Promise { - session.log.step(`gets e2e device/key from settings`); - await openSettings(session, "security"); - const deviceAndKey = await session.queryAll(".mx_SettingsTab_section .mx_CryptographyPanel code"); - assert.equal(deviceAndKey.length, 2); - const id: string = await (await deviceAndKey[0].getProperty("innerText")).jsonValue(); - const key: string = await (await deviceAndKey[1].getProperty("innerText")).jsonValue(); - const closeButton = await session.query(".mx_UserSettingsDialog .mx_Dialog_cancelButton"); - await closeButton.click(); - session.log.done(); - return { id, key }; -}