Move ResizerNotifier into SDKContext (#30939)

* Move ResizerNotifier into SDKContext

so we don't have to pass it into RoomView

* Fix test

* Unused import

* Add tests

* Remove a bunch of resizeNotifier props

* Remove more resizeNotifier props

* Add resizenotifier to test

* Add more sdkcontext wrappers in tests

* More sdkcontext wrappers

* Even more sdkcontext wrappers

* Add test to make sonarcloud happy

* Context isn't always there unlike props

* Test actual resizing too

* Remove commented line
This commit is contained in:
David Baker
2025-10-06 09:23:06 +00:00
committed by GitHub
parent 87fdf96192
commit c08775588d
32 changed files with 490 additions and 443 deletions
@@ -33,15 +33,14 @@ import { type Mocked, mocked } from "jest-mock";
import { forEachRight } from "lodash";
import TimelinePanel from "../../../../src/components/structures/TimelinePanel";
import MatrixClientContext from "../../../../src/contexts/MatrixClientContext";
import { MatrixClientPeg } from "../../../../src/MatrixClientPeg";
import {
clientAndSDKContextRenderOptions,
filterConsole,
flushPromises,
mkMembership,
mkRoom,
stubClient,
withClientContextRenderOptions,
} from "../../../test-utils";
import { mkThread } from "../../../test-utils/threads";
import { createMessageEventContent } from "../../../test-utils/events";
@@ -51,6 +50,7 @@ import defaultDispatcher from "../../../../src/dispatcher/dispatcher";
import { Action } from "../../../../src/dispatcher/actions";
import { SettingLevel } from "../../../../src/settings/SettingLevel";
import MatrixClientBackedController from "../../../../src/settings/controllers/MatrixClientBackedController";
import { SdkContextClass } from "../../../../src/contexts/SDKContext";
// ScrollPanel calls this, but jsdom doesn't mock it for us
HTMLDivElement.prototype.scrollBy = () => {};
@@ -159,6 +159,7 @@ const setupPagination = (
describe("TimelinePanel", () => {
let client: Mocked<MatrixClient>;
let sdkContext: SdkContextClass;
let userId: string;
filterConsole("checkForPreJoinUISI: showing all messages, skipping check");
@@ -166,6 +167,7 @@ describe("TimelinePanel", () => {
beforeEach(() => {
client = mocked(stubClient());
userId = client.getSafeUserId();
sdkContext = new SdkContextClass();
});
describe("read receipts and markers", () => {
@@ -200,7 +202,7 @@ describe("TimelinePanel", () => {
timelinePanel = ref;
}}
/>,
withClientContextRenderOptions(MatrixClientPeg.safeGet()),
clientAndSDKContextRenderOptions(client, sdkContext),
);
await flushPromises();
await waitFor(() => expect(timelinePanel).toBeTruthy());
@@ -396,7 +398,7 @@ describe("TimelinePanel", () => {
await withScrollPanelMountSpy(async (mountSpy) => {
const { container } = render(
<TimelinePanel {...getProps(room, events)} timelineSet={timelineSet} />,
withClientContextRenderOptions(MatrixClientPeg.safeGet()),
clientAndSDKContextRenderOptions(client, sdkContext),
);
await waitFor(() => expectEvents(container, [events[1]]));
@@ -416,7 +418,7 @@ describe("TimelinePanel", () => {
await withScrollPanelMountSpy(async (mountSpy) => {
const { container } = render(
<TimelinePanel {...getProps(room, events)} />,
withClientContextRenderOptions(MatrixClientPeg.safeGet()),
clientAndSDKContextRenderOptions(client, sdkContext),
);
await waitFor(() => expectEvents(container, [events[0], events[1]]));
@@ -493,7 +495,7 @@ describe("TimelinePanel", () => {
const paginateSpy = jest.spyOn(TimelineWindow.prototype, "paginate").mockClear();
render(<TimelinePanel {...props} />);
render(<TimelinePanel {...props} />, clientAndSDKContextRenderOptions(client, sdkContext));
const event = new MatrixEvent({ type: RoomEvent.Timeline, origin_server_ts: 0 });
const data = { timeline: props.timelineSet.getLiveTimeline(), liveEvent: true };
@@ -590,9 +592,8 @@ describe("TimelinePanel", () => {
const replyToEvent = jest.spyOn(thread, "replyToEvent", "get");
const dom = render(
<MatrixClientContext.Provider value={client}>
<TimelinePanel timelineSet={allThreads} manageReadReceipts sendReadReceiptOnLoad />
</MatrixClientContext.Provider>,
<TimelinePanel timelineSet={allThreads} manageReadReceipts sendReadReceiptOnLoad />,
clientAndSDKContextRenderOptions(client, sdkContext),
);
await dom.findByText("RootEvent");
await dom.findByText("ReplyEvent1");
@@ -645,9 +646,8 @@ describe("TimelinePanel", () => {
};
const dom = render(
<MatrixClientContext.Provider value={client}>
<TimelinePanel timelineSet={allThreads} manageReadReceipts sendReadReceiptOnLoad />
</MatrixClientContext.Provider>,
<TimelinePanel timelineSet={allThreads} manageReadReceipts sendReadReceiptOnLoad />,
clientAndSDKContextRenderOptions(client, sdkContext),
);
await dom.findByText("RootEvent");
await dom.findByText("ReplyEvent1");
@@ -718,9 +718,8 @@ describe("TimelinePanel", () => {
}
const { container } = render(
<MatrixClientContext.Provider value={client}>
<TimelinePanel timelineSet={timelineSet} manageReadReceipts={true} sendReadReceiptOnLoad={true} />
</MatrixClientContext.Provider>,
<TimelinePanel timelineSet={timelineSet} manageReadReceipts={true} sendReadReceiptOnLoad={true} />,
clientAndSDKContextRenderOptions(client, sdkContext),
);
await waitFor(() => expect(screen.queryByRole("progressbar")).toBeNull());
@@ -740,7 +739,7 @@ describe("TimelinePanel", () => {
await withScrollPanelMountSpy(async () => {
const { container } = render(
<TimelinePanel {...getProps(room, events)} timelineSet={timelineSet} />,
withClientContextRenderOptions(MatrixClientPeg.safeGet()),
clientAndSDKContextRenderOptions(client, sdkContext),
);
await waitFor(() => expectEvents(container, [events[1]]));