From 16eb46fb1789c31c480afd4bb4665aaf53d3857d Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 30 Dec 2025 12:08:27 +0000 Subject: [PATCH] misc updates --- .../RoomStatusBarView.stories.tsx | 14 +- .../room/RoomStatusBar/RoomStatusBarView.tsx | 93 +++++------ playwright/e2e/timeline/safety-error.spec.ts | 152 +++++++++++------- .../message-no-harms-linux.png | Bin 0 -> 13770 bytes .../message-spam-expiry-linux.png | Bin 0 -> 17783 bytes .../message-spam-linux.png | Bin 0 -> 14691 bytes src/viewmodels/room/RoomStatusBar.ts | 13 +- 7 files changed, 148 insertions(+), 124 deletions(-) create mode 100644 playwright/snapshots/timeline/safety-error.spec.ts/message-no-harms-linux.png create mode 100644 playwright/snapshots/timeline/safety-error.spec.ts/message-spam-expiry-linux.png create mode 100644 playwright/snapshots/timeline/safety-error.spec.ts/message-spam-linux.png diff --git a/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.stories.tsx b/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.stories.tsx index c25201bb9a..534963d5b1 100644 --- a/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.stories.tsx +++ b/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.stories.tsx @@ -110,7 +110,6 @@ WithLocalRoomRetry.args = { export const WithMessageRejected = Template.bind({}); WithMessageRejected.args = { state: RoomStatusBarState.MessageRejected, - onResendAllClick: undefined, harms: ["org.matrix.msc4387.harassment"], }; @@ -123,6 +122,7 @@ WithMessageRejectedCanRetryInTime.args = { onResendAllClick: undefined, canRetryInSeconds: 5, harms: [], + isResending: false, }; /** @@ -132,6 +132,7 @@ export const WithMessageRejectedCanRetry = Template.bind({}); WithMessageRejectedCanRetry.args = { state: RoomStatusBarState.MessageRejected, harms: [], + isResending: false, }; /** @@ -151,15 +152,7 @@ export const WithMessageRejectedWithKnownHarm = Template.bind({}); WithMessageRejectedWithKnownHarm.args = { state: RoomStatusBarState.MessageRejected, harms: ["org.matrix.msc4387.spam"], -}; - -/** - * Rendered when a message was rejected by the server, and we use the generic message. - */ -export const WithMessageRejectedWithUnknownHarm = Template.bind({}); -WithMessageRejectedWithUnknownHarm.args = { - state: RoomStatusBarState.MessageRejected, - harms: ["any.old.harm"], + isResending: false, }; /** @@ -170,4 +163,5 @@ WithMessageRejectedWithServerMessage.args = { state: RoomStatusBarState.MessageRejected, harms: ["any.old.harm"], serverError: "OurServer rejects this content", + isResending: false, }; diff --git a/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.tsx b/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.tsx index 71e2f52e06..2532623d1c 100644 --- a/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.tsx +++ b/packages/shared-components/src/room/RoomStatusBar/RoomStatusBarView.tsx @@ -18,22 +18,22 @@ export interface RoomStatusBarViewActions { /** * Called when the user clicks on the 'resend all' button in the 'unsent messages' bar. */ - onResendAllClick?: () => void; + onResendAllClick: () => void; /** * Called when the user clicks on the 'cancel all' button in the 'unsent messages' bar. */ - onDeleteAllClick?: () => void; + onDeleteAllClick: () => void; /** * Called when the user clicks on the 'Retry' button in the 'failed to start chat' bar. */ - onRetryRoomCreationClick?: () => void; + onRetryRoomCreationClick: () => void; /** * Called when the user clicks on the 'Review Terms and Conditions' button. */ - onTermsAndConditionsClicked?: () => void; + onTermsAndConditionsClicked: () => void; } export enum RoomStatusBarState { @@ -72,13 +72,20 @@ export interface RoomStatusBarLocalRoomError { state: RoomStatusBarState.LocalRoomFailed; } -export interface RoomStatusBarMessageRejected { +export interface RoomStatusBarMessageRejectedRetryable { state: RoomStatusBarState.MessageRejected; canRetryInSeconds?: number; isResending: boolean; harms: string[]; serverError?: string; } +export interface RoomStatusBarMessageRejectedUnretryable { + state: RoomStatusBarState.MessageRejected; + harms: string[]; + serverError?: string; +} + +type RoomStatusBarMessageRejected = RoomStatusBarMessageRejectedRetryable | RoomStatusBarMessageRejectedUnretryable; export type RoomStatusBarViewSnapshot = | RoomStatusBarNoConnection @@ -197,10 +204,14 @@ function RoomStatusBarViewMessageRejected({ ); let subtitleText: string; - if (onResendAllClick) { - subtitleText = _t("room|status_bar|select_messages_to_retry"); - } else if (!onResendAllClick && snapshot.canRetryInSeconds !== undefined) { - subtitleText = _t("room|status_bar|message_rejected|can_retry_in", { count: snapshot.canRetryInSeconds }); + const canRetry = "isResending" in snapshot; + const isResending = "isResending" in snapshot && snapshot.isResending; + if (canRetry) { + if (snapshot.canRetryInSeconds !== undefined) { + subtitleText = _t("room|status_bar|message_rejected|can_retry_in", { count: snapshot.canRetryInSeconds }); + } else { + subtitleText = _t("room|status_bar|select_messages_to_retry"); + } } else { subtitleText = _t("room|status_bar|message_rejected|cannot_retry"); } @@ -210,30 +221,25 @@ function RoomStatusBarViewMessageRejected({ role="status" type="critical" actions={ - snapshot.isResending ? ( + isResending ? ( ) : ( <> - {onDeleteAllClick && ( - - )} - {(onResendAllClick || snapshot.canRetryInSeconds) && ( + + {canRetry && ( - )} - {vm.onResendAllClick && ( - - )} + + ) } diff --git a/playwright/e2e/timeline/safety-error.spec.ts b/playwright/e2e/timeline/safety-error.spec.ts index 080a8aa56e..294f928538 100644 --- a/playwright/e2e/timeline/safety-error.spec.ts +++ b/playwright/e2e/timeline/safety-error.spec.ts @@ -24,67 +24,95 @@ test.describe("Safety error rendering", () => { }, }); - test("should show a safety rejection of a message with no harms", { tag: ["@screenshot"] }, async ({ page, app, room, user }) => { - await page.route("**/_matrix/client/v3/**/send/**", async (route) => { - await route.fulfill({ json: {errcode: MatrixSafetyErrorCode.name, error: "Server provided error"}, status: 400 }); - }); - await app.viewRoomById(room.roomId); - const composer = app.getComposerField(); - await composer.fill("Hello!"); - await composer.press("Enter"); - const statusBar = page.getByRole("alert", { name: new RegExp(/.*Message rejected.*/)}); - await expect(statusBar).toMatchScreenshot("message-no-harms.png"); - }); + test( + "should show a safety rejection of a message with no harms", + { tag: ["@screenshot"] }, + async ({ page, app, room, user }) => { + await page.route("**/_matrix/client/v3/**/send/**", async (route) => { + await route.fulfill({ + json: { errcode: MatrixSafetyErrorCode.name, error: "Server provided error" }, + status: 400, + }); + }); + await app.viewRoomById(room.roomId); + const composer = app.getComposerField(); + await composer.fill("Hello!"); + await composer.press("Enter"); + const statusBar = page.getByRole("status", { name: new RegExp(/.*Message rejected.*/) }); + await expect(statusBar).toMatchScreenshot("message-no-harms.png"); + }, + ); - test("should show a safety rejection of a message with only unknown harms", { tag: ["@screenshot"] }, async ({ page, app, room, user }) => { - await page.route("**/_matrix/client/v3/**/send/**", async (route) => { - await route.fulfill({ json: {errcode: MatrixSafetyErrorCode.name, error: "Server provided error", harms: ["org.example.unknown-harm"]}, status: 400 }); - }); - await app.viewRoomById(room.roomId); - const composer = app.getComposerField(); - await composer.fill("Hello!"); - await composer.press("Enter"); - const statusBar = page.getByRole("alert", { name: new RegExp(/.*Message rejected.*/)}); - await expect(statusBar).toMatchScreenshot("message-no-harms.png"); - }); + test( + "should show a safety rejection of a message with only unknown harms", + { tag: ["@screenshot"] }, + async ({ page, app, room, user }) => { + await page.route("**/_matrix/client/v3/**/send/**", async (route) => { + await route.fulfill({ + json: { + errcode: MatrixSafetyErrorCode.name, + error: "Server provided error", + harms: ["org.example.unknown-harm"], + }, + status: 400, + }); + }); + await app.viewRoomById(room.roomId); + const composer = app.getComposerField(); + await composer.fill("Hello!"); + await composer.press("Enter"); + const statusBar = page.getByRole("status", { name: new RegExp(/.*Message rejected.*/) }); + await expect(statusBar).toMatchScreenshot("message-no-harms.png"); + }, + ); - test("should show a simple rejection of a message with spam harm", { tag: ["@screenshot"] }, async ({ page, app, room, user }) => { - await page.route("**/_matrix/client/v3/**/send/**", async (route) => { - await route.fulfill({ json: {errcode: MatrixSafetyErrorCode.name, error: "Ignored error", harms: ["org.matrix.msc4387.spam"]}, status: 400 }); - }); - await app.viewRoomById(room.roomId); - const composer = app.getComposerField(); - await composer.fill("Hello!"); - await composer.press("Enter"); - const statusBar = page.getByRole("alert", { name: new RegExp(/.*Message rejected.*/)}); - await expect(statusBar).toMatchScreenshot("message-spam.png"); - }); - test("should show a simple rejection of a message with spam harm with expiry", { tag: ["@screenshot"] }, async ({ page, app, room, user }) => { - await page.route("**/_matrix/client/v3/**/send/**", async (route) => { - await route.fulfill({ json: {errcode: MatrixSafetyErrorCode.name, error: "Ignored error", harms: ["org.matrix.msc4387.spam"], expiry: Date.now() + 1000}, status: 400 }); - }); - await app.viewRoomById(room.roomId); - const composer = app.getComposerField(); - await composer.fill("Hello!"); - await composer.press("Enter"); - const statusBar = page.getByRole("alert", { name: new RegExp(/.*Message rejected.*/)}); - await expect(statusBar).toMatchScreenshot("message-spam-expiry.png"); - // Permit a retry - await page.unroute("**/_matrix/client/v3/**/send/**"); - await statusBar.getByRole("button", { name: "Retry"}).click({ timeout: 1100 }); - await expect(statusBar).not.toBeVisible(); - }); - test("should show a simple rejection of an upload", { }, async ({ page, app, room, user }) => { - await page.route("**/_matrix/media/v3/upload**", async (route) => { - await route.fulfill({ json: {errcode: MatrixSafetyErrorCode.name, error: "Ignored error", harms: ["org.matrix.msc4387.spam"], expiry: Date.now() + 1000}, status: 400 }); - }); - await app.viewRoomById(room.roomId); - // Start waiting for file chooser before clicking. Note no await. - const fileChooserPromise = page.waitForEvent('filechooser'); - await page.getByRole("button", { name: "Attachment"}).click(); - const fileChooser = await fileChooserPromise; - await fileChooser.setFiles("playwright/sample-files/riot.png"); - await page.getByRole("button", { name: "Upload"}).click(); - await expect(page.getByRole("dialog", { name: "Upload Failed" })).toBeVisible(); - }); -}); \ No newline at end of file + test( + "should show a simple rejection of a message with spam harm", + { tag: ["@screenshot"] }, + async ({ page, app, room, user }) => { + await page.route("**/_matrix/client/v3/**/send/**", async (route) => { + await route.fulfill({ + json: { + errcode: MatrixSafetyErrorCode.name, + error: "Ignored error", + harms: ["org.matrix.msc4387.spam"], + }, + status: 400, + }); + }); + await app.viewRoomById(room.roomId); + const composer = app.getComposerField(); + await composer.fill("Hello!"); + await composer.press("Enter"); + const statusBar = page.getByRole("status", { name: new RegExp(/.*Message rejected.*/) }); + await expect(statusBar).toMatchScreenshot("message-spam.png"); + }, + ); + test( + "should show a simple rejection of a message with spam harm with expiry", + { tag: ["@screenshot"] }, + async ({ page, app, room, user }) => { + await page.route("**/_matrix/client/v3/**/send/**", async (route) => { + await route.fulfill({ + json: { + errcode: MatrixSafetyErrorCode.name, + error: "Ignored error", + harms: ["org.matrix.msc4387.spam"], + expiry: Date.now() + 1000, + }, + status: 400, + }); + }); + await app.viewRoomById(room.roomId); + const composer = app.getComposerField(); + await composer.fill("Hello!"); + await composer.press("Enter"); + const statusBar = page.getByRole("status", { name: new RegExp(/.*Message rejected.*/) }); + await expect(statusBar).toMatchScreenshot("message-spam-expiry.png"); + // Permit a retry + await page.unroute("**/_matrix/client/v3/**/send/**"); + await statusBar.getByRole("button", { name: "Retry all" }).click({ timeout: 1500 }); + await expect(statusBar).not.toBeVisible(); + }, + ); +}); diff --git a/playwright/snapshots/timeline/safety-error.spec.ts/message-no-harms-linux.png b/playwright/snapshots/timeline/safety-error.spec.ts/message-no-harms-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f98f73fb6585ee44de6f473f4e2f7d2a9a5bb5 GIT binary patch literal 13770 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 literal 0 HcmV?d00001 diff --git a/playwright/snapshots/timeline/safety-error.spec.ts/message-spam-linux.png b/playwright/snapshots/timeline/safety-error.spec.ts/message-spam-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..008df0ac5e539ed78660034eafa34b9cd8392366 GIT binary patch literal 14691 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 this.setSnapshot, this.snapshot.current.canRetryInSeconds * 1000); + this.timeout = setTimeout(() => this.setSnapshot(), this.snapshot.current.canRetryInSeconds * 1000); } }