Skip to content

Commit 27eb537

Browse files
justinbotsu-ex
authored andcommitted
Fix creatorUserId is required error when opening sticker picker (matrix-org#10423)
* Use sender if sticker picker widget does not have creatorUserId * Add creatorUserId when creating sticker picker widgets * Add e2e test for stickerpicker widget missing creatorUserId * Fix stickerpicker widget event data in e2e tests * Fix userId in stickerpicker e2e tests * Fix linter errors
1 parent c291d03 commit 27eb537

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

cypress/e2e/widgets/stickers.spec.ts

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,13 @@ describe("Stickers", () => {
103103

104104
let stickerPickerUrl: string;
105105
let homeserver: HomeserverInstance;
106+
let userId: string;
106107

107108
beforeEach(() => {
108109
cy.startHomeserver("default").then((data) => {
109110
homeserver = data;
110111

111-
cy.initTestUser(homeserver, "Sally");
112+
cy.initTestUser(homeserver, "Sally").then((user) => (userId = user.userId));
112113
});
113114
cy.serveHtmlFile(WIDGET_HTML).then((url) => {
114115
stickerPickerUrl = url;
@@ -133,8 +134,11 @@ describe("Stickers", () => {
133134
type: "m.stickerpicker",
134135
name: STICKER_PICKER_WIDGET_NAME,
135136
url: stickerPickerUrl,
136-
creatorUserId: "@userId",
137+
creatorUserId: userId,
137138
},
139+
sender: userId,
140+
state_key: STICKER_PICKER_WIDGET_ID,
141+
type: "m.widget",
138142
id: STICKER_PICKER_WIDGET_ID,
139143
},
140144
}).as("stickers");
@@ -159,4 +163,32 @@ describe("Stickers", () => {
159163
expectTimelineSticker(roomId2);
160164
});
161165
});
166+
167+
it("should handle a sticker picker widget missing creatorUserId", () => {
168+
cy.createRoom({
169+
name: ROOM_NAME_1,
170+
}).as("roomId1");
171+
cy.setAccountData("m.widgets", {
172+
[STICKER_PICKER_WIDGET_ID]: {
173+
content: {
174+
type: "m.stickerpicker",
175+
name: STICKER_PICKER_WIDGET_NAME,
176+
url: stickerPickerUrl,
177+
// No creatorUserId
178+
},
179+
sender: userId,
180+
state_key: STICKER_PICKER_WIDGET_ID,
181+
type: "m.widget",
182+
id: STICKER_PICKER_WIDGET_ID,
183+
},
184+
}).as("stickers");
185+
186+
cy.all([cy.get<string>("@roomId1"), cy.get<{}>("@stickers")]).then(([roomId1]) => {
187+
cy.viewRoomByName(ROOM_NAME_1);
188+
cy.url().should("contain", `/#/room/${roomId1}`);
189+
openStickerPicker();
190+
sendStickerFromPicker();
191+
expectTimelineSticker(roomId1);
192+
});
193+
});
162194
});

src/components/views/rooms/Stickerpicker.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ export default class Stickerpicker extends React.PureComponent<IProps, IState> {
273273
roomId: stickerpickerWidget.content.roomId,
274274
eventId: stickerpickerWidget.content.eventId,
275275
avatar_url: stickerpickerWidget.content.avatar_url,
276-
creatorUserId: stickerpickerWidget.content.creatorUserId,
276+
creatorUserId: stickerpickerWidget.content.creatorUserId || stickerpickerWidget.sender,
277277
};
278278

279279
stickersContent = (

src/utils/WidgetUtils.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,6 @@ export default class WidgetUtils {
236236
widgetName: string,
237237
widgetData: IWidgetData,
238238
): Promise<void> {
239-
const content = {
240-
type: widgetType.preferred,
241-
url: widgetUrl,
242-
name: widgetName,
243-
data: widgetData,
244-
};
245-
246239
const client = MatrixClientPeg.get();
247240
// Get the current widgets and clone them before we modify them, otherwise
248241
// we'll modify the content of the old event.
@@ -257,11 +250,21 @@ export default class WidgetUtils {
257250

258251
const addingWidget = Boolean(widgetUrl);
259252

253+
const userId = client.getSafeUserId();
254+
255+
const content = {
256+
type: widgetType.preferred,
257+
url: widgetUrl,
258+
name: widgetName,
259+
data: widgetData,
260+
creatorUserId: userId,
261+
};
262+
260263
// Add new widget / update
261264
if (addingWidget) {
262265
userWidgets[widgetId] = {
263266
content: content,
264-
sender: client.getUserId()!,
267+
sender: userId,
265268
state_key: widgetId,
266269
type: "m.widget",
267270
id: widgetId,

0 commit comments

Comments
 (0)