Add report room dialog button/dialog. (#29513)
* Add report room dialog button/dialog. * Update copy * fixup tests / lint * Fix title in test. * update snapshot * Add unit tests for dialog * lint
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { render } from "jest-matrix-react";
|
||||
import userEvent from "@testing-library/user-event";
|
||||
import React from "react";
|
||||
|
||||
import { ReportRoomDialog } from "../../../../../src/components/views/dialogs/ReportRoomDialog";
|
||||
import SdkConfig from "../../../../../src/SdkConfig";
|
||||
import { stubClient } from "../../../../test-utils";
|
||||
|
||||
const ROOM_ID = "!foo:bar";
|
||||
|
||||
describe("ReportRoomDialog", () => {
|
||||
const onFinished: jest.Mock<any, any> = jest.fn();
|
||||
const reportRoom: jest.Mock<any, any> = jest.fn();
|
||||
beforeEach(() => {
|
||||
jest.resetAllMocks();
|
||||
const client = stubClient();
|
||||
client.reportRoom = reportRoom;
|
||||
|
||||
SdkConfig.put({
|
||||
report_event: {
|
||||
admin_message_md: `
|
||||
# You should know
|
||||
|
||||
This doesn't actually go **anywhere**.`,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
SdkConfig.reset();
|
||||
});
|
||||
|
||||
it("can close the dialog", async () => {
|
||||
const { getByTestId } = render(<ReportRoomDialog roomId={ROOM_ID} onFinished={onFinished} />);
|
||||
await userEvent.click(getByTestId("dialog-cancel-button"));
|
||||
expect(onFinished).toHaveBeenCalledWith(false);
|
||||
});
|
||||
|
||||
it("displays admin message", async () => {
|
||||
const { container } = render(<ReportRoomDialog roomId={ROOM_ID} onFinished={onFinished} />);
|
||||
expect(container).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it("can submit a report", async () => {
|
||||
const REASON = "This room is bad!";
|
||||
const { getByLabelText, getByText, getByRole } = render(
|
||||
<ReportRoomDialog roomId={ROOM_ID} onFinished={onFinished} />,
|
||||
);
|
||||
|
||||
await userEvent.type(getByLabelText("Reason"), REASON);
|
||||
await userEvent.click(getByRole("button", { name: "Send report" }));
|
||||
|
||||
expect(reportRoom).toHaveBeenCalledWith(ROOM_ID, REASON);
|
||||
expect(getByText("Your report was sent.")).toBeInTheDocument();
|
||||
|
||||
await userEvent.click(getByRole("button", { name: "Close dialog" }));
|
||||
expect(onFinished).toHaveBeenCalledWith(true);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,100 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ReportRoomDialog displays admin message 1`] = `
|
||||
<div>
|
||||
<div
|
||||
data-focus-guard="true"
|
||||
style="width: 1px; height: 0px; padding: 0px; overflow: hidden; position: fixed; top: 1px; left: 1px;"
|
||||
tabindex="0"
|
||||
/>
|
||||
<div
|
||||
aria-describedby="mx_ReportEventDialog"
|
||||
aria-labelledby="mx_BaseDialog_title"
|
||||
class="mx_ReportRoomDialog mx_Dialog_fixedWidth"
|
||||
data-focus-lock-disabled="false"
|
||||
role="dialog"
|
||||
>
|
||||
<div
|
||||
class="mx_Dialog_header"
|
||||
>
|
||||
<h1
|
||||
class="mx_Heading_h3 mx_Dialog_title"
|
||||
id="mx_BaseDialog_title"
|
||||
>
|
||||
Report Room
|
||||
</h1>
|
||||
</div>
|
||||
<form
|
||||
class="_root_19upo_16"
|
||||
id="mx_ReportEventDialog"
|
||||
>
|
||||
<p>
|
||||
Report this room to your homeserver admin. This will send the room's unique ID, but if messages are encrypted, the administrator won't be able to read them or view shared files.
|
||||
</p>
|
||||
<p>
|
||||
<h1>
|
||||
You should know
|
||||
</h1>
|
||||
|
||||
|
||||
<p>
|
||||
This doesn't actually go
|
||||
<strong>
|
||||
anywhere
|
||||
</strong>
|
||||
.
|
||||
</p>
|
||||
|
||||
|
||||
</p>
|
||||
<div
|
||||
class="_field_19upo_26"
|
||||
>
|
||||
<label
|
||||
class="_label_19upo_59"
|
||||
for="mx_ReportRoomDialog_reason"
|
||||
>
|
||||
Reason
|
||||
</label>
|
||||
<textarea
|
||||
id="mx_ReportRoomDialog_reason"
|
||||
placeholder=" Reason for reporting..."
|
||||
rows="5"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="mx_Dialog_buttons"
|
||||
>
|
||||
<span
|
||||
class="mx_Dialog_buttons_row"
|
||||
>
|
||||
<button
|
||||
data-testid="dialog-cancel-button"
|
||||
type="button"
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
class="mx_Dialog_primary"
|
||||
data-testid="dialog-primary-button"
|
||||
type="button"
|
||||
>
|
||||
Send report
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
<div
|
||||
aria-label="Close dialog"
|
||||
class="mx_AccessibleButton mx_Dialog_cancelButton"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
data-focus-guard="true"
|
||||
style="width: 1px; height: 0px; padding: 0px; overflow: hidden; position: fixed; top: 1px; left: 1px;"
|
||||
tabindex="0"
|
||||
/>
|
||||
</div>
|
||||
`;
|
||||
Reference in New Issue
Block a user