From 757e4e1395fa1c84510d61b8911f04ba3f5c9cb0 Mon Sep 17 00:00:00 2001
From: Half-Shot <will@half-shot.uk>
Date: Tue, 3 Jun 2025 13:57:57 +0100
Subject: [PATCH] Update tests

---
 .../e2e/modules/custom-component.spec.ts      |   5 +++++
 .../sample-files/custom-component-module.js   |  12 +++++++++++-
 ...stom-component-tile-fall-through-linux.png | Bin 0 -> 3803 bytes
 .../custom-component-tile-linux.png           | Bin 4128 -> 4098 bytes
 4 files changed, 16 insertions(+), 1 deletion(-)
 create mode 100644 playwright/snapshots/modules/custom-component.spec.ts/custom-component-tile-fall-through-linux.png

diff --git a/playwright/e2e/modules/custom-component.spec.ts b/playwright/e2e/modules/custom-component.spec.ts
index e0741f18ce..0a48c800c7 100644
--- a/playwright/e2e/modules/custom-component.spec.ts
+++ b/playwright/e2e/modules/custom-component.spec.ts
@@ -28,6 +28,11 @@ test.describe("Custom Component Module", () => {
         await app.client.sendMessage(room.roomId, "Simple message");
         await expect(await page.getByText("Simple message")).toMatchScreenshot("custom-component-tile.png");
     });
+    test("should fall through if one module does not render a component", { tag: "@screenshot" }, async ({ page, room, app }) => {
+        await app.viewRoomById(room.roomId);
+        await app.client.sendMessage(room.roomId, "Fall through here");
+        await expect(await page.getByText("Fall through here")).toMatchScreenshot("custom-component-tile-fall-through.png");
+    });
     test(
         "should render the original content of a textual event conditionally",
         { tag: "@screenshot" },
diff --git a/playwright/sample-files/custom-component-module.js b/playwright/sample-files/custom-component-module.js
index 14cd378838..62cfe883da 100644
--- a/playwright/sample-files/custom-component-module.js
+++ b/playwright/sample-files/custom-component-module.js
@@ -9,13 +9,23 @@ export default class CustomComponentModule {
     static moduleApiVersion = "^1.0.0";
     constructor(api) {
         this.api = api;
-        this.api.customComponents.register("TextualBody", (props, originalComponent) => {
+        this.api.customComponents.registerMessageRenderer("m.room.message", (props, originalComponent) => {
             const body = props.mxEvent.getContent().body;
             if (body === "Do not replace me") {
                 return originalComponent();
             }
+            else if (body === "Fall through here"){
+                return null;
+            }
             return `Custom text for ${body}`;
         });
+        this.api.customComponents.registerMessageRenderer(/m\.room\.message/, (props) => {
+            const body = props.mxEvent.getContent().body;
+            if (body !== "Fall through here") {
+                return null;
+            }
+            return `Fallthrough text for ${body}`;
+        });
     }
     async load() {}
 }
diff --git a/playwright/snapshots/modules/custom-component.spec.ts/custom-component-tile-fall-through-linux.png b/playwright/snapshots/modules/custom-component.spec.ts/custom-component-tile-fall-through-linux.png
new file mode 100644
index 0000000000000000000000000000000000000000..952b0110b6526bed692a63031cc063ba9fd7165c
GIT binary patch
literal 3803
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

literal 0
HcmV?d00001

diff --git a/playwright/snapshots/modules/custom-component.spec.ts/custom-component-tile-linux.png b/playwright/snapshots/modules/custom-component.spec.ts/custom-component-tile-linux.png
index ed626c902a1972a8c65cea633abe6f492521b80a..410365982b864a0a97d16e2a78a4acf3421ef15a 100644
GIT binary patch
delta 4087
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

delta 4118
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

-- 
GitLab