From bc8fdac491603ce414be43051f26777185e6f54e Mon Sep 17 00:00:00 2001 From: Kerry Date: Tue, 15 Mar 2022 10:30:48 +0100 Subject: [PATCH] fix more type issues in unit tests (#8053) * fix ts issues in test/components/structures Signed-off-by: Kerry Archibald * fix ts issues in test/components/views/context_menus Signed-off-by: Kerry Archibald --- .../structures/CallEventGrouper-test.ts | 14 ++++---- .../components/structures/auth/Login-test.tsx | 15 +++++---- .../views/context_menus/ContextMenu-test.tsx | 32 ++++++++++++------- tsconfig.json | 4 +++ 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/test/components/structures/CallEventGrouper-test.ts b/test/components/structures/CallEventGrouper-test.ts index 587a69e16c..a5c2bb4c16 100644 --- a/test/components/structures/CallEventGrouper-test.ts +++ b/test/components/structures/CallEventGrouper-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import "../../skinned-sdk"; -import { MatrixClient } from 'matrix-js-sdk/src/matrix'; +import { MatrixClient, MatrixEvent } from 'matrix-js-sdk/src/matrix'; import { EventType } from "matrix-js-sdk/src/@types/event"; import { CallState } from "matrix-js-sdk/src/webrtc/call"; @@ -52,7 +52,7 @@ describe('CallEventGrouper', () => { sender: { userId: THEIR_USER_ID, }, - }); + } as unknown as MatrixEvent); expect(grouper.state).toBe(CustomCallState.Missed); }); @@ -73,7 +73,7 @@ describe('CallEventGrouper', () => { sender: { userId: MY_USER_ID, }, - }); + } as unknown as MatrixEvent); grouperHangup.add({ getContent: () => { return { @@ -86,7 +86,7 @@ describe('CallEventGrouper', () => { sender: { userId: THEIR_USER_ID, }, - }); + } as unknown as MatrixEvent); grouperReject.add({ getContent: () => { @@ -100,7 +100,7 @@ describe('CallEventGrouper', () => { sender: { userId: MY_USER_ID, }, - }); + } as unknown as MatrixEvent); grouperReject.add({ getContent: () => { return { @@ -113,7 +113,7 @@ describe('CallEventGrouper', () => { sender: { userId: THEIR_USER_ID, }, - }); + } as unknown as MatrixEvent); expect(grouperHangup.state).toBe(CallState.Ended); expect(grouperReject.state).toBe(CallState.Ended); @@ -134,7 +134,7 @@ describe('CallEventGrouper', () => { getType: () => { return EventType.CallInvite; }, - }); + } as unknown as MatrixEvent); expect(grouper.isVoice).toBe(false); }); diff --git a/test/components/structures/auth/Login-test.tsx b/test/components/structures/auth/Login-test.tsx index 741f4f5c56..4f41f57eb5 100644 --- a/test/components/structures/auth/Login-test.tsx +++ b/test/components/structures/auth/Login-test.tsx @@ -17,7 +17,8 @@ limitations under the License. import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-dom/test-utils'; -import { createClient } from "matrix-js-sdk/src/matrix"; +import { mocked } from 'jest-mock'; +import { createClient, MatrixClient } from "matrix-js-sdk/src/matrix"; import sdk from '../../../skinned-sdk'; import SdkConfig from '../../../../src/SdkConfig'; @@ -35,10 +36,10 @@ const Login = sdk.getComponent( describe('Login', function() { let parentDiv; - const mockClient = { + const mockClient = mocked({ login: jest.fn().mockResolvedValue({}), loginFlows: jest.fn(), - }; + } as unknown as MatrixClient); beforeEach(function() { jest.spyOn(SdkConfig, "get").mockReturnValue({ @@ -47,7 +48,7 @@ describe('Login', function() { }); mockClient.login.mockClear().mockResolvedValue({}); mockClient.loginFlows.mockClear().mockResolvedValue({ flows: [{ type: "m.login.password" }] }); - createClient.mockReturnValue(mockClient); + mocked(createClient).mockReturnValue(mockClient); parentDiv = document.createElement('div'); document.body.appendChild(parentDiv); @@ -101,7 +102,7 @@ describe('Login', function() { }); it("should show SSO button if that flow is available", async () => { - mockClient.loginFlows.mockReturnValue({ flows: [{ type: "m.login.sso" }] }); + mockClient.loginFlows.mockResolvedValue({ flows: [{ type: "m.login.sso" }] }); const root = render(); await flushPromises(); @@ -111,7 +112,7 @@ describe('Login', function() { }); it("should show both SSO button and username+password if both are available", async () => { - mockClient.loginFlows.mockReturnValue({ flows: [{ type: "m.login.password" }, { type: "m.login.sso" }] }); + mockClient.loginFlows.mockResolvedValue({ flows: [{ type: "m.login.password" }, { type: "m.login.sso" }] }); const root = render(); await flushPromises(); @@ -124,7 +125,7 @@ describe('Login', function() { }); it("should show multiple SSO buttons if multiple identity_providers are available", async () => { - mockClient.loginFlows.mockReturnValue({ + mockClient.loginFlows.mockResolvedValue({ flows: [{ "type": "m.login.sso", "identity_providers": [{ diff --git a/test/components/views/context_menus/ContextMenu-test.tsx b/test/components/views/context_menus/ContextMenu-test.tsx index 29a041f0f0..3ea0fbac55 100644 --- a/test/components/views/context_menus/ContextMenu-test.tsx +++ b/test/components/views/context_menus/ContextMenu-test.tsx @@ -18,8 +18,8 @@ import React from "react"; import { mount } from "enzyme"; import "../../../skinned-sdk"; -import ContextMenu, { ChevronFace } from "../../../../src/components/structures/ContextMenu.tsx"; -import UIStore from "../../../../src/stores/UIStore.ts"; +import ContextMenu, { ChevronFace } from "../../../../src/components/structures/ContextMenu"; +import UIStore from "../../../../src/stores/UIStore"; describe("", () => { // Hardcode window and menu dimensions @@ -28,7 +28,7 @@ describe("", () => { jest.spyOn(UIStore, "instance", "get").mockImplementation(() => ({ windowWidth: windowSize, windowHeight: windowSize, - })); + }) as unknown as UIStore); window.Element.prototype.getBoundingClientRect = jest.fn().mockReturnValue({ width: menuSize, height: menuSize, @@ -38,19 +38,22 @@ describe("", () => { describe("near top edge of window", () => { const targetY = -50; + const onFinished = jest.fn(); const wrapper = mount( , ); const chevron = wrapper.find(".mx_ContextualMenu_chevron_left"); - const actualY = windowSize - parseInt(wrapper.getDOMNode().style.getPropertyValue("bottom")) - menuSize; - const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("top")); + const bottomStyle = parseInt(wrapper.getDOMNode().style.getPropertyValue("bottom")); + const actualY = windowSize - bottomStyle - menuSize; + const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("top")); it("stays within the window", () => { expect(actualY).toBeGreaterThanOrEqual(0); @@ -62,10 +65,12 @@ describe("", () => { describe("near right edge of window", () => { const targetX = windowSize - menuSize + 50; + const onFinished = jest.fn(); const wrapper = mount( ", () => { ); const chevron = wrapper.find(".mx_ContextualMenu_chevron_top"); - const actualX = parseInt(wrapper.getDOMNode().style.getPropertyValue("left")); - const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("left")); + const actualX = parseInt(wrapper.getDOMNode().style.getPropertyValue("left")); + const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("left")); it("stays within the window", () => { expect(actualX + menuSize).toBeLessThanOrEqual(windowSize); @@ -86,19 +91,21 @@ describe("", () => { describe("near bottom edge of window", () => { const targetY = windowSize - menuSize + 50; + const onFinished = jest.fn(); const wrapper = mount( , ); const chevron = wrapper.find(".mx_ContextualMenu_chevron_right"); - const actualY = parseInt(wrapper.getDOMNode().style.getPropertyValue("top")); - const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("top")); + const actualY = parseInt(wrapper.getDOMNode().style.getPropertyValue("top")); + const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("top")); it("stays within the window", () => { expect(actualY + menuSize).toBeLessThanOrEqual(windowSize); @@ -110,19 +117,22 @@ describe("", () => { describe("near left edge of window", () => { const targetX = -50; + const onFinished = jest.fn(); const wrapper = mount( , ); const chevron = wrapper.find(".mx_ContextualMenu_chevron_bottom"); - const actualX = windowSize - parseInt(wrapper.getDOMNode().style.getPropertyValue("right")) - menuSize; - const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("left")); + const rightStyle = parseInt(wrapper.getDOMNode().style.getPropertyValue("right")); + const actualX = windowSize - rightStyle - menuSize; + const actualChevronOffset = parseInt(chevron.getDOMNode().style.getPropertyValue("left")); it("stays within the window", () => { expect(actualX).toBeGreaterThanOrEqual(0); diff --git a/tsconfig.json b/tsconfig.json index 4f09a98e99..64bff21d29 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,5 +28,9 @@ "./test/utils/**/*.tsx", "./test/stores/**/*.ts", "./test/stores/**/*.tsx", + "./test/components/structures/**/*.ts", + "./test/components/structures/**/*.tsx", + "./test/components/views/context_menus/**/*.ts", + "./test/components/views/context_menus/**/*.tsx", ], }