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

Disable "Publish this room" option in invite only rooms #7441

Merged
merged 4 commits into from
Jan 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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