mirror of
https://github.com/vector-im/element-web.git
synced 2025-12-05 17:31:41 +01:00
Make code scanning happier (#31243)
* Make code scanning happier Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add tests Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Discard changes to src/components/views/auth/CaptchaForm.tsx --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
bfc2c884bc
commit
f84e2815d0
@ -7,16 +7,9 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React, { type JSX } from "react";
|
import React, { type JSX } from "react";
|
||||||
import {
|
import { EventType, type RoomMember, type RoomState, RoomStateEvent, type Room } from "matrix-js-sdk/src/matrix";
|
||||||
EventType,
|
|
||||||
type RoomMember,
|
|
||||||
type RoomState,
|
|
||||||
RoomStateEvent,
|
|
||||||
type Room,
|
|
||||||
type IContent,
|
|
||||||
} from "matrix-js-sdk/src/matrix";
|
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import { throttle, get } from "lodash";
|
import { throttle, get, set } from "lodash";
|
||||||
import { KnownMembership, type RoomPowerLevelsEventContent } from "matrix-js-sdk/src/types";
|
import { KnownMembership, type RoomPowerLevelsEventContent } from "matrix-js-sdk/src/types";
|
||||||
|
|
||||||
import { _t, _td, type TranslationKey } from "../../../../../languageHandler";
|
import { _t, _td, type TranslationKey } from "../../../../../languageHandler";
|
||||||
@ -137,6 +130,8 @@ interface RolesRoomSettingsTabState {
|
|||||||
isReady: boolean;
|
isReady: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const EVENTS_LEVEL_PREFIX = "event_levels_";
|
||||||
|
|
||||||
export default class RolesRoomSettingsTab extends React.Component<IProps, RolesRoomSettingsTabState> {
|
export default class RolesRoomSettingsTab extends React.Component<IProps, RolesRoomSettingsTabState> {
|
||||||
public static contextType = MatrixClientContext;
|
public static contextType = MatrixClientContext;
|
||||||
declare public context: React.ContextType<typeof MatrixClientContext>;
|
declare public context: React.ContextType<typeof MatrixClientContext>;
|
||||||
@ -199,24 +194,10 @@ export default class RolesRoomSettingsTab extends React.Component<IProps, RolesR
|
|||||||
// Clone the power levels just in case
|
// Clone the power levels just in case
|
||||||
plContent = Object.assign({}, plContent);
|
plContent = Object.assign({}, plContent);
|
||||||
|
|
||||||
const eventsLevelPrefix = "event_levels_";
|
if (powerLevelKey.startsWith(EVENTS_LEVEL_PREFIX)) {
|
||||||
|
set(plContent, ["events", powerLevelKey.slice(EVENTS_LEVEL_PREFIX.length)], value);
|
||||||
if (powerLevelKey.startsWith(eventsLevelPrefix)) {
|
|
||||||
// deep copy "events" object, Object.assign itself won't deep copy
|
|
||||||
plContent["events"] = Object.assign({}, plContent["events"] || {});
|
|
||||||
plContent["events"][powerLevelKey.slice(eventsLevelPrefix.length)] = value;
|
|
||||||
} else {
|
} else {
|
||||||
const keyPath = powerLevelKey.split(".");
|
set(plContent, powerLevelKey.split("."), value);
|
||||||
let parentObj: IContent = {};
|
|
||||||
let currentObj: IContent = plContent;
|
|
||||||
for (const key of keyPath) {
|
|
||||||
if (!currentObj[key]) {
|
|
||||||
currentObj[key] = {};
|
|
||||||
}
|
|
||||||
parentObj = currentObj;
|
|
||||||
currentObj = currentObj[key];
|
|
||||||
}
|
|
||||||
parentObj[keyPath[keyPath.length - 1]] = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -462,7 +443,7 @@ export default class RolesRoomSettingsTab extends React.Component<IProps, RolesR
|
|||||||
value={eventsLevels[eventType]}
|
value={eventsLevels[eventType]}
|
||||||
usersDefault={defaultUserLevel}
|
usersDefault={defaultUserLevel}
|
||||||
disabled={!canChangeLevels || currentUserLevel < eventsLevels[eventType]}
|
disabled={!canChangeLevels || currentUserLevel < eventsLevels[eventType]}
|
||||||
powerLevelKey={"event_levels_" + eventType}
|
powerLevelKey={EVENTS_LEVEL_PREFIX + eventType}
|
||||||
onChange={this.onPowerLevelsChanged}
|
onChange={this.onPowerLevelsChanged}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -247,4 +247,42 @@ describe("RolesRoomSettingsTab", () => {
|
|||||||
deferred.reject("Error");
|
deferred.reject("Error");
|
||||||
await waitFor(() => expect(selector).toHaveValue("100"));
|
await waitFor(() => expect(selector).toHaveValue("100"));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should allow changing events power levels", async () => {
|
||||||
|
mocked(cli.sendStateEvent).mockResolvedValue({ event_id: "$eventId" });
|
||||||
|
mocked(cli.getRoom).mockReturnValue(room);
|
||||||
|
mocked(room.currentState.mayClientSendStateEvent).mockReturnValue(true);
|
||||||
|
const { container } = await renderTab();
|
||||||
|
|
||||||
|
const selector = container.querySelector(`[placeholder="Change topic"]`)!;
|
||||||
|
fireEvent.change(selector, { target: { value: "0" } });
|
||||||
|
|
||||||
|
expect(cli.sendStateEvent).toHaveBeenCalledWith(
|
||||||
|
room.roomId,
|
||||||
|
"m.room.power_levels",
|
||||||
|
expect.objectContaining({
|
||||||
|
events: expect.objectContaining({
|
||||||
|
"m.room.topic": 0,
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should allow changing top level power levels", async () => {
|
||||||
|
mocked(cli.sendStateEvent).mockResolvedValue({ event_id: "$eventId" });
|
||||||
|
mocked(cli.getRoom).mockReturnValue(room);
|
||||||
|
mocked(room.currentState.mayClientSendStateEvent).mockReturnValue(true);
|
||||||
|
const { container } = await renderTab();
|
||||||
|
|
||||||
|
const selector = container.querySelector(`[placeholder="Remove users"]`)!;
|
||||||
|
fireEvent.change(selector, { target: { value: "0" } });
|
||||||
|
|
||||||
|
expect(cli.sendStateEvent).toHaveBeenCalledWith(
|
||||||
|
room.roomId,
|
||||||
|
"m.room.power_levels",
|
||||||
|
expect.objectContaining({
|
||||||
|
kick: 0,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user