Update StopGapWidgetDriver to support sticky events (#31205)

* Update StopGapWidgetDriver to support sticky events

* Update to-device

* Update tests

* Clean up duplication

* lint

* yarn lock
This commit is contained in:
Will Hunt
2025-12-29 13:34:01 +00:00
committed by GitHub
parent 3f472c8812
commit 004dbcd062
6 changed files with 166 additions and 42 deletions

View File

@@ -308,6 +308,8 @@ export function createTestClient(): MatrixClient {
_unstable_cancelScheduledDelayedEvent: jest.fn(),
_unstable_restartScheduledDelayedEvent: jest.fn(),
_unstable_sendScheduledDelayedEvent: jest.fn(),
_unstable_sendStickyEvent: jest.fn(),
_unstable_sendStickyDelayedEvent: jest.fn(),
searchUserDirectory: jest.fn().mockResolvedValue({ limited: false, results: [] }),
setDeviceVerified: jest.fn(),

View File

@@ -131,6 +131,7 @@ describe("ElementWidgetDriver", () => {
"org.matrix.msc3819.receive.to_device:m.call.replaces",
"org.matrix.msc4157.send.delayed_event",
"org.matrix.msc4157.update_delayed_event",
"org.matrix.msc4354.send_sticky_event",
// RTC decline events (send/receive, unstable/stable)
"org.matrix.msc2762.send.event:org.matrix.msc4310.rtc.decline",
"org.matrix.msc2762.send.event:m.rtc.decline",
@@ -593,6 +594,84 @@ describe("ElementWidgetDriver", () => {
});
});
describe("sendStickyEvent", () => {
let driver: WidgetDriver;
const roomId = "!this-room-id";
beforeEach(() => {
driver = mkDefaultDriver();
});
it("sends sticky message events", async () => {
client._unstable_sendStickyEvent.mockResolvedValue({
event_id: "id",
});
await expect(driver.sendStickyEvent(2000, EventType.RoomMessage, {})).resolves.toEqual({
roomId,
eventId: "id",
});
expect(client._unstable_sendStickyEvent).toHaveBeenCalledWith(
roomId,
2000,
null,
EventType.RoomMessage,
{},
);
});
});
describe("sendDelayedStickyEvent", () => {
let driver: WidgetDriver;
const roomId = "!this-room-id";
beforeEach(() => {
driver = mkDefaultDriver();
});
it("sends delayed sticky message events", async () => {
client._unstable_sendStickyDelayedEvent.mockResolvedValue({
delay_id: "id",
});
await expect(driver.sendDelayedStickyEvent(1000, null, 2000, EventType.RoomMessage, {})).resolves.toEqual({
roomId,
delayId: "id",
});
expect(client._unstable_sendStickyDelayedEvent).toHaveBeenCalledWith(
roomId,
2000,
{ delay: 1000 },
null,
EventType.RoomMessage,
{},
);
});
it("sends child action delayed sticky message events", async () => {
client._unstable_sendStickyDelayedEvent.mockResolvedValue({
delay_id: "id-child",
});
await expect(
driver.sendDelayedStickyEvent(null, "id-parent", 2000, EventType.RoomMessage, {}),
).resolves.toEqual({
roomId,
delayId: "id-child",
});
expect(client._unstable_sendStickyDelayedEvent).toHaveBeenCalledWith(
roomId,
2000,
{ parent_delay_id: "id-parent" },
null,
EventType.RoomMessage,
{},
);
});
});
describe("If the feature_dynamic_room_predecessors feature is not enabled", () => {
beforeEach(() => {
jest.spyOn(SettingsStore, "getValue").mockReturnValue(false);