* Remove stale max-len disablements * Remove stale camelCase & naming-convention disablements * Remove stale ban-ts-comment disablements * Remove stale no-var disablements * Remove stale no-empty-property disablements * Remove stale react rule disablements * Remove stale no-constant-condition disablements * Remove stale no-unused-vars disablements * Remove stale disablements for disabled rules * fixup camelcase * Remove dead code * Tidy code * Tweak oxlint config * Use oxlint to apply jsx/tsx extension consistently * Fix import * Fix imports * Rename affected snapshots * Update more imports * Enable restriction ruleset * Make code comply with new rules * Make code comply with react/button-has-type * Make code comply with typescript/non-nullable-type-assertion-style * Comply with node/no-process-env * Comply with unicorn/prefer-node-protocol * Comply with unicorn/import-style * Comply with unicorn/no-process-exit * Comply with no-proto * Comply with node/handle-callback-err * Comply with import/no-commonjs * Comply with node/no-path-concat * Comply with unicorn/no-length-as-slice-end * Comply with unicorn/no-document-cookie * Comply with unicorn/prefer-module * Comply with typescript/prefer-literal-enum-member * Comply with jsx-a11y/anchor-ambiguous-text * Tweak oxlint config * Fix resolves * Iterate * Iterate * Iterate * Iterate * Iterate * Iterate * Iterate
79 lines
2.8 KiB
TypeScript
79 lines
2.8 KiB
TypeScript
/*
|
|
* Copyright 2026 Element Creations Ltd.
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
|
* Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import React, { act } from "react";
|
|
import { render, type RenderOptions } from "jest-matrix-react";
|
|
import { type MatrixClient, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix";
|
|
import { EventEmitter } from "node:events";
|
|
|
|
import { stubClient } from "../../test-utils";
|
|
import DMRoomMap from "../../../src/utils/DMRoomMap";
|
|
import { SDKContext } from "../../../src/contexts/SDKContext";
|
|
import { TestSDKContext } from "../TestSDKContext.ts";
|
|
import { ScopedRoomContextProvider } from "../../../src/contexts/ScopedRoomContext";
|
|
import RoomContext, { type RoomContextType } from "../../../src/contexts/RoomContext";
|
|
import MatrixClientContext from "../../../src/contexts/MatrixClientContext";
|
|
import { RoomView } from "../../../src/components/structures/RoomView";
|
|
import { ModuleApi } from "../../../src/modules/Api";
|
|
|
|
describe("ExtrasApi", () => {
|
|
let client: MatrixClient;
|
|
let sdkContext: TestSDKContext;
|
|
let room: Room;
|
|
let roomContext: RoomContextType;
|
|
|
|
beforeEach(() => {
|
|
client = stubClient();
|
|
room = new Room("!test:room", client, "@alice:example.org", {
|
|
pendingEventOrdering: PendingEventOrdering.Detached,
|
|
});
|
|
sdkContext = new TestSDKContext();
|
|
sdkContext._client = client;
|
|
jest.spyOn(sdkContext.roomViewStore, "getRoomId").mockReturnValue(room.roomId);
|
|
|
|
const mockRoomViewStore = new (class extends EventEmitter {
|
|
isViewingCall = jest.fn().mockReturnValue(false);
|
|
})();
|
|
|
|
roomContext = {
|
|
...RoomContext,
|
|
roomId: "!test:room",
|
|
roomViewStore: mockRoomViewStore,
|
|
} as unknown as RoomContextType;
|
|
|
|
DMRoomMap.setShared({
|
|
getUserIdForRoomId: jest.fn(),
|
|
getRoomIds: jest.fn().mockReturnValue(new Set()),
|
|
} as unknown as DMRoomMap);
|
|
});
|
|
|
|
function getWrapper(): RenderOptions {
|
|
return {
|
|
wrapper: ({ children }) => (
|
|
<SDKContext.Provider value={sdkContext}>
|
|
<ScopedRoomContextProvider {...roomContext}>
|
|
<MatrixClientContext.Provider value={client}>{children}</MatrixClientContext.Provider>
|
|
</ScopedRoomContextProvider>
|
|
</SDKContext.Provider>
|
|
),
|
|
};
|
|
}
|
|
|
|
it("addRoomHeaderButtonCallback stores and uses the provided callback", () => {
|
|
const callback = jest.fn();
|
|
ModuleApi.instance.extras.addRoomHeaderButtonCallback(callback);
|
|
|
|
render(<RoomView />, getWrapper());
|
|
|
|
act(() => {
|
|
sdkContext.roomViewStore.emit("update");
|
|
});
|
|
|
|
expect(callback).toHaveBeenCalled();
|
|
});
|
|
});
|