Move the user view tests from Puppeteer to Cypress (#8787)
* Move the user view tests from Puppeteer to Cypress * Iterate snapshot test * Actually import the new module * Specify widths * Update cypress & percy * Try fix percy * Finish cypress upgrade * Tidy cypress.config.ts * Revert "Tidy cypress.config.ts" This reverts commit d913052cc4e12f836b99645bda81bbcf21d5f3c8. * Revert "Finish cypress upgrade" This reverts commit b5aba3b8a32edbc36549fbd8a27eb0de0390da2a. * Revert "Update cypress & percy" This reverts commit f846a364f81b23b173d9af67230aa074bd248cf6. * delint * Update percy
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
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";
|
||||
import { MatrixClient } from "../../global";
|
||||
|
||||
describe("UserView", () => {
|
||||
let synapse: SynapseInstance;
|
||||
|
||||
beforeEach(() => {
|
||||
cy.startSynapse("default").then(data => {
|
||||
synapse = data;
|
||||
|
||||
cy.initTestUser(synapse, "Violet");
|
||||
cy.getBot(synapse, "Usman").as("bot");
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
cy.stopSynapse(synapse);
|
||||
});
|
||||
|
||||
it("should render the user view as expected", () => {
|
||||
cy.get<MatrixClient>("@bot").then(bot => {
|
||||
cy.visit(`/#/user/${bot.getUserId()}`);
|
||||
});
|
||||
|
||||
cy.get("#mx_RightPanel .mx_UserInfo_profile h2").should("contain", "Usman");
|
||||
cy.get(".mx_RightPanel .mx_Spinner").should("not.exist"); // wait for spinners to finish
|
||||
cy.get(".mx_RightPanel").percySnapshotElement("User View", {
|
||||
// Hide the MXID field as it'll vary on each test
|
||||
percyCSS: ".mx_UserInfo_profile_mxid { visibility: hidden !important; }",
|
||||
widths: [260, 500],
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -16,7 +16,6 @@ limitations under the License.
|
||||
|
||||
/// <reference types="cypress" />
|
||||
|
||||
import "./client"; // XXX: without an (any) import here, types break down
|
||||
import Chainable = Cypress.Chainable;
|
||||
import AUTWindow = Cypress.AUTWindow;
|
||||
|
||||
@@ -41,3 +40,6 @@ Cypress.Commands.add("tweakConfig", (tweaks: Record<string, any>): Chainable<AUT
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Needed to make this file a module
|
||||
export { };
|
||||
|
||||
@@ -28,3 +28,4 @@ import "./bot";
|
||||
import "./clipboard";
|
||||
import "./util";
|
||||
import "./app";
|
||||
import "./percy";
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
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 { SnapshotOptions as PercySnapshotOptions } from '@percy/core';
|
||||
|
||||
declare global {
|
||||
// eslint-disable-next-line @typescript-eslint/no-namespace
|
||||
namespace Cypress {
|
||||
interface SnapshotOptions extends PercySnapshotOptions {
|
||||
domTransformation?: (documentClone: Document) => void;
|
||||
}
|
||||
|
||||
interface Chainable {
|
||||
percySnapshotElement(name?: string, options?: SnapshotOptions);
|
||||
}
|
||||
|
||||
interface Chainable {
|
||||
/**
|
||||
* Takes a Percy snapshot of a given element
|
||||
*/
|
||||
percySnapshotElement(name: string, options: SnapshotOptions): Chainable<void>;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Cypress.Commands.add("percySnapshotElement", { prevSubject: true }, (subject, name, options) => {
|
||||
cy.percySnapshot(name, {
|
||||
domTransformation: documentClone => scope(documentClone, subject.selector),
|
||||
...options,
|
||||
});
|
||||
});
|
||||
|
||||
function scope(documentClone: Document, selector: string): Document {
|
||||
const element = documentClone.querySelector(selector);
|
||||
documentClone.querySelector('body').innerHTML = element.outerHTML;
|
||||
|
||||
return documentClone;
|
||||
}
|
||||
|
||||
export { };
|
||||
Reference in New Issue
Block a user