Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Disable "Publish this room" option in invite only rooms (#7441)
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronraimist committed Jan 10, 2022
1 parent fdd0a2a commit c03cb67
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 21 deletions.
7 changes: 5 additions & 2 deletions src/components/views/room_settings/RoomPublishSetting.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,12 @@ export default class RoomPublishSetting extends React.PureComponent<IProps, ISta
render() {
const client = MatrixClientPeg.get();

const room = client.getRoom(this.props.roomId);
const isRoomPublishable = room.getJoinRule() !== "invite";

const enabled = (
DirectoryCustomisations.requireCanonicalAliasAccessToPublish?.() === false ||
this.props.canSetCanonicalAlias
(DirectoryCustomisations.requireCanonicalAliasAccessToPublish?.() === false ||
this.props.canSetCanonicalAlias) && (isRoomPublishable || this.state.isRoomPublished)
);

return (
Expand Down
44 changes: 25 additions & 19 deletions test/end-to-end-tests/src/usecases/room-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ export async function checkSettingsToggle(session: ElementSession,

interface Tabs {
securityTabButton: ElementHandle;
generalTabButton: ElementHandle;
}

async function findTabs(session: ElementSession): Promise<Tabs> {
Expand All @@ -64,8 +65,9 @@ async function findTabs(session: ElementSession): Promise<Tabs> {
const tabButtons = await session.queryAll(".mx_RoomSettingsDialog .mx_TabbedView_tabLabel");
const tabLabels = await Promise.all(tabButtons.map(t => session.innerText(t)));
const securityTabButton = tabButtons[tabLabels.findIndex(l => l.toLowerCase().includes("security"))];
const generalTabButton = tabButtons[tabLabels.findIndex(l => l.toLowerCase().includes("general"))];

return { securityTabButton };
return { securityTabButton, generalTabButton };
}

interface Settings {
Expand Down Expand Up @@ -140,24 +142,7 @@ export async function checkRoomSettings(session: ElementSession, expectedSetting
export async function changeRoomSettings(session, settings) {
session.log.startGroup(`changes the room settings`);

const { securityTabButton } = await findTabs(session);
const generalSwitches = await session.queryAll(".mx_RoomSettingsDialog .mx_ToggleSwitch");
const isDirectory = generalSwitches[0];

if (typeof settings.directory === "boolean") {
session.log.step(`sets directory listing to ${settings.directory}`);
await setSettingsToggle(session, isDirectory, settings.directory);
}

if (settings.alias) {
session.log.step(`sets alias to ${settings.alias}`);
const aliasField = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings details 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");
await addButton.click();
await session.delay(10); // delay to give time for the validator to run and check the alias
session.log.done();
}
const { securityTabButton, generalTabButton } = await findTabs(session);

securityTabButton.click();
await session.delay(500);
Expand Down Expand Up @@ -186,6 +171,27 @@ export async function changeRoomSettings(session, settings) {
} else {
throw new Error(`unrecognized room visibility setting: ${settings.visibility}`);
}
await session.delay(100);
session.log.done();
}

generalTabButton.click();
await session.delay(500);
const generalSwitches = await session.queryAll(".mx_RoomSettingsDialog .mx_ToggleSwitch");
const isDirectory = generalSwitches[0];

if (typeof settings.directory === "boolean") {
session.log.step(`sets directory listing to ${settings.directory}`);
await setSettingsToggle(session, isDirectory, settings.directory);
}

if (settings.alias) {
session.log.step(`sets alias to ${settings.alias}`);
const aliasField = await session.query(".mx_RoomSettingsDialog .mx_AliasSettings details 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");
await addButton.click();
await session.delay(10); // delay to give time for the validator to run and check the alias
session.log.done();
}

Expand Down

0 comments on commit c03cb67

Please sign in to comment.