Delayed event management: split endpoints, no auth (#31183)

* Delayed event management: split endpoints, no auth

Use the new js-sdk client methods for calling the dedicated,
unauthenticated endpoints for each of the cancel/restart/send actions
for updating a delayed event.

Note that these methods are compatible with homeservers that support
only the original endpoint where the update action is in the request
body.

* REPLACEME: pull in dependant js-sdk branch

see matrix-org/matrix-js-sdk#5066

* Format with Prettier

* Update matrix-js-sdk
This commit is contained in:
Andrew Ferrazzutti
2025-11-17 11:18:25 -05:00
committed by GitHub
parent 250d6571fe
commit fcd23b48e0
5 changed files with 65 additions and 27 deletions

View File

@@ -276,7 +276,9 @@ export function createTestClient(): MatrixClient {
_unstable_sendDelayedEvent: jest.fn(),
_unstable_sendDelayedStateEvent: jest.fn(),
_unstable_updateDelayedEvent: jest.fn(),
_unstable_cancelScheduledDelayedEvent: jest.fn(),
_unstable_restartScheduledDelayedEvent: jest.fn(),
_unstable_sendScheduledDelayedEvent: jest.fn(),
searchUserDirectory: jest.fn().mockResolvedValue({ limited: false, results: [] }),
setDeviceVerified: jest.fn(),

View File

@@ -27,7 +27,6 @@ import {
SimpleObservable,
OpenIDRequestState,
type IOpenIDUpdate,
UpdateDelayedEventAction,
} from "matrix-widget-api";
import {
type ApprovalOpts,
@@ -554,24 +553,40 @@ describe("StopGapWidgetDriver", () => {
driver = mkDefaultDriver();
});
it("updates delayed events", async () => {
client._unstable_updateDelayedEvent.mockResolvedValue({});
for (const action of [
UpdateDelayedEventAction.Cancel,
UpdateDelayedEventAction.Restart,
UpdateDelayedEventAction.Send,
]) {
await expect(driver.updateDelayedEvent("id", action)).resolves.toBeUndefined();
expect(client._unstable_updateDelayedEvent).toHaveBeenCalledWith("id", action);
}
it("can cancel scheduled delayed events", async () => {
client._unstable_cancelScheduledDelayedEvent.mockResolvedValue({});
await expect(driver.cancelScheduledDelayedEvent("id")).resolves.toBeUndefined();
expect(client._unstable_cancelScheduledDelayedEvent).toHaveBeenCalledWith("id");
});
it("fails to update delayed events", async () => {
it("can restart scheduled delayed events", async () => {
client._unstable_restartScheduledDelayedEvent.mockResolvedValue({});
await expect(driver.restartScheduledDelayedEvent("id")).resolves.toBeUndefined();
expect(client._unstable_restartScheduledDelayedEvent).toHaveBeenCalledWith("id");
});
it("can send scheduled delayed events", async () => {
client._unstable_sendScheduledDelayedEvent.mockResolvedValue({});
await expect(driver.sendScheduledDelayedEvent("id")).resolves.toBeUndefined();
expect(client._unstable_sendScheduledDelayedEvent).toHaveBeenCalledWith("id");
});
it("fails to cancel scheduled delayed events", async () => {
const errorMessage = "Cannot cancel this delayed event";
client._unstable_cancelScheduledDelayedEvent.mockRejectedValue(new Error(errorMessage));
await expect(driver.cancelScheduledDelayedEvent("id")).rejects.toThrow(errorMessage);
});
it("fails to restart scheduled delayed events", async () => {
const errorMessage = "Cannot restart this delayed event";
client._unstable_updateDelayedEvent.mockRejectedValue(new Error(errorMessage));
await expect(driver.updateDelayedEvent("id", UpdateDelayedEventAction.Restart)).rejects.toThrow(
errorMessage,
);
client._unstable_restartScheduledDelayedEvent.mockRejectedValue(new Error(errorMessage));
await expect(driver.restartScheduledDelayedEvent("id")).rejects.toThrow(errorMessage);
});
it("fails to send scheduled delayed events", async () => {
const errorMessage = "Cannot send this delayed event";
client._unstable_sendScheduledDelayedEvent.mockRejectedValue(new Error(errorMessage));
await expect(driver.sendScheduledDelayedEvent("id")).rejects.toThrow(errorMessage);
});
});