From d48892a5ff6c5140b170437feccb3b9e6ffec3ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Thu, 6 Oct 2022 17:37:06 +0200 Subject: [PATCH 1/3] Always allow enabling sending read receipts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- .../tabs/user/PreferencesUserSettingsTab.tsx | 5 +- .../user/PreferencesUserSettingsTab-test.tsx | 122 ++++++++++++++++++ test/test-utils/test-utils.ts | 1 + 3 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx index 1519e39a0d8..4e199248571 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.tsx @@ -214,7 +214,10 @@ export default class PreferencesUserSettingsTab extends React.Component + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from "react"; +import { fireEvent, render, RenderResult, waitFor } from "@testing-library/react"; +import "@testing-library/jest-dom"; + +import PreferencesUserSettingsTab from + "../../../../../../src/components/views/settings/tabs/user/PreferencesUserSettingsTab"; +import { MatrixClientPeg } from "../../../../../../src/MatrixClientPeg"; +import { mockPlatformPeg, stubClient } from "../../../../../test-utils"; +import SettingsStore from "../../../../../../src/settings/SettingsStore"; +import { SettingLevel } from "../../../../../../src/settings/SettingLevel"; + +describe("PreferencesUserSettingsTab", () => { + beforeEach(() => { + mockPlatformPeg(); + }); + + const renderTab = (): RenderResult => { + return render( {}} />); + }; + + describe("send read receipts", () => { + beforeEach(() => { + stubClient(); + jest.spyOn(SettingsStore, "setValue"); + jest.spyOn(window, "matchMedia").mockReturnValue({ matches: false } as MediaQueryList); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + const getToggle = () => renderTab().getByRole("switch", { name: "Send read receipts" }); + + const mockIsVersionSupported = (val: boolean) => { + const client = MatrixClientPeg.get(); + jest.spyOn(client, "isVersionSupported").mockImplementation(async (version: string) => { + if (version === "v1.4") return val; + }); + }; + + const mockGetValue = (val: boolean) => { + const copyOfGetValueAt = SettingsStore.getValueAt; + + SettingsStore.getValueAt = (level: SettingLevel, name: string, roomId?: string, isExplicit?: boolean) => { + if (name === "sendReadReceipts") return val; + return copyOfGetValueAt(level, name, roomId, isExplicit); + }; + }; + + const expectSetValueToHaveBeenCalled = ( + name: string, + roomId: string, + level: SettingLevel, + value: boolean, + ) => expect(SettingsStore.setValue).toHaveBeenCalledWith(name, roomId, level, value); + + describe("with server support", () => { + beforeEach(() => { + mockIsVersionSupported(true); + }); + + it("can be enabled", async () => { + mockGetValue(false); + const toggle = getToggle(); + + await waitFor(() => expect(toggle).toHaveAttribute("aria-disabled", "false")); + fireEvent.click(toggle); + expectSetValueToHaveBeenCalled("sendReadReceipts", undefined, SettingLevel.ACCOUNT, true); + }); + + it("can be disabled", async () => { + mockGetValue(true); + const toggle = getToggle(); + + await waitFor(() => expect(toggle).toHaveAttribute("aria-disabled", "false")); + fireEvent.click(toggle); + expectSetValueToHaveBeenCalled("sendReadReceipts", undefined, SettingLevel.ACCOUNT, false); + }); + }); + + describe("without server support", () => { + beforeEach(() => { + mockIsVersionSupported(false); + }); + + it("can be enabled", async () => { + mockGetValue(false); + const toggle = getToggle(); + + await waitFor(() => expect(toggle).toHaveAttribute("aria-disabled", "false")); + fireEvent.click(toggle); + expectSetValueToHaveBeenCalled("sendReadReceipts", undefined, SettingLevel.ACCOUNT, true); + }); + + it("cannot be disabled", async () => { + mockGetValue(true); + const toggle = getToggle(); + + await waitFor(() => expect(toggle).toHaveAttribute("aria-disabled", "true")); + fireEvent.click(toggle); + expect(SettingsStore.setValue).not.toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 0647f2604df..2e01f3a4d8a 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -160,6 +160,7 @@ export function createTestClient(): MatrixClient { getIdentityAccount: jest.fn().mockResolvedValue({}), getTerms: jest.fn().mockResolvedValueOnce(undefined), doesServerSupportUnstableFeature: jest.fn().mockResolvedValue(undefined), + isVersionSupported: jest.fn().mockResolvedValue(undefined), getPushRules: jest.fn().mockResolvedValue(undefined), getPushers: jest.fn().mockResolvedValue({ pushers: [] }), getThreePids: jest.fn().mockResolvedValue({ threepids: [] }), From b0a08585094a253dce924e0f92a5f888e2bdd20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 7 Oct 2022 06:16:18 +0200 Subject: [PATCH 2/3] Fix license MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- .../settings/tabs/user/PreferencesUserSettingsTab-test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx b/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx index de2c482c42e..29c46d1331a 100644 --- a/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx @@ -1,6 +1,6 @@ /* -Copyright 2022 Šimon Brandner +Copyright 2022 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 294eb3d98905c81c2333a3a005b4bd0cfccf120f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 7 Oct 2022 06:43:59 +0200 Subject: [PATCH 3/3] Update test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx --- .../views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx b/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx index 29c46d1331a..de4e68b24e4 100644 --- a/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/user/PreferencesUserSettingsTab-test.tsx @@ -1,4 +1,3 @@ - /* Copyright 2022 The Matrix.org Foundation C.I.C.