From 17dff271502854f1976c2d81788a1941717e9938 Mon Sep 17 00:00:00 2001 From: Justin Carlson Date: Tue, 21 Mar 2023 15:24:23 -0400 Subject: [PATCH 1/6] Use sender if sticker picker widget does not have creatorUserId --- src/components/views/rooms/Stickerpicker.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/Stickerpicker.tsx b/src/components/views/rooms/Stickerpicker.tsx index f1808aab1f4..4a3e809185f 100644 --- a/src/components/views/rooms/Stickerpicker.tsx +++ b/src/components/views/rooms/Stickerpicker.tsx @@ -273,7 +273,7 @@ export default class Stickerpicker extends React.PureComponent { roomId: stickerpickerWidget.content.roomId, eventId: stickerpickerWidget.content.eventId, avatar_url: stickerpickerWidget.content.avatar_url, - creatorUserId: stickerpickerWidget.content.creatorUserId, + creatorUserId: stickerpickerWidget.content.creatorUserId || stickerpickerWidget.sender, }; stickersContent = ( From 44c0dcb963685bcf41f77686aadf124d595bae8a Mon Sep 17 00:00:00 2001 From: Justin Carlson Date: Tue, 21 Mar 2023 15:24:41 -0400 Subject: [PATCH 2/6] Add creatorUserId when creating sticker picker widgets --- src/utils/WidgetUtils.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/utils/WidgetUtils.ts b/src/utils/WidgetUtils.ts index 986d050b0c2..9fb888bc638 100644 --- a/src/utils/WidgetUtils.ts +++ b/src/utils/WidgetUtils.ts @@ -236,13 +236,6 @@ export default class WidgetUtils { widgetName: string, widgetData: IWidgetData, ): Promise { - const content = { - type: widgetType.preferred, - url: widgetUrl, - name: widgetName, - data: widgetData, - }; - const client = MatrixClientPeg.get(); // Get the current widgets and clone them before we modify them, otherwise // we'll modify the content of the old event. @@ -257,11 +250,21 @@ export default class WidgetUtils { const addingWidget = Boolean(widgetUrl); + const userId = client.getSafeUserId(); + + const content = { + type: widgetType.preferred, + url: widgetUrl, + name: widgetName, + data: widgetData, + creatorUserId: userId, + }; + // Add new widget / update if (addingWidget) { userWidgets[widgetId] = { content: content, - sender: client.getUserId()!, + sender: userId, state_key: widgetId, type: "m.widget", id: widgetId, From bfa822fa52b6261d5ef797af76200638e866163c Mon Sep 17 00:00:00 2001 From: Justin Carlson Date: Wed, 22 Mar 2023 14:31:09 -0400 Subject: [PATCH 3/6] Add e2e test for stickerpicker widget missing creatorUserId --- cypress/e2e/widgets/stickers.spec.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/cypress/e2e/widgets/stickers.spec.ts b/cypress/e2e/widgets/stickers.spec.ts index 27986af10e7..ceaab2604d3 100644 --- a/cypress/e2e/widgets/stickers.spec.ts +++ b/cypress/e2e/widgets/stickers.spec.ts @@ -159,4 +159,32 @@ describe("Stickers", () => { expectTimelineSticker(roomId2); }); }); + + it("should handle a sticker picker widget missing creatorUserId", () => { + cy.createRoom({ + name: ROOM_NAME_1, + }).as("roomId1"); + cy.setAccountData("m.widgets", { + [STICKER_PICKER_WIDGET_ID]: { + content: { + type: "m.stickerpicker", + name: STICKER_PICKER_WIDGET_NAME, + url: stickerPickerUrl, + // No creatorUserId + }, + id: STICKER_PICKER_WIDGET_ID, + }, + }).as("stickers"); + + cy.all([ + cy.get("@roomId1"), + cy.get<{}>("@stickers"), + ]).then(([roomId1]) => { + cy.viewRoomByName(ROOM_NAME_1); + cy.url().should("contain", `/#/room/${roomId1}`); + openStickerPicker(); + sendStickerFromPicker(); + expectTimelineSticker(roomId1); + }); + }); }); From f3b5425f9b35a97e6f0cb4377b3876ee38301f4c Mon Sep 17 00:00:00 2001 From: Justin Carlson Date: Wed, 22 Mar 2023 15:10:00 -0400 Subject: [PATCH 4/6] Fix stickerpicker widget event data in e2e tests --- cypress/e2e/widgets/stickers.spec.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cypress/e2e/widgets/stickers.spec.ts b/cypress/e2e/widgets/stickers.spec.ts index ceaab2604d3..e3b4dc2aa16 100644 --- a/cypress/e2e/widgets/stickers.spec.ts +++ b/cypress/e2e/widgets/stickers.spec.ts @@ -135,6 +135,9 @@ describe("Stickers", () => { url: stickerPickerUrl, creatorUserId: "@userId", }, + sender: "@userId", + state_key: STICKER_PICKER_WIDGET_ID, + type: "m.widget", id: STICKER_PICKER_WIDGET_ID, }, }).as("stickers"); @@ -172,6 +175,9 @@ describe("Stickers", () => { url: stickerPickerUrl, // No creatorUserId }, + sender: "@userId", + state_key: STICKER_PICKER_WIDGET_ID, + type: "m.widget", id: STICKER_PICKER_WIDGET_ID, }, }).as("stickers"); From 46618a69fa3894ad2630592afafcfc721a33db5e Mon Sep 17 00:00:00 2001 From: Justin Carlson Date: Wed, 22 Mar 2023 17:12:49 -0400 Subject: [PATCH 5/6] Fix userId in stickerpicker e2e tests --- cypress/e2e/widgets/stickers.spec.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cypress/e2e/widgets/stickers.spec.ts b/cypress/e2e/widgets/stickers.spec.ts index e3b4dc2aa16..1b02cf890db 100644 --- a/cypress/e2e/widgets/stickers.spec.ts +++ b/cypress/e2e/widgets/stickers.spec.ts @@ -103,12 +103,14 @@ describe("Stickers", () => { let stickerPickerUrl: string; let homeserver: HomeserverInstance; + let userId: string; beforeEach(() => { cy.startHomeserver("default").then((data) => { homeserver = data; - cy.initTestUser(homeserver, "Sally"); + cy.initTestUser(homeserver, "Sally") + .then(user => userId = user.userId); }); cy.serveHtmlFile(WIDGET_HTML).then((url) => { stickerPickerUrl = url; @@ -133,9 +135,9 @@ describe("Stickers", () => { type: "m.stickerpicker", name: STICKER_PICKER_WIDGET_NAME, url: stickerPickerUrl, - creatorUserId: "@userId", + creatorUserId: userId, }, - sender: "@userId", + sender: userId, state_key: STICKER_PICKER_WIDGET_ID, type: "m.widget", id: STICKER_PICKER_WIDGET_ID, @@ -175,7 +177,7 @@ describe("Stickers", () => { url: stickerPickerUrl, // No creatorUserId }, - sender: "@userId", + sender: userId, state_key: STICKER_PICKER_WIDGET_ID, type: "m.widget", id: STICKER_PICKER_WIDGET_ID, From 3416bb05e835bf91b97fa339eb0c1a2155596b84 Mon Sep 17 00:00:00 2001 From: Justin Carlson Date: Wed, 22 Mar 2023 17:32:47 -0400 Subject: [PATCH 6/6] Fix linter errors --- cypress/e2e/widgets/stickers.spec.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cypress/e2e/widgets/stickers.spec.ts b/cypress/e2e/widgets/stickers.spec.ts index 1b02cf890db..44c5b250da0 100644 --- a/cypress/e2e/widgets/stickers.spec.ts +++ b/cypress/e2e/widgets/stickers.spec.ts @@ -109,8 +109,7 @@ describe("Stickers", () => { cy.startHomeserver("default").then((data) => { homeserver = data; - cy.initTestUser(homeserver, "Sally") - .then(user => userId = user.userId); + cy.initTestUser(homeserver, "Sally").then((user) => (userId = user.userId)); }); cy.serveHtmlFile(WIDGET_HTML).then((url) => { stickerPickerUrl = url; @@ -184,10 +183,7 @@ describe("Stickers", () => { }, }).as("stickers"); - cy.all([ - cy.get("@roomId1"), - cy.get<{}>("@stickers"), - ]).then(([roomId1]) => { + cy.all([cy.get("@roomId1"), cy.get<{}>("@stickers")]).then(([roomId1]) => { cy.viewRoomByName(ROOM_NAME_1); cy.url().should("contain", `/#/room/${roomId1}`); openStickerPicker();