From 252f2ebec05284ed19be6f90775f9a9d65a66e7f Mon Sep 17 00:00:00 2001 From: Germain Date: Fri, 7 Jul 2023 11:55:16 +0100 Subject: [PATCH] Remove hidden read receipts migration (#11139) * Remove hidden read receipts migration * remove unused values * Remove hidden RR migration test --- .../e2e/settings/hidden-rr-migration.spec.ts | 90 ------------------- src/settings/SettingsStore.ts | 34 +------ 2 files changed, 1 insertion(+), 123 deletions(-) delete mode 100644 cypress/e2e/settings/hidden-rr-migration.spec.ts diff --git a/cypress/e2e/settings/hidden-rr-migration.spec.ts b/cypress/e2e/settings/hidden-rr-migration.spec.ts deleted file mode 100644 index 729bf7ebd7..0000000000 --- a/cypress/e2e/settings/hidden-rr-migration.spec.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* -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. -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 { HomeserverInstance } from "../../plugins/utils/homeserver"; - -function seedLabs(homeserver: HomeserverInstance, labsVal: boolean | null): void { - cy.initTestUser(homeserver, "Sally", () => { - // seed labs flag - cy.window({ log: false }).then((win) => { - if (typeof labsVal === "boolean") { - // stringify boolean - win.localStorage.setItem("mx_labs_feature_feature_hidden_read_receipts", `${labsVal}`); - } - }); - }); -} - -function testForVal(settingVal: boolean | null): void { - const testRoomName = "READ RECEIPTS"; - cy.createRoom({ name: testRoomName }).as("roomId"); - cy.all([cy.get("@roomId")]).then(() => { - cy.viewRoomByName(testRoomName).then(() => { - // if we can see the room, then sync is working for us. It's time to see if the - // migration even ran. - - cy.getSettingValue("sendReadReceipts", null, true).should("satisfy", (val) => { - if (typeof settingVal === "boolean") { - return val === settingVal; - } else { - return !val; // falsy - we don't actually care if it's undefined, null, or a literal false - } - }); - }); - }); -} - -describe("Hidden Read Receipts Setting Migration", () => { - // We run this as a full-blown end-to-end test to ensure it works in an integration - // sense. If we unit tested it, we'd be testing that the code works but not that the - // migration actually runs. - // - // Here, we get to test that not only the code works but also that it gets run. Most - // of our interactions are with the JS console as we're honestly just checking that - // things got set correctly. - // - // For a security-sensitive feature like hidden read receipts, it's absolutely vital - // that we migrate the setting appropriately. - - let homeserver: HomeserverInstance; - - beforeEach(() => { - cy.startHomeserver("default").then((data) => { - homeserver = data; - }); - }); - - afterEach(() => { - cy.stopHomeserver(homeserver); - }); - - it("should not migrate the lack of a labs flag", () => { - seedLabs(homeserver, null); - testForVal(null); - }); - - it("should migrate labsHiddenRR=false as sendRR=true", () => { - seedLabs(homeserver, false); - testForVal(true); - }); - - it("should migrate labsHiddenRR=true as sendRR=false", () => { - seedLabs(homeserver, true); - testForVal(false); - }); -}); diff --git a/src/settings/SettingsStore.ts b/src/settings/SettingsStore.ts index 457908d858..0637776802 100644 --- a/src/settings/SettingsStore.ts +++ b/src/settings/SettingsStore.ts @@ -35,9 +35,6 @@ import SettingsHandler from "./handlers/SettingsHandler"; import { SettingUpdatedPayload } from "../dispatcher/payloads/SettingUpdatedPayload"; import { Action } from "../dispatcher/actions"; import PlatformSettingsHandler from "./handlers/PlatformSettingsHandler"; -import dispatcher from "../dispatcher/dispatcher"; -import { ActionPayload } from "../dispatcher/payloads"; -import { MatrixClientPeg } from "../MatrixClientPeg"; // Convert the settings to easier to manage objects for the handlers const defaultSettings: Record = {}; @@ -606,36 +603,7 @@ export default class SettingsStore { public static runMigrations(): void { // Dev notes: to add your migration, just add a new `migrateMyFeature` function, call it, and // add a comment to note when it can be removed. - - SettingsStore.migrateHiddenReadReceipts(); // Can be removed after October 2022. - } - - private static migrateHiddenReadReceipts(): void { - if (MatrixClientPeg.safeGet().isGuest()) return; // not worth it - - // We wait for the first sync to ensure that the user's existing account data has loaded, as otherwise - // getValue() for an account-level setting like sendReadReceipts will return `null`. - const disRef = dispatcher.register((payload: ActionPayload) => { - if (payload.action === "MatrixActions.sync") { - dispatcher.unregister(disRef); - - const rrVal = SettingsStore.getValue("sendReadReceipts", null, true); - if (typeof rrVal !== "boolean") { - // new setting isn't set - see if the labs flag was. We have to manually reach into the - // handler for this because it isn't a setting anymore (`getValue` will yell at us). - const handler = LEVEL_HANDLERS[SettingLevel.DEVICE] as DeviceSettingsHandler; - const labsVal = handler.readFeature("feature_hidden_read_receipts"); - if (typeof labsVal === "boolean") { - // Inverse of labs flag because negative->positive language switch in setting name - const newVal = !labsVal; - console.log(`Setting sendReadReceipts to ${newVal} because of previously-set labs flag`); - - // noinspection JSIgnoredPromiseFromCall - SettingsStore.setValue("sendReadReceipts", null, SettingLevel.ACCOUNT, newVal); - } - } - } - }); + return; } /**