import EventEmitter from "events";
import { MethodLikeKeys, MockedObject, PropertyLikeKeys } from "jest-mock";
import { MatrixClient, Room } from "matrix-js-sdk/src/matrix";
/**
 * Mocked generic class with a real EventEmitter.
 * Useful for mocks which need event emitters.
 */
export declare class MockEventEmitter<T> extends EventEmitter {
    /**
     * Construct a new event emitter with additional properties/functions. The event emitter functions
     * like .emit and .on will be real.
     * @param mockProperties An object with the mock property or function implementations. 'getters'
     * are correctly cloned to this event emitter.
     */
    constructor(mockProperties?: Partial<Record<MethodLikeKeys<T> | PropertyLikeKeys<T>, unknown>>);
}
/**
 * Mock client with real event emitter
 * useful for testing code that listens
 * to MatrixClient events
 */
export declare class MockClientWithEventEmitter extends EventEmitter {
    constructor(mockProperties?: Partial<Record<MethodLikeKeys<MatrixClient>, unknown>>);
}
/**
 * - make a mock client
 * - cast the type to mocked(MatrixClient)
 * - spy on MatrixClientPeg.get to return the mock
 * eg
 * ```
 * const mockClient = getMockClientWithEventEmitter({
        getUserId: jest.fn().mockReturnValue(aliceId),
    });
 * ```
 *
 * See also {@link stubClient} which does something similar but uses a more complete mock client.
 */
export declare const getMockClientWithEventEmitter: (mockProperties: Partial<Record<keyof MatrixClient, unknown>>) => MockedObject<MatrixClient>;
export declare const unmockClientPeg: () => void;
/**
 * Returns basic mocked client methods related to the current user
 * ```
 * const mockClient = getMockClientWithEventEmitter({
        ...mockClientMethodsUser('@mytestuser:domain'),
    });
 * ```
 */
export declare const mockClientMethodsUser: (userId?: string) => {
    getUserId: jest.Mock<any, any, any>;
    getDomain: jest.Mock<any, any, any>;
    getSafeUserId: jest.Mock<any, any, any>;
    getUser: jest.Mock<any, any, any>;
    isGuest: jest.Mock<any, any, any>;
    mxcUrlToHttp: jest.Mock<any, any, any>;
    credentials: {
        userId: string;
    };
    getThreePids: jest.Mock<any, any, any>;
    getAccessToken: jest.Mock<any, any, any>;
    getDeviceId: jest.Mock<any, any, any>;
    getAccountData: jest.Mock<any, any, any>;
};
/**
 * Returns basic mocked client methods related to rendering events
 * ```
 * const mockClient = getMockClientWithEventEmitter({
        ...mockClientMethodsUser('@mytestuser:domain'),
    });
 * ```
 */
export declare const mockClientMethodsEvents: () => {
    decryptEventIfNeeded: jest.Mock<any, any, any>;
    getPushActionsForEvent: jest.Mock<any, any, any>;
};
/**
 * Returns basic mocked client methods related to server support
 */
export declare const mockClientMethodsServer: () => Partial<Record<MethodLikeKeys<MatrixClient>, unknown>>;
export declare const mockClientMethodsDevice: (deviceId?: string) => Partial<Record<MethodLikeKeys<MatrixClient>, unknown>>;
export declare const mockClientMethodsCrypto: () => Partial<Record<MethodLikeKeys<MatrixClient> & PropertyLikeKeys<MatrixClient>, unknown>>;
export declare const mockClientMethodsRooms: (rooms?: Room[]) => Partial<Record<MethodLikeKeys<MatrixClient>, unknown>>;
