91 lines
3.1 KiB
TypeScript
91 lines
3.1 KiB
TypeScript
/*
|
|
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.
|
|
*/
|
|
|
|
/// <reference types="cypress" />
|
|
|
|
import { SynapseInstance } from "../../plugins/synapsedocker";
|
|
|
|
function seedLabs(synapse: SynapseInstance, labsVal: boolean | null): void {
|
|
cy.initTestUser(synapse, "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<string>("@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 synapse: SynapseInstance;
|
|
|
|
beforeEach(() => {
|
|
cy.startSynapse("default").then(data => {
|
|
synapse = data;
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
cy.stopSynapse(synapse);
|
|
});
|
|
|
|
it('should not migrate the lack of a labs flag', () => {
|
|
seedLabs(synapse, null);
|
|
testForVal(null);
|
|
});
|
|
|
|
it('should migrate labsHiddenRR=false as sendRR=true', () => {
|
|
seedLabs(synapse, false);
|
|
testForVal(true);
|
|
});
|
|
|
|
it('should migrate labsHiddenRR=true as sendRR=false', () => {
|
|
seedLabs(synapse, true);
|
|
testForVal(false);
|
|
});
|
|
});
|