Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
t3chguy/playwright-homeservers
Michael Telatynski 2025-01-07 13:38:50 +00:00
parent e4cff3fba0
commit 4142c809a3
No known key found for this signature in database
GPG Key ID: A2B008A5F49F5D0D
5 changed files with 25 additions and 25 deletions

View File

@ -69,29 +69,15 @@ async function sendActionFromIntegrationManager(
await iframe.getByRole("button", { name: "Press to send action" }).click();
}
async function clickUntilGone(page: Page, selector: string, attempt = 0) {
if (attempt === 11) {
throw new Error("clickUntilGone attempt count exceeded");
}
await page.locator(selector).last().click();
const count = await page.locator(selector).count();
if (count > 0) {
return clickUntilGone(page, selector, ++attempt);
}
}
async function expectKickedMessage(page: Page, shouldExist: boolean) {
// Expand any event summaries, we can't use a click multiple here because clicking one might de-render others
// This is quite horrible but seems the most stable way of clicking 0-N buttons,
// one at a time with a full re-evaluation after each click
await clickUntilGone(page, ".mx_GenericEventListSummary_toggle[aria-expanded=false]");
await expect(async () => {
await page.locator(".mx_GenericEventListSummary_toggle[aria-expanded=false]").last().click();
await expect(page.getByText(`${USER_DISPLAY_NAME} removed ${BOT_DISPLAY_NAME}: ${KICK_REASON}`)).toBeVisible({
visible: shouldExist,
});
}).toPass();
// Check for the event message (or lack thereof)
await expect(page.getByText(`${USER_DISPLAY_NAME} removed ${BOT_DISPLAY_NAME}: ${KICK_REASON}`)).toBeVisible({
visible: shouldExist,
});
}
test.describe("Integration Manager: Kick", () => {

View File

@ -121,7 +121,7 @@ export class Bot extends Client {
return logger as unknown as Logger;
}
const logger = getLogger(`cypress bot ${credentials.userId}`);
const logger = getLogger(`playwright bot ${credentials.userId}`);
const keys = {};

View File

@ -23,6 +23,7 @@ class StaleScreenshotReporter implements Reporter {
private success = true;
public onTestEnd(test: TestCase): void {
if (!test.ok()) return;
for (const annotation of test.annotations) {
if (annotation.type === "_screenshot") {
this.screenshots.add(annotation.description);

View File

@ -107,9 +107,8 @@ function textForMemberEvent(
allowJSX: boolean,
showHiddenEvents?: boolean,
): (() => string) | null {
// XXX: SYJS-16 "sender is sometimes null for join messages"
const senderName = ev.sender?.name || getRoomMemberDisplayname(client, ev);
const targetName = ev.target?.name || getRoomMemberDisplayname(client, ev, ev.getStateKey());
const senderName = getRoomMemberDisplayname(client, ev);
const targetName = getRoomMemberDisplayname(client, ev, ev.getStateKey());
const prevContent = ev.getPrevContent();
const content = ev.getContent();
const reason = content.reason;

View File

@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details.
*/
import React from "react";
import { MatrixEvent } from "matrix-js-sdk/src/matrix";
import { MatrixEvent, RoomMember, RoomMemberEvent } from "matrix-js-sdk/src/matrix";
import RoomContext from "../../../contexts/RoomContext";
import * as TextForEvent from "../../../TextForEvent";
@ -21,6 +21,20 @@ export default class TextualEvent extends React.Component<IProps> {
public static contextType = RoomContext;
declare public context: React.ContextType<typeof RoomContext>;
public componentDidMount(): void {
MatrixClientPeg.get()?.on(RoomMemberEvent.Name, this.onMemberNameUpdate);
}
public componentWillUnmount(): void {
MatrixClientPeg.get()?.off(RoomMemberEvent.Name, this.onMemberNameUpdate);
}
private onMemberNameUpdate = (event: MatrixEvent, member: RoomMember): void => {
if (member.userId === this.props.mxEvent.getSender() || member.userId === this.props.mxEvent.getStateKey()) {
this.forceUpdate();
}
};
public render(): React.ReactNode {
const text = TextForEvent.textForEvent(
this.props.mxEvent,