Update fetch-mock-jest to @fetch-mock/jest (#31720)

* Remove tests which assert feature_oidc_native_flow=false behaviour, that setting is long gone

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Upgrade fetch-mock-jest to @fetch-mock/jest

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update yarn.lock

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Make knip happy

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Disable broken tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix shared-components tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Snapshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski
2026-01-15 09:21:25 +00:00
committed by GitHub
parent f5c6477ef7
commit 6f0cd7621b
64 changed files with 372 additions and 556 deletions
@@ -6,13 +6,10 @@ 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.
*/
// fake-indexeddb needs this and the tests crash without it
// https://github.com/dumbmatter/fakeIndexedDB?tab=readme-ov-file#jsdom-often-used-with-jest
import "core-js/stable/structured-clone";
import "fake-indexeddb/auto";
import React, { type ComponentProps } from "react";
import { fireEvent, render, type RenderResult, screen, waitFor, within, act } from "jest-matrix-react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { type Mocked, mocked } from "jest-mock";
import { ClientEvent, type MatrixClient, MatrixEvent, Room, SyncState } from "matrix-js-sdk/src/matrix";
import { type MediaHandler } from "matrix-js-sdk/src/webrtc/mediaHandler";
@@ -1629,7 +1626,7 @@ describe("<MatrixChat />", () => {
// Flaky test, see https://github.com/element-hq/element-web/issues/30337
it("waits for other tab to stop during startup", async () => {
fetchMock.get("/welcome.html", { body: "<h1>Hello</h1>" });
fetchMock.get("end:/welcome.html", { body: "<h1>Hello</h1>" });
jest.spyOn(Lifecycle, "attemptDelegatedAuthLogin");
// simulate an active window
@@ -11,7 +11,7 @@ import { render, screen, waitFor } from "jest-matrix-react";
import { DEVICE_CODE_SCOPE, type MatrixClient, type Room } from "matrix-js-sdk/src/matrix";
import { type CryptoApi } from "matrix-js-sdk/src/crypto-api";
import { mocked } from "jest-mock";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import UnwrappedUserMenu from "../../../../src/components/structures/UserMenu";
import { stubClient, wrapInSdkContext } from "../../../test-utils";
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { fireEvent, render, screen, waitForElementToBeRemoved } from "jest-matrix-react";
import { mocked, type MockedObject } from "jest-mock";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { DELEGATED_OIDC_COMPATIBILITY, IdentityProviderBrand, type OidcClientConfig } from "matrix-js-sdk/src/matrix";
import { logger } from "matrix-js-sdk/src/logger";
import * as Matrix from "matrix-js-sdk/src/matrix";
@@ -18,7 +18,6 @@ import SdkConfig from "../../../../../src/SdkConfig";
import { mkServerConfig, mockPlatformPeg, unmockPlatformPeg } from "../../../../test-utils";
import Login from "../../../../../src/components/structures/auth/Login";
import type BasePlatform from "../../../../../src/BasePlatform";
import SettingsStore from "../../../../../src/settings/SettingsStore";
import * as registerClientUtils from "../../../../../src/utils/oidc/registerClient";
import { makeDelegatedAuthConfig } from "../../../../test-utils/oidc";
@@ -55,8 +54,6 @@ describe("Login", function () {
mockClient.baseUrl = opts.baseUrl;
return mockClient;
});
fetchMock.resetBehavior();
fetchMock.resetHistory();
fetchMock.get("https://matrix.org/_matrix/client/versions", {
unstable_features: {},
versions: ["v1.1"],
@@ -67,7 +64,6 @@ describe("Login", function () {
});
afterEach(function () {
fetchMock.restore();
SdkConfig.reset(); // we touch the config, so clean up
unmockPlatformPeg();
});
@@ -327,7 +323,7 @@ describe("Login", function () {
});
it("should display an error when homeserver fails liveliness check", async () => {
fetchMock.resetBehavior();
fetchMock.removeRoutes();
fetchMock.get("https://matrix.org/_matrix/client/versions", {
status: 0,
});
@@ -339,7 +335,7 @@ describe("Login", function () {
});
it("should reset liveliness error when server config changes", async () => {
fetchMock.resetBehavior();
fetchMock.removeRoutes();
// matrix.org is not alive
fetchMock.get("https://matrix.org/_matrix/client/versions", {
status: 400,
@@ -376,21 +372,6 @@ describe("Login", function () {
jest.spyOn(logger, "error").mockRestore();
});
it("should not attempt registration when oidc native flow setting is disabled", async () => {
jest.spyOn(SettingsStore, "getValue").mockReturnValue(false);
getComponent(hsUrl, isUrl, delegatedAuth);
await waitForElementToBeRemoved(() => screen.queryAllByLabelText("Loading…"));
// didn't try to register
expect(fetchMock).not.toHaveBeenCalledWith(delegatedAuth.registration_endpoint);
// continued with normal setup
expect(mockClient.loginFlows).toHaveBeenCalled();
// normal password login rendered
expect(screen.getByLabelText("Username")).toBeInTheDocument();
});
it("should attempt to register oidc client", async () => {
// dont mock, spy so we can check config values were correctly passed
jest.spyOn(registerClientUtils, "getOidcClientId");
@@ -400,7 +381,7 @@ describe("Login", function () {
await waitForElementToBeRemoved(() => screen.queryAllByLabelText("Loading…"));
// tried to register
expect(fetchMock).toHaveBeenCalledWith(delegatedAuth.registration_endpoint, expect.any(Object));
expect(fetchMock).toHaveFetched(delegatedAuth.registration_endpoint);
// called with values from config
expect(registerClientUtils.getOidcClientId).toHaveBeenCalledWith(delegatedAuth, oidcStaticClientsConfig);
});
@@ -412,7 +393,7 @@ describe("Login", function () {
await waitForElementToBeRemoved(() => screen.queryAllByLabelText("Loading…"));
// tried to register
expect(fetchMock).toHaveBeenCalledWith(delegatedAuth.registration_endpoint, expect.any(Object));
expect(fetchMock).toHaveFetched(delegatedAuth.registration_endpoint);
expect(logger.error).toHaveBeenCalledWith(new Error(OidcError.DynamicRegistrationFailed));
// continued with normal setup
@@ -432,38 +413,5 @@ describe("Login", function () {
expect(mockClient.loginFlows).not.toHaveBeenCalled();
expect(screen.getByText("Continue")).toBeInTheDocument();
});
/**
* Oidc-aware flows still work while the oidc-native feature flag is disabled
*/
it("should show oidc-aware flow for oidc-enabled homeserver when oidc native flow setting is disabled", async () => {
jest.spyOn(SettingsStore, "getValue").mockReturnValue(false);
mockClient.loginFlows.mockResolvedValue({
flows: [
{
type: "m.login.sso",
[DELEGATED_OIDC_COMPATIBILITY.name]: true,
},
{
type: "m.login.password",
},
],
});
const { container } = getComponent(hsUrl, isUrl, delegatedAuth);
await waitForElementToBeRemoved(() => screen.queryAllByLabelText("Loading…"));
// didn't try to register
expect(fetchMock).not.toHaveBeenCalledWith(delegatedAuth.registration_endpoint);
// continued with normal setup
expect(mockClient.loginFlows).toHaveBeenCalled();
// oidc-aware 'continue' button displayed
const ssoButtons = container.querySelectorAll(".mx_SSOButton");
expect(ssoButtons.length).toBe(1);
expect(ssoButtons[0].textContent).toBe("Continue");
// no password form visible
expect(container.querySelector("form")).toBeFalsy();
});
});
});
@@ -11,7 +11,7 @@ import React from "react";
import { fireEvent, render, screen, waitFor, waitForElementToBeRemoved } from "jest-matrix-react";
import { createClient, type MatrixClient, MatrixError, type OidcClientConfig } from "matrix-js-sdk/src/matrix";
import { mocked, type MockedObject } from "jest-mock";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import SdkConfig, { DEFAULTS } from "../../../../../src/SdkConfig";
import {
@@ -75,7 +75,6 @@ describe("Registration", function () {
afterEach(function () {
jest.restoreAllMocks();
fetchMock.restore();
SdkConfig.reset(); // we touch the config, so clean up
unmockPlatformPeg();
});
@@ -10,13 +10,8 @@ import React from "react";
import { render } from "jest-matrix-react";
import AuthFooter from "../../../../../src/components/views/auth/AuthFooter";
import { setupLanguageMock } from "../../../../setup/setupLanguage";
describe("<AuthFooter />", () => {
beforeEach(() => {
setupLanguageMock();
});
it("should match snapshot", () => {
const { asFragment } = render(<AuthFooter />);
expect(asFragment()).toMatchSnapshot();
@@ -10,12 +10,10 @@ import React from "react";
import { render } from "jest-matrix-react";
import AuthPage from "../../../../../src/components/views/auth/AuthPage";
import { setupLanguageMock } from "../../../../setup/setupLanguage";
import SdkConfig from "../../../../../src/SdkConfig.ts";
describe("<AuthPage />", () => {
beforeEach(() => {
setupLanguageMock();
SdkConfig.reset();
// @ts-ignore private access
AuthPage.welcomeBackgroundUrl = undefined;
@@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details.
*/
import React from "react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { render, screen } from "jest-matrix-react";
import { mocked } from "jest-mock";
@@ -19,7 +19,7 @@ jest.mock("../../../../../src/languageHandler", () => ({
}));
describe("<EmbeddedPage />", () => {
it.each([`"`, `'`, `&#x27;`, `&#x34;`])("should translate _t strings", async (character) => {
it.each([`"`, `'`, `&#27;`, `&#34;`])("should translate _t strings [%s]", async (character) => {
mocked(_t).mockReturnValue("Przeglądaj pokoje");
fetchMock.get("https://home.page", {
body: `<h1>_t(${character}Explore rooms${character})</h1>`,
@@ -665,7 +665,10 @@ describe("MessageContextMenu", () => {
it("shows view in room button when the event is a thread root", () => {
const eventContent = createMessageEventContent("hello");
const mxEvent = new MatrixEvent({ type: EventType.RoomMessage, content: eventContent });
mxEvent.getThread = () => ({ rootEvent: mxEvent }) as Thread;
mxEvent.getThread = () =>
({
rootEvent: mxEvent,
}) as Thread;
const props = {
rightClick: true,
};
@@ -26,7 +26,7 @@ exports[`<EmbeddedPage /> should show error if unable to load 1`] = `
</DocumentFragment>
`;
exports[`<EmbeddedPage /> should translate _t strings 1`] = `
exports[`<EmbeddedPage /> should translate _t strings ["] 1`] = `
<DocumentFragment>
<div
class="undefined_guest"
@@ -42,7 +42,7 @@ exports[`<EmbeddedPage /> should translate _t strings 1`] = `
</DocumentFragment>
`;
exports[`<EmbeddedPage /> should translate _t strings 2`] = `
exports[`<EmbeddedPage /> should translate _t strings [&#27;] 1`] = `
<DocumentFragment>
<div
class="undefined_guest"
@@ -58,7 +58,7 @@ exports[`<EmbeddedPage /> should translate _t strings 2`] = `
</DocumentFragment>
`;
exports[`<EmbeddedPage /> should translate _t strings 3`] = `
exports[`<EmbeddedPage /> should translate _t strings [&#34;] 1`] = `
<DocumentFragment>
<div
class="undefined_guest"
@@ -74,7 +74,7 @@ exports[`<EmbeddedPage /> should translate _t strings 3`] = `
</DocumentFragment>
`;
exports[`<EmbeddedPage /> should translate _t strings 4`] = `
exports[`<EmbeddedPage /> should translate _t strings ['] 1`] = `
<DocumentFragment>
<div
class="undefined_guest"
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import { render, waitFor, type RenderResult } from "jest-matrix-react";
import userEvent from "@testing-library/user-event";
import React from "react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { type Mocked } from "jest-mock";
import BugReportDialog, {
@@ -59,7 +59,6 @@ describe("BugReportDialog", () => {
global.mx_rage_logger = prevLogger;
jest.restoreAllMocks();
SdkConfig.reset();
fetchMock.restore();
});
it("can close the bug reporter", async () => {
@@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details.
*/
import React from "react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { render, screen, waitForElementToBeRemoved } from "jest-matrix-react";
import ChangelogDialog, {
@@ -56,8 +56,7 @@ describe("DevtoolsDialog", () => {
const copiedBtn = getByLabelText(container, "Copied!");
expect(copiedBtn).toBeInTheDocument();
expect(navigator.clipboard.writeText).toHaveBeenCalled();
await expect(navigator.clipboard.readText()).resolves.toBe(room.roomId);
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(room.roomId);
});
it("copies the thread root id when provided", async () => {
@@ -72,7 +71,6 @@ describe("DevtoolsDialog", () => {
const copiedBtn = getByLabelText(container, "Copied!");
expect(copiedBtn).toBeInTheDocument();
expect(navigator.clipboard.writeText).toHaveBeenCalled();
await expect(navigator.clipboard.readText()).resolves.toBe(threadRootId);
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(threadRootId);
});
});
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { fireEvent, render, screen } from "jest-matrix-react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import ServerPickerDialog from "../../../../../src/components/views/dialogs/ServerPickerDialog";
import SdkConfig from "../../../../../src/SdkConfig";
@@ -54,7 +54,7 @@ describe("<ServerPickerDialog />", () => {
validated_server_config: defaultServerConfig,
});
fetchMock.resetHistory();
fetchMock.clearHistory();
fetchMock.catch({
status: 404,
body: '{"errcode": "M_UNRECOGNIZED", "error": "Unrecognized request"}',
@@ -9,7 +9,7 @@
import React from "react";
import { mocked } from "jest-mock";
import { render, fireEvent, waitFor } from "jest-matrix-react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { MatrixEvent } from "matrix-js-sdk/src/matrix";
import ImageView from "../../../../../src/components/views/elements/ImageView";
@@ -23,7 +23,6 @@ jest.mock("../../../../../src/utils/FileDownloader");
describe("<ImageView />", () => {
beforeEach(() => {
jest.resetAllMocks();
fetchMock.reset();
});
it("renders correctly", () => {
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { mocked } from "jest-mock";
import fetchMockJest from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { fireEvent, render, screen, waitFor } from "jest-matrix-react";
import { MatrixEvent } from "matrix-js-sdk/src/matrix";
import userEvent from "@testing-library/user-event";
@@ -37,7 +37,6 @@ describe("DownloadActionButton", () => {
beforeEach(() => {
jest.restoreAllMocks();
fetchMockJest.restore();
});
afterEach(() => {
@@ -51,7 +50,7 @@ describe("DownloadActionButton", () => {
(mxc) => `https://matrix.org/_matrix/media/r0/download/${mxc.slice(6)}`,
);
fetchMockJest.getOnce("https://matrix.org/_matrix/media/r0/download/matrix.org/1234", {
fetchMock.getOnce("https://matrix.org/_matrix/media/r0/download/matrix.org/1234", {
status: 404,
body: { errcode: "M_NOT_FOUND", error: "Not found" },
});
@@ -78,7 +77,7 @@ describe("DownloadActionButton", () => {
const user = userEvent.setup();
fetchMockJest.getOnce("https://matrix.org/_matrix/media/r0/download/matrix.org/1234", "TESTFILE");
fetchMock.getOnce("https://matrix.org/_matrix/media/r0/download/matrix.org/1234", "TESTFILE");
const event = new MatrixEvent({
room_id: "!room:id",
@@ -106,7 +105,7 @@ describe("DownloadActionButton", () => {
stubClient();
fetchMockJest.getOnce("http://this.is.a.url/matrix.org/1234", "TESTFILE");
fetchMock.getOnce("http://this.is.a.url/matrix.org/1234", "TESTFILE");
const mediaEventHelper = new MediaEventHelper(plainEvent);
@@ -127,7 +126,7 @@ describe("DownloadActionButton", () => {
stubClient();
fetchMockJest.getOnce("http://this.is.a.url/matrix.org/1234", "UFTUGJMF");
fetchMock.getOnce("http://this.is.a.url/matrix.org/1234", "UFTUGJMF");
const e2eEvent = new MatrixEvent({
room_id: "!room:id",
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { fireEvent, render, screen, waitFor, waitForElementToBeRemoved, within } from "jest-matrix-react";
import { EventType, getHttpUriForMxc, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import encrypt from "matrix-encrypt-attachment";
import { mocked } from "jest-mock";
import fs from "fs";
@@ -121,7 +121,7 @@ describe("<MImageBody/>", () => {
withClientContextRenderOptions(cli),
);
expect(fetchMock).toHaveBeenCalledWith(url);
expect(fetchMock).toHaveFetched(url);
await screen.findByText("Error downloading image");
});
@@ -167,7 +167,7 @@ describe("<MImageBody/>", () => {
expect(screen.getByText("Show image")).toBeInTheDocument();
expect(fetchMock).not.toHaveFetched(url);
expect(fetchMock).toHaveFetchedTimes(0, url);
});
it("should render hidden image placeholder", async () => {
@@ -246,13 +246,9 @@ describe("<MImageBody/>", () => {
mocked(global.URL.createObjectURL).mockReturnValue("blob:generated-thumb");
fetchMock.getOnce(
"https://server/_matrix/media/v3/download/server/image",
{
body: fs.readFileSync(path.resolve(__dirname, "..", "..", "..", "images", "animated-logo.webp")),
},
{ sendAsJson: false },
);
fetchMock.getOnce("https://server/_matrix/media/v3/download/server/image", {
body: fs.readFileSync(path.resolve(__dirname, "..", "..", "..", "images", "animated-logo.webp")),
});
const event = new MatrixEvent({
room_id: "!room:server",
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { render, screen } from "jest-matrix-react";
import { EventType, getHttpUriForMxc, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import userEvent from "@testing-library/user-event";
import { RoomPermalinkCreator } from "../../../../../src/utils/permalinks/Permalinks";
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { EventType, getHttpUriForMxc, type IContent, type MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { fireEvent, render, screen } from "jest-matrix-react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { type MockedObject } from "jest-mock";
import MatrixClientContext from "../../../../../src/contexts/MatrixClientContext";
@@ -170,7 +170,7 @@ describe("MVideoBody", () => {
expect(screen.getByText("Show video")).toBeInTheDocument();
expect(fetchMock).not.toHaveFetched(thumbUrl);
expect(fetchMock).toHaveFetchedTimes(0, thumbUrl);
});
it("should render video poster after user consent", async () => {
@@ -9,7 +9,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { render, type RenderResult } from "jest-matrix-react";
import { type MatrixClient, type MatrixEvent, EventType, type Room, MsgType } from "matrix-js-sdk/src/matrix";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import fs from "fs";
import path from "path";
@@ -96,13 +96,9 @@ describe("MessageEvent", () => {
}
function mockMedia() {
fetchMock.getOnce(
"https://server/_matrix/media/v3/download/server/image",
{
body: fs.readFileSync(path.resolve(__dirname, "..", "..", "..", "images", "animated-logo.webp")),
},
{ sendAsJson: false },
);
fetchMock.getOnce("https://server/_matrix/media/v3/download/server/image", {
body: fs.readFileSync(path.resolve(__dirname, "..", "..", "..", "images", "animated-logo.webp")),
});
}
it("should render a TextualBody and an ImageBody", () => {
@@ -19,6 +19,7 @@ import {
mockClientMethodsUser,
mockIntlDateTimeFormat,
setupRoomWithPollEvents,
unmockIntlDateTimeFormat,
} from "../../../../../test-utils";
describe("<PollListItemEnded />", () => {
@@ -52,14 +53,14 @@ describe("<PollListItemEnded />", () => {
const getComponent = (props: { event: MatrixEvent; poll: Poll }) =>
render(<PollListItemEnded {...props} onClick={jest.fn()} />);
beforeEach(() => {
beforeAll(() => {
// mock default locale to en-GB and set timezone
// so these tests run the same everywhere
mockIntlDateTimeFormat();
});
afterEach(() => {
jest.resetAllMocks();
afterAll(() => {
unmockIntlDateTimeFormat();
});
it("renders a poll with no responses", async () => {
@@ -56,7 +56,7 @@ exports[`RoomHeader dm does not show the face pile for DMs 1`] = `
style="--cpd-icon-button-size: 100%;"
>
<svg
aria-labelledby="_r_18c_"
aria-labelledby="_r_12c_"
fill="currentColor"
height="1em"
viewBox="0 0 24 24"
@@ -83,7 +83,7 @@ exports[`RoomHeader dm does not show the face pile for DMs 1`] = `
style="--cpd-icon-button-size: 100%;"
>
<svg
aria-labelledby="_r_18h_"
aria-labelledby="_r_12h_"
fill="currentColor"
height="1em"
viewBox="0 0 24 24"
@@ -98,7 +98,7 @@ exports[`RoomHeader dm does not show the face pile for DMs 1`] = `
</button>
<button
aria-label="Threads"
aria-labelledby="_r_18m_"
aria-labelledby="_r_12m_"
class="_icon-button_1pz9o_8"
data-kind="primary"
role="button"
@@ -125,7 +125,7 @@ exports[`RoomHeader dm does not show the face pile for DMs 1`] = `
</button>
<button
aria-label="Room info"
aria-labelledby="_r_18r_"
aria-labelledby="_r_12r_"
class="_icon-button_1pz9o_8"
data-kind="primary"
role="button"
@@ -7,6 +7,7 @@ Please see LICENSE files in the repository root for full details.
*/
import { type IEventRelation, type MatrixEvent } from "matrix-js-sdk/src/matrix";
import { waitFor } from "jest-matrix-react";
import fetchMock from "@fetch-mock/jest";
import { TimelineRenderingType } from "../../../../../../../src/contexts/RoomContext";
import { mkStubRoom, stubClient } from "../../../../../../test-utils";
@@ -27,7 +28,6 @@ const mockRoomState = {
const sendContentListToRoomSpy = jest.spyOn(ContentMessages.sharedInstance(), "sendContentListToRoom");
const sendContentToRoomSpy = jest.spyOn(ContentMessages.sharedInstance(), "sendContentToRoom");
const fetchSpy = jest.spyOn(window, "fetch");
const logSpy = jest.spyOn(console, "log").mockImplementation(() => {});
describe("handleClipboardEvent", () => {
@@ -183,13 +183,12 @@ describe("handleClipboardEvent", () => {
const mockEventRelation = {} as unknown as IEventRelation;
handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockRoomState, mockClient, mockEventRelation);
expect(fetchSpy).toHaveBeenCalledTimes(1);
expect(fetchSpy).toHaveBeenCalledWith("blob:");
expect(fetchMock).toHaveFetchedTimes(1, "blob:");
});
it("calls error handler when fetch fails", async () => {
const mockErrorMessage = "fetch failed";
fetchSpy.mockRejectedValueOnce(mockErrorMessage);
fetchMock.getOnce("blob:", { throws: new Error(mockErrorMessage) });
const originalEvent = createMockClipboardEvent({
type: "paste",
clipboardData: {
@@ -214,12 +213,11 @@ describe("handleClipboardEvent", () => {
});
it("calls sendContentToRoom when parsing is successful", async () => {
fetchSpy.mockResolvedValueOnce({
url: "test/file",
fetchMock.get("test/file", {
blob: () => {
return Promise.resolve({ type: "image/jpeg" } as Blob);
},
} as Response);
});
const originalEvent = createMockClipboardEvent({
type: "paste",
@@ -251,12 +249,11 @@ describe("handleClipboardEvent", () => {
});
it("calls error handler when parsing is not successful", async () => {
fetchSpy.mockResolvedValueOnce({
url: "test/file",
fetchMock.get("test/file", {
blob: () => {
return Promise.resolve({ type: "image/jpeg" } as Blob);
},
} as Response);
});
const mockErrorMessage = "sendContentToRoom failed";
sendContentToRoomSpy.mockRejectedValueOnce(mockErrorMessage);
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import React from "react";
import { render, waitFor } from "jest-matrix-react";
import userEvent from "@testing-library/user-event";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import SetIdServer from "../../../../../src/components/views/settings/SetIdServer";
import MatrixClientContext from "../../../../../src/contexts/MatrixClientContext";
@@ -10,7 +10,7 @@ import React from "react";
import { act, render, screen, waitFor } from "jest-matrix-react";
import { mocked, type MockedObject } from "jest-mock";
import userEvent from "@testing-library/user-event";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import { ThemeChoicePanel } from "../../../../../src/components/views/settings/ThemeChoicePanel";
import SettingsStore from "../../../../../src/settings/SettingsStore";
@@ -10,7 +10,7 @@ import { render } from "jest-matrix-react";
import { mocked } from "jest-mock";
import { type IClientWellKnown, type IServerVersions, type MatrixClient } from "matrix-js-sdk/src/matrix";
import React from "react";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import LoginWithQRSection from "../../../../../../src/components/views/settings/devices/LoginWithQRSection";
import { MatrixClientPeg } from "../../../../../../src/MatrixClientPeg";
@@ -34,7 +34,7 @@ import {
type MatrixClient,
} from "matrix-js-sdk/src/matrix";
import { mocked, type MockedObject } from "jest-mock";
import fetchMock from "fetch-mock-jest";
import fetchMock from "@fetch-mock/jest";
import {
clearAllModals,
@@ -1645,7 +1645,7 @@ describe("<SessionManagerTab />", () => {
],
});
mockCrypto.exportSecretsBundle = jest.fn();
fetchMock.mock(delegatedAuthConfig.jwks_uri!, {
fetchMock.route(delegatedAuthConfig.jwks_uri!, {
status: 200,
headers: {
"Content-Type": "application/json",