mirror of https://github.com/vector-im/riot-web
Display permission section only after `isEncrypted` is computed
parent
a5a9e5fe39
commit
90cd420f4a
|
@ -129,6 +129,7 @@ interface IProps {
|
||||||
|
|
||||||
interface RolesRoomSettingsTabState {
|
interface RolesRoomSettingsTabState {
|
||||||
isRoomEncrypted: boolean;
|
isRoomEncrypted: boolean;
|
||||||
|
isReady: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class RolesRoomSettingsTab extends React.Component<IProps, RolesRoomSettingsTabState> {
|
export default class RolesRoomSettingsTab extends React.Component<IProps, RolesRoomSettingsTabState> {
|
||||||
|
@ -138,6 +139,7 @@ export default class RolesRoomSettingsTab extends React.Component<IProps, RolesR
|
||||||
public constructor(props: IProps) {
|
public constructor(props: IProps) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
|
isReady: false,
|
||||||
isRoomEncrypted: false,
|
isRoomEncrypted: false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -147,6 +149,7 @@ export default class RolesRoomSettingsTab extends React.Component<IProps, RolesR
|
||||||
this.setState({
|
this.setState({
|
||||||
isRoomEncrypted:
|
isRoomEncrypted:
|
||||||
(await this.context.getCrypto()?.isEncryptionEnabledInRoom(this.props.room.roomId)) || false,
|
(await this.context.getCrypto()?.isEncryptionEnabledInRoom(this.props.room.roomId)) || false,
|
||||||
|
isReady: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -473,17 +476,19 @@ export default class RolesRoomSettingsTab extends React.Component<IProps, RolesR
|
||||||
{canChangeLevels && <AddPrivilegedUsers room={room} defaultUserLevel={defaultUserLevel} />}
|
{canChangeLevels && <AddPrivilegedUsers room={room} defaultUserLevel={defaultUserLevel} />}
|
||||||
{mutedUsersSection}
|
{mutedUsersSection}
|
||||||
{bannedUsersSection}
|
{bannedUsersSection}
|
||||||
<SettingsFieldset
|
{this.state.isReady && (
|
||||||
legend={_t("room_settings|permissions|permissions_section")}
|
<SettingsFieldset
|
||||||
description={
|
legend={_t("room_settings|permissions|permissions_section")}
|
||||||
isSpaceRoom
|
description={
|
||||||
? _t("room_settings|permissions|permissions_section_description_space")
|
isSpaceRoom
|
||||||
: _t("room_settings|permissions|permissions_section_description_room")
|
? _t("room_settings|permissions|permissions_section_description_space")
|
||||||
}
|
: _t("room_settings|permissions|permissions_section_description_room")
|
||||||
>
|
}
|
||||||
{powerSelectors}
|
>
|
||||||
{eventPowerSelectors}
|
{powerSelectors}
|
||||||
</SettingsFieldset>
|
{eventPowerSelectors}
|
||||||
|
</SettingsFieldset>
|
||||||
|
)}
|
||||||
</SettingsSection>
|
</SettingsSection>
|
||||||
</SettingsTab>
|
</SettingsTab>
|
||||||
);
|
);
|
||||||
|
|
|
@ -27,16 +27,19 @@ describe("RolesRoomSettingsTab", () => {
|
||||||
let cli: MatrixClient;
|
let cli: MatrixClient;
|
||||||
let room: Room;
|
let room: Room;
|
||||||
|
|
||||||
const renderTab = (propRoom: Room = room): RenderResult => {
|
const renderTab = async (propRoom: Room = room): Promise<RenderResult> => {
|
||||||
return render(<RolesRoomSettingsTab room={propRoom} />, withClientContextRenderOptions(cli));
|
const renderResult = render(<RolesRoomSettingsTab room={propRoom} />, withClientContextRenderOptions(cli));
|
||||||
|
// Wait for the tab to be ready
|
||||||
|
await waitFor(() => expect(screen.getByText("Permissions")).toBeInTheDocument());
|
||||||
|
return renderResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getVoiceBroadcastsSelect = (): HTMLElement => {
|
const getVoiceBroadcastsSelect = async (): Promise<Element> => {
|
||||||
return renderTab().container.querySelector("select[label='Voice broadcasts']")!;
|
return (await renderTab()).container.querySelector("select[label='Voice broadcasts']")!;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getVoiceBroadcastsSelectedOption = (): HTMLElement => {
|
const getVoiceBroadcastsSelectedOption = async (): Promise<Element> => {
|
||||||
return renderTab().container.querySelector("select[label='Voice broadcasts'] option:checked")!;
|
return (await renderTab()).container.querySelector("select[label='Voice broadcasts'] option:checked")!;
|
||||||
};
|
};
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
@ -45,7 +48,7 @@ describe("RolesRoomSettingsTab", () => {
|
||||||
room = mkStubRoom(roomId, "test room", cli);
|
room = mkStubRoom(roomId, "test room", cli);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should allow an Admin to demote themselves but not others", () => {
|
it("should allow an Admin to demote themselves but not others", async () => {
|
||||||
mocked(cli.getRoom).mockReturnValue(room);
|
mocked(cli.getRoom).mockReturnValue(room);
|
||||||
// @ts-ignore - mocked doesn't support overloads properly
|
// @ts-ignore - mocked doesn't support overloads properly
|
||||||
mocked(room.currentState.getStateEvents).mockImplementation((type, key) => {
|
mocked(room.currentState.getStateEvents).mockImplementation((type, key) => {
|
||||||
|
@ -67,19 +70,19 @@ describe("RolesRoomSettingsTab", () => {
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
mocked(room.currentState.mayClientSendStateEvent).mockReturnValue(true);
|
mocked(room.currentState.mayClientSendStateEvent).mockReturnValue(true);
|
||||||
const { container } = renderTab();
|
const { container } = await renderTab();
|
||||||
|
|
||||||
expect(container.querySelector(`[placeholder="${cli.getUserId()}"]`)).not.toBeDisabled();
|
expect(container.querySelector(`[placeholder="${cli.getUserId()}"]`)).not.toBeDisabled();
|
||||||
expect(container.querySelector(`[placeholder="@admin:server"]`)).toBeDisabled();
|
expect(container.querySelector(`[placeholder="@admin:server"]`)).toBeDisabled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should initially show »Moderator« permission for »Voice broadcasts«", () => {
|
it("should initially show »Moderator« permission for »Voice broadcasts«", async () => {
|
||||||
expect(getVoiceBroadcastsSelectedOption().textContent).toBe("Moderator");
|
expect((await getVoiceBroadcastsSelectedOption()).textContent).toBe("Moderator");
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when setting »Default« permission for »Voice broadcasts«", () => {
|
describe("when setting »Default« permission for »Voice broadcasts«", () => {
|
||||||
beforeEach(() => {
|
beforeEach(async () => {
|
||||||
fireEvent.change(getVoiceBroadcastsSelect(), {
|
fireEvent.change(await getVoiceBroadcastsSelect(), {
|
||||||
target: { value: 0 },
|
target: { value: 0 },
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -122,12 +125,12 @@ describe("RolesRoomSettingsTab", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Join Element calls", () => {
|
describe("Join Element calls", () => {
|
||||||
it("defaults to moderator for joining calls", () => {
|
it("defaults to moderator for joining calls", async () => {
|
||||||
expect(getJoinCallSelectedOption(renderTab())?.textContent).toBe("Moderator");
|
expect(getJoinCallSelectedOption(await renderTab())?.textContent).toBe("Moderator");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("can change joining calls power level", () => {
|
it("can change joining calls power level", async () => {
|
||||||
const tab = renderTab();
|
const tab = await renderTab();
|
||||||
|
|
||||||
fireEvent.change(getJoinCallSelect(tab), {
|
fireEvent.change(getJoinCallSelect(tab), {
|
||||||
target: { value: 0 },
|
target: { value: 0 },
|
||||||
|
@ -143,12 +146,12 @@ describe("RolesRoomSettingsTab", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Start Element calls", () => {
|
describe("Start Element calls", () => {
|
||||||
it("defaults to moderator for starting calls", () => {
|
it("defaults to moderator for starting calls", async () => {
|
||||||
expect(getStartCallSelectedOption(renderTab())?.textContent).toBe("Moderator");
|
expect(getStartCallSelectedOption(await renderTab())?.textContent).toBe("Moderator");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("can change starting calls power level", () => {
|
it("can change starting calls power level", async () => {
|
||||||
const tab = renderTab();
|
const tab = await renderTab();
|
||||||
|
|
||||||
fireEvent.change(getStartCallSelect(tab), {
|
fireEvent.change(getStartCallSelect(tab), {
|
||||||
target: { value: 0 },
|
target: { value: 0 },
|
||||||
|
@ -164,10 +167,10 @@ describe("RolesRoomSettingsTab", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("hides when group calls disabled", () => {
|
it("hides when group calls disabled", async () => {
|
||||||
setGroupCallsEnabled(false);
|
setGroupCallsEnabled(false);
|
||||||
|
|
||||||
const tab = renderTab();
|
const tab = await renderTab();
|
||||||
|
|
||||||
expect(getStartCallSelect(tab)).toBeFalsy();
|
expect(getStartCallSelect(tab)).toBeFalsy();
|
||||||
expect(getStartCallSelectedOption(tab)).toBeFalsy();
|
expect(getStartCallSelectedOption(tab)).toBeFalsy();
|
||||||
|
@ -250,7 +253,7 @@ describe("RolesRoomSettingsTab", () => {
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
mocked(room.currentState.mayClientSendStateEvent).mockReturnValue(true);
|
mocked(room.currentState.mayClientSendStateEvent).mockReturnValue(true);
|
||||||
const { container } = renderTab();
|
const { container } = await renderTab();
|
||||||
|
|
||||||
const selector = container.querySelector(`[placeholder="${cli.getUserId()}"]`)!;
|
const selector = container.querySelector(`[placeholder="${cli.getUserId()}"]`)!;
|
||||||
fireEvent.change(selector, { target: { value: "50" } });
|
fireEvent.change(selector, { target: { value: "50" } });
|
||||||
|
|
Loading…
Reference in New Issue