mirror of
https://github.com/vector-im/element-web.git
synced 2024-11-16 21:24:59 +08:00
f3f14afbbf
* Move spaces tests from Puppeteer to Cypress * Add missing fixture * Tweak synapsedocker to not double error on a docker failure * Fix space hierarchy loading race condition Fixes https://github.com/matrix-org/element-web-rageshakes/issues/10345 * Fix race condition when creating public space with url update code * Try Electron once more due to perms issues around clipboard * Try set browser permissions properly * Try to enable clipboard another way * Try electron again * Try electron again again * Switch to built-in cypress feature for file uploads * Mock clipboard instead * TMPDIR ftw? * uid:gid pls * Clipboard tests can now run on any browser due to mocking * Test Enter as well as button for space creation * Make the test actually work * Update cypress/support/util.ts Co-authored-by: Eric Eastwood <erice@element.io> Co-authored-by: Eric Eastwood <erice@element.io>
94 lines
3.3 KiB
TypeScript
94 lines
3.3 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 type { ICreateRoomOpts } from "matrix-js-sdk/src/@types/requests";
|
|
import type { MatrixClient } from "matrix-js-sdk/src/client";
|
|
import type { Room } from "matrix-js-sdk/src/models/room";
|
|
import Chainable = Cypress.Chainable;
|
|
|
|
declare global {
|
|
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
namespace Cypress {
|
|
interface Chainable {
|
|
/**
|
|
* Returns the MatrixClient from the MatrixClientPeg
|
|
*/
|
|
getClient(): Chainable<MatrixClient | undefined>;
|
|
/**
|
|
* Create a room with given options.
|
|
* @param options the options to apply when creating the room
|
|
* @return the ID of the newly created room
|
|
*/
|
|
createRoom(options: ICreateRoomOpts): Chainable<string>;
|
|
/**
|
|
* Create a space with given options.
|
|
* @param options the options to apply when creating the space
|
|
* @return the ID of the newly created space (room)
|
|
*/
|
|
createSpace(options: ICreateRoomOpts): Chainable<string>;
|
|
/**
|
|
* Invites the given user to the given room.
|
|
* @param roomId the id of the room to invite to
|
|
* @param userId the id of the user to invite
|
|
*/
|
|
inviteUser(roomId: string, userId: string): Chainable<{}>;
|
|
}
|
|
}
|
|
}
|
|
|
|
Cypress.Commands.add("getClient", (): Chainable<MatrixClient | undefined> => {
|
|
return cy.window({ log: false }).then(win => win.mxMatrixClientPeg.matrixClient);
|
|
});
|
|
|
|
Cypress.Commands.add("createRoom", (options: ICreateRoomOpts): Chainable<string> => {
|
|
return cy.window({ log: false }).then(async win => {
|
|
const cli = win.mxMatrixClientPeg.matrixClient;
|
|
const resp = await cli.createRoom(options);
|
|
const roomId = resp.room_id;
|
|
|
|
if (!cli.getRoom(roomId)) {
|
|
await new Promise<void>(resolve => {
|
|
const onRoom = (room: Room) => {
|
|
if (room.roomId === roomId) {
|
|
cli.off(win.matrixcs.ClientEvent.Room, onRoom);
|
|
resolve();
|
|
}
|
|
};
|
|
cli.on(win.matrixcs.ClientEvent.Room, onRoom);
|
|
});
|
|
}
|
|
|
|
return roomId;
|
|
});
|
|
});
|
|
|
|
Cypress.Commands.add("createSpace", (options: ICreateRoomOpts): Chainable<string> => {
|
|
return cy.createRoom({
|
|
...options,
|
|
creation_content: {
|
|
"type": "m.space",
|
|
},
|
|
});
|
|
});
|
|
|
|
Cypress.Commands.add("inviteUser", (roomId: string, userId: string): Chainable<{}> => {
|
|
return cy.getClient().then(async (cli: MatrixClient) => {
|
|
return cli.invite(roomId, userId);
|
|
});
|
|
});
|