Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@
"matrix-encrypt-attachment": "^1.0.3",
"matrix-events-sdk": "0.0.1",
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
"matrix-widget-api": "^1.10.0",
"matrix-widget-api": "^1.14.0",
"memoize-one": "^6.0.0",
"mime": "^4.0.4",
"oidc-client-ts": "^3.0.1",
Expand Down
27 changes: 24 additions & 3 deletions src/stores/widgets/StopGapWidgetDriver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import {
type IWidgetApiErrorResponseDataDetails,
type ISearchUserDirectoryResult,
type IGetMediaConfigResult,
type UpdateDelayedEventAction,
} from "matrix-widget-api";
import {
ClientEvent,
Expand Down Expand Up @@ -425,12 +424,34 @@ export class StopGapWidgetDriver extends WidgetDriver {
/**
* @experimental Part of MSC4140 & MSC4157
*/
public async updateDelayedEvent(delayId: string, action: UpdateDelayedEventAction): Promise<void> {
public async cancelScheduledDelayedEvent(delayId: string): Promise<void> {
const client = MatrixClientPeg.get();

if (!client) throw new Error("Not in a room or not attached to a client");

await client._unstable_updateDelayedEvent(delayId, action);
await client._unstable_cancelScheduledDelayedEvent(delayId);
}

/**
* @experimental Part of MSC4140 & MSC4157
*/
public async restartScheduledDelayedEvent(delayId: string): Promise<void> {
const client = MatrixClientPeg.get();

if (!client) throw new Error("Not in a room or not attached to a client");

await client._unstable_restartScheduledDelayedEvent(delayId);
}

/**
* @experimental Part of MSC4140 & MSC4157
*/
public async sendScheduledDelayedEvent(delayId: string): Promise<void> {
const client = MatrixClientPeg.get();

if (!client) throw new Error("Not in a room or not attached to a client");

await client._unstable_sendScheduledDelayedEvent(delayId);
}

/**
Expand Down
4 changes: 3 additions & 1 deletion test/test-utils/test-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand Down
47 changes: 31 additions & 16 deletions test/unit-tests/stores/widgets/StopGapWidgetDriver-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import {
SimpleObservable,
OpenIDRequestState,
type IOpenIDUpdate,
UpdateDelayedEventAction,
} from "matrix-widget-api";
import {
type ApprovalOpts,
Expand Down Expand Up @@ -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("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 update delayed events", async () => {
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);
});
});

Expand Down
16 changes: 8 additions & 8 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4089,7 +4089,7 @@
classnames "^2.5.1"
vaul "^1.0.0"

"@vector-im/matrix-wysiwyg-wasm@link:../../Library/Caches/Yarn/v6/npm-@vector-im-matrix-wysiwyg-2.40.0-53c9ca5ea907d91e4515da64f20a82e5586b882c-integrity/node_modules/bindings/wysiwyg-wasm":
"@vector-im/matrix-wysiwyg-wasm@link:../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.40.0-53c9ca5ea907d91e4515da64f20a82e5586b882c-integrity/node_modules/bindings/wysiwyg-wasm":
version "0.0.0"
uid ""

Expand All @@ -4098,7 +4098,7 @@
resolved "https://registry.yarnpkg.com/@vector-im/matrix-wysiwyg/-/matrix-wysiwyg-2.40.0.tgz#53c9ca5ea907d91e4515da64f20a82e5586b882c"
integrity sha512-8LRFLs5PEKYs4lOL7aJ4lL/hGCrvEvOYkCR3JggXYXDVMtX4LmfdlKYucSAe98pCmqAAbLRvlRcR1bTOYvM8ug==
dependencies:
"@vector-im/matrix-wysiwyg-wasm" "link:../../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.40.0-53c9ca5ea907d91e4515da64f20a82e5586b882c-integrity/node_modules/bindings/wysiwyg-wasm"
"@vector-im/matrix-wysiwyg-wasm" "link:../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.40.0-53c9ca5ea907d91e4515da64f20a82e5586b882c-integrity/node_modules/bindings/wysiwyg-wasm"

"@vitest/[email protected]":
version "3.2.4"
Expand Down Expand Up @@ -9680,7 +9680,7 @@ [email protected]:

"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop":
version "39.1.2"
resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/b489bb15cf3f5de8024a3e31ccb36cf294f82887"
resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/df88edfda0aa00ad1d574e367f024db9a927e96b"
dependencies:
"@babel/runtime" "^7.12.5"
"@matrix-org/matrix-sdk-crypto-wasm" "^15.3.0"
Expand All @@ -9690,7 +9690,7 @@ [email protected]:
jwt-decode "^4.0.0"
loglevel "^1.9.2"
matrix-events-sdk "0.0.1"
matrix-widget-api "^1.10.0"
matrix-widget-api "^1.14.0"
oidc-client-ts "^3.0.1"
p-retry "7"
sdp-transform "^3.0.0"
Expand All @@ -9708,10 +9708,10 @@ matrix-web-i18n@^3.2.1, matrix-web-i18n@^3.4.0:
minimist "^1.2.8"
walk "^2.3.15"

matrix-widget-api@^1.10.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.13.1.tgz#5b1caeed2fc58148bcd2984e0546d2d06a1713ad"
integrity sha512-mkOHUVzaN018TCbObfGOSaMW2GoUxOfcxNNlTVx5/HeMk3OSQPQM0C9oEME5Liiv/dBUoSrEB64V8wF7e/gb1w==
matrix-widget-api@^1.14.0:
version "1.14.0"
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.14.0.tgz#aa90c40ace27d3165299f7dbc760a53001ce1446"
integrity sha512-DDvZGOQhI/rilPWg5VlLN7pHIsPt0Jt14lsuHDP+KU+fmpAQNITJ6aIld1ZoXWsrVGv2PS3x6K/MHtfruIOQJQ==
dependencies:
"@types/events" "^3.0.0"
events "^3.2.0"
Expand Down
Loading