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);
 | 
						|
    });
 | 
						|
});
 |