Switch from defer to PromiseWithResolvers

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski
2025-01-23 09:45:35 +00:00
parent 56eafc908e
commit 859ba0e02c
29 changed files with 52 additions and 79 deletions

View File

@@ -9,7 +9,6 @@ Please see LICENSE files in the repository root for full details.
import { mocked } from "jest-mock";
import { ISendEventResponse, MatrixClient, RelationType, UploadResponse } from "matrix-js-sdk/src/matrix";
import { ImageInfo } from "matrix-js-sdk/src/types";
import { defer } from "matrix-js-sdk/src/utils";
import encrypt, { IEncryptedFile } from "matrix-encrypt-attachment";
import ContentMessages, { UploadCanceledError, uploadFile } from "../../src/ContentMessages";
@@ -333,7 +332,7 @@ describe("ContentMessages", () => {
describe("cancelUpload", () => {
it("should cancel in-flight upload", async () => {
const deferred = defer<UploadResponse>();
const deferred = Promise.withResolvers<UploadResponse>();
mocked(client.uploadContent).mockReturnValue(deferred.promise);
const file1 = new File([], "file1");
const prom = contentMessages.sendContentToRoom(file1, roomId, undefined, client, undefined);

View File

@@ -21,7 +21,7 @@ import { completeAuthorizationCodeGrant } from "matrix-js-sdk/src/oidc/authorize
import { logger } from "matrix-js-sdk/src/logger";
import { OidcError } from "matrix-js-sdk/src/oidc/error";
import { BearerTokenResponse } from "matrix-js-sdk/src/oidc/validate";
import { defer, IDeferred, sleep } from "matrix-js-sdk/src/utils";
import { sleep } from "matrix-js-sdk/src/utils";
import { CryptoEvent, UserVerificationStatus } from "matrix-js-sdk/src/crypto-api";
import MatrixChat from "../../../../src/components/structures/MatrixChat";
@@ -79,7 +79,7 @@ describe("<MatrixChat />", () => {
const deviceId = "qwertyui";
const accessToken = "abc123";
const refreshToken = "def456";
let bootstrapDeferred: IDeferred<void>;
let bootstrapDeferred: PromiseWithResolvers<void>;
// reused in createClient mock below
const getMockClientMethods = () => ({
...mockClientMethodsUser(userId),
@@ -245,7 +245,7 @@ describe("<MatrixChat />", () => {
{} as ValidatedServerConfig,
);
bootstrapDeferred = defer();
bootstrapDeferred = Promise.withResolvers();
await clearAllModals();
});
@@ -1439,7 +1439,7 @@ describe("<MatrixChat />", () => {
jest.spyOn(MatrixJs, "createClient").mockReturnValue(client);
// intercept initCrypto and have it block until we complete the deferred
const initCryptoCompleteDefer = defer();
const initCryptoCompleteDefer = Promise.withResolvers<void>();
const initCryptoCalled = new Promise<void>((resolve) => {
client.initRustCrypto.mockImplementation(() => {
resolve();

View File

@@ -18,7 +18,6 @@ import {
SearchResult,
ISearchResults,
} from "matrix-js-sdk/src/matrix";
import { defer } from "matrix-js-sdk/src/utils";
import { RoomSearchView } from "../../../../src/components/structures/RoomSearchView";
import ResizeNotifier from "../../../../src/utils/ResizeNotifier";
@@ -53,7 +52,7 @@ describe("<RoomSearchView/>", () => {
});
it("should show a spinner before the promise resolves", async () => {
const deferred = defer<ISearchResults>();
const deferred = Promise.withResolvers<ISearchResults>();
render(
<RoomSearchView
@@ -267,7 +266,7 @@ describe("<RoomSearchView/>", () => {
});
it("should handle resolutions after unmounting sanely", async () => {
const deferred = defer<ISearchResults>();
const deferred = Promise.withResolvers<ISearchResults>();
const { unmount } = render(
<MatrixClientContext.Provider value={client}>
@@ -291,7 +290,7 @@ describe("<RoomSearchView/>", () => {
});
it("should handle rejections after unmounting sanely", async () => {
const deferred = defer<ISearchResults>();
const deferred = Promise.withResolvers<ISearchResults>();
const { unmount } = render(
<MatrixClientContext.Provider value={client}>
@@ -315,7 +314,7 @@ describe("<RoomSearchView/>", () => {
});
it("should show modal if error is encountered", async () => {
const deferred = defer<ISearchResults>();
const deferred = Promise.withResolvers<ISearchResults>();
render(
<MatrixClientContext.Provider value={client}>

View File

@@ -35,7 +35,6 @@ import {
cleanup,
} from "jest-matrix-react";
import userEvent from "@testing-library/user-event";
import { defer } from "matrix-js-sdk/src/utils";
import {
stubClient,
@@ -303,7 +302,7 @@ describe("RoomView", () => {
it("should not display the timeline when the room encryption is loading", async () => {
jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join);
jest.spyOn(cli, "getCrypto").mockReturnValue(crypto);
const deferred = defer<boolean>();
const deferred = Promise.withResolvers<boolean>();
jest.spyOn(cli.getCrypto()!, "isEncryptionEnabledInRoom").mockImplementation(() => deferred.promise);
const { asFragment, container } = await mountRoomView();

View File

@@ -8,7 +8,6 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { fireEvent, render, screen } from "jest-matrix-react";
import { defer } from "matrix-js-sdk/src/utils";
import PowerSelector from "../../../../../src/components/views/elements/PowerSelector";
@@ -70,7 +69,7 @@ describe("<PowerSelector />", () => {
});
it("should reset when onChange promise rejects", async () => {
const deferred = defer<void>();
const deferred = Promise.withResolvers<void>();
render(
<PowerSelector
value={25}

View File

@@ -12,7 +12,6 @@ import userEvent from "@testing-library/user-event";
import { Mocked, mocked } from "jest-mock";
import { Room, User, MatrixClient, RoomMember, MatrixEvent, EventType, Device } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { defer } from "matrix-js-sdk/src/utils";
import { EventEmitter } from "events";
import {
UserVerificationStatus,
@@ -795,7 +794,7 @@ describe("<DeviceItem />", () => {
});
it("when userId is the same as userId from client, uses isCrossSigningVerified to determine if button is shown", async () => {
const deferred = defer<DeviceVerificationStatus>();
const deferred = Promise.withResolvers<DeviceVerificationStatus>();
mockCrypto.getDeviceVerificationStatus.mockReturnValue(deferred.promise);
mockClient.getSafeUserId.mockReturnValueOnce(defaultUserId);
@@ -1058,7 +1057,7 @@ describe("<UserOptionsSection />", () => {
])(
"clicking »message« %s should start a DM",
async (test: string, member: RoomMember | User, expectedAvatarUrl: string | undefined) => {
const deferred = defer<string>();
const deferred = Promise.withResolvers<string>();
mocked(startDmOnFirstMessage).mockReturnValue(deferred.promise);
renderComponent({ member });

View File

@@ -8,7 +8,6 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { fireEvent, render, screen, within } from "jest-matrix-react";
import { defer, IDeferred } from "matrix-js-sdk/src/utils";
import EventIndexPanel from "../../../../../src/components/views/settings/EventIndexPanel";
import EventIndexPeg from "../../../../../src/indexing/EventIndexPeg";
@@ -140,9 +139,9 @@ describe("<EventIndexPanel />", () => {
});
it("enables event indexing on enable button click", async () => {
jest.spyOn(EventIndexPeg, "supportIsInstalled").mockReturnValue(true);
let deferredInitEventIndex: IDeferred<boolean> | undefined;
let deferredInitEventIndex: PromiseWithResolvers<boolean> | undefined;
jest.spyOn(EventIndexPeg, "initEventIndex").mockImplementation(() => {
deferredInitEventIndex = defer<boolean>();
deferredInitEventIndex = Promise.withResolvers<boolean>();
return deferredInitEventIndex.promise;
});

View File

@@ -21,7 +21,6 @@ import {
Visibility,
} from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { defer, IDeferred } from "matrix-js-sdk/src/utils";
import {
clearAllModals,
@@ -160,7 +159,7 @@ describe("<JoinRuleSettings />", () => {
});
it(`upgrades room when changing join rule to ${joinRule}`, async () => {
const deferredInvites: IDeferred<any>[] = [];
const deferredInvites: PromiseWithResolvers<any>[] = [];
// room that doesn't support the join rule
const room = new Room(roomId, client, userId);
const parentSpace = new Room("!parentSpace:server.org", client, userId);
@@ -183,7 +182,7 @@ describe("<JoinRuleSettings />", () => {
// resolve invites by hand
// flushPromises is too blunt to test reliably
client.invite.mockImplementation(() => {
const p = defer<{}>();
const p = Promise.withResolvers<{}>();
deferredInvites.push(p);
return p.promise;
});

View File

@@ -11,7 +11,6 @@ import { fireEvent, getByRole, render, RenderResult, screen, waitFor } from "jes
import { MatrixClient, EventType, MatrixEvent, Room, RoomMember, ISendEventResponse } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { mocked } from "jest-mock";
import { defer } from "matrix-js-sdk/src/utils";
import userEvent from "@testing-library/user-event";
import RolesRoomSettingsTab from "../../../../../../../src/components/views/settings/tabs/room/RolesRoomSettingsTab";
@@ -202,7 +201,7 @@ describe("RolesRoomSettingsTab", () => {
});
it("should roll back power level change on error", async () => {
const deferred = defer<ISendEventResponse>();
const deferred = Promise.withResolvers<ISendEventResponse>();
mocked(cli.sendStateEvent).mockReturnValue(deferred.promise);
mocked(cli.getRoom).mockReturnValue(room);
// @ts-ignore - mocked doesn't support overloads properly

View File

@@ -19,7 +19,7 @@ import {
} from "jest-matrix-react";
import { logger } from "matrix-js-sdk/src/logger";
import { CryptoApi, DeviceVerificationStatus, VerificationRequest } from "matrix-js-sdk/src/crypto-api";
import { defer, sleep } from "matrix-js-sdk/src/utils";
import { sleep } from "matrix-js-sdk/src/utils";
import {
ClientEvent,
Device,
@@ -894,7 +894,7 @@ describe("<SessionManagerTab />", () => {
});
it("deletes a device when interactive auth is not required", async () => {
const deferredDeleteMultipleDevices = defer<{}>();
const deferredDeleteMultipleDevices = Promise.withResolvers<{}>();
mockClient.deleteMultipleDevices.mockReturnValue(deferredDeleteMultipleDevices.promise);
mockClient.getDevices.mockResolvedValue({
devices: [alicesDevice, alicesMobileDevice, alicesOlderMobileDevice],
@@ -1103,7 +1103,7 @@ describe("<SessionManagerTab />", () => {
// get a handle for resolving the delete call
// because promise flushing after the confirm modal is resolving this too
// and we want to test the loading state here
const resolveDeleteRequest = defer<IAuthData>();
const resolveDeleteRequest = Promise.withResolvers<IAuthData>();
mockClient.deleteMultipleDevices.mockImplementation(() => {
return resolveDeleteRequest.promise;
});

View File

@@ -6,8 +6,6 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
Please see LICENSE files in the repository root for full details.
*/
import { defer } from "matrix-js-sdk/src/utils";
import defaultDispatcher from "../../../src/dispatcher/dispatcher";
import { Action } from "../../../src/dispatcher/actions";
import { AsyncActionPayload } from "../../../src/dispatcher/payloads";
@@ -20,8 +18,8 @@ describe("MatrixDispatcher", () => {
});
it("should execute callbacks in registered order", async () => {
const deferred1 = defer<number>();
const deferred2 = defer<number>();
const deferred1 = Promise.withResolvers<number>();
const deferred2 = Promise.withResolvers<number>();
const fn1 = jest.fn(() => deferred1.resolve(1));
const fn2 = jest.fn(() => deferred2.resolve(2));
@@ -36,8 +34,8 @@ describe("MatrixDispatcher", () => {
});
it("should skip the queue for the given callback", async () => {
const deferred1 = defer<number>();
const deferred2 = defer<number>();
const deferred1 = Promise.withResolvers<number>();
const deferred2 = Promise.withResolvers<number>();
const fn1 = jest.fn(() => deferred1.resolve(1));
const fn2 = jest.fn(() => deferred2.resolve(2));

View File

@@ -6,7 +6,6 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
Please see LICENSE files in the repository root for full details.
*/
import { defer } from "matrix-js-sdk/src/utils";
import { MatrixClient } from "matrix-js-sdk/src/matrix";
import ServerSupportUnstableFeatureController from "../../../../src/settings/controllers/ServerSupportUnstableFeatureController";
@@ -34,7 +33,7 @@ describe("ServerSupportUnstableFeatureController", () => {
controller,
};
const deferred = defer<any>();
const deferred = Promise.withResolvers<any>();
watchers.watchSetting(setting, null, deferred.resolve);
MatrixClientBackedController.matrixClient = cli;
await deferred.promise;

View File

@@ -20,7 +20,6 @@ import {
RoomState,
} from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { defer } from "matrix-js-sdk/src/utils";
import SpaceStore from "../../../src/stores/spaces/SpaceStore";
import {
@@ -1008,7 +1007,7 @@ describe("SpaceStore", () => {
await run();
const deferred = defer<boolean>();
const deferred = Promise.withResolvers<boolean>();
space.loadMembersIfNeeded.mockImplementation(() => {
const event = mkEvent({
event: true,