Update spaces.spec.ts - use Cypress Testing Library (#10620)
Signed-off-by: Suguru Hirahara <luixxiul@users.noreply.github.com>pull/28788/head^2
parent
782060a26e
commit
5445ee85cd
|
@ -24,7 +24,7 @@ import Chainable = Cypress.Chainable;
|
||||||
import { UserCredentials } from "../../support/login";
|
import { UserCredentials } from "../../support/login";
|
||||||
|
|
||||||
function openSpaceCreateMenu(): Chainable<JQuery> {
|
function openSpaceCreateMenu(): Chainable<JQuery> {
|
||||||
cy.get(".mx_SpaceButton_new").click();
|
cy.findByRole("button", { name: "Create a space" }).click();
|
||||||
return cy.get(".mx_SpaceCreateMenu_wrapper .mx_ContextualMenu");
|
return cy.get(".mx_SpaceCreateMenu_wrapper .mx_ContextualMenu");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,64 +83,72 @@ describe("Spaces", () => {
|
||||||
openSpaceCreateMenu();
|
openSpaceCreateMenu();
|
||||||
cy.get("#mx_ContextualMenu_Container").percySnapshotElement("Space create menu");
|
cy.get("#mx_ContextualMenu_Container").percySnapshotElement("Space create menu");
|
||||||
cy.get(".mx_SpaceCreateMenu_wrapper .mx_ContextualMenu").within(() => {
|
cy.get(".mx_SpaceCreateMenu_wrapper .mx_ContextualMenu").within(() => {
|
||||||
cy.get(".mx_SpaceCreateMenuType_public").click();
|
// Regex pattern due to strings of "mx_SpaceCreateMenuType_public"
|
||||||
|
cy.findByRole("button", { name: /Public/ }).click();
|
||||||
|
|
||||||
cy.get('.mx_SpaceBasicSettings_avatarContainer input[type="file"]').selectFile(
|
cy.get('.mx_SpaceBasicSettings_avatarContainer input[type="file"]').selectFile(
|
||||||
"cypress/fixtures/riot.png",
|
"cypress/fixtures/riot.png",
|
||||||
{ force: true },
|
{ force: true },
|
||||||
);
|
);
|
||||||
cy.get('input[label="Name"]').type("Let's have a Riot");
|
cy.findByRole("textbox", { name: "Name" }).type("Let's have a Riot");
|
||||||
cy.get('input[label="Address"]').should("have.value", "lets-have-a-riot");
|
cy.findByRole("textbox", { name: "Address" }).should("have.value", "lets-have-a-riot");
|
||||||
cy.get('textarea[label="Description"]').type("This is a space to reminisce Riot.im!");
|
cy.findByRole("textbox", { name: "Description" }).type("This is a space to reminisce Riot.im!");
|
||||||
cy.contains(".mx_AccessibleButton", "Create").click();
|
cy.findByRole("button", { name: "Create" }).click();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Create the default General & Random rooms, as well as a custom "Jokes" room
|
// Create the default General & Random rooms, as well as a custom "Jokes" room
|
||||||
cy.get('input[label="Room name"][value="General"]').should("exist");
|
cy.findByPlaceholderText("General").should("exist");
|
||||||
cy.get('input[label="Room name"][value="Random"]').should("exist");
|
cy.findByPlaceholderText("Random").should("exist");
|
||||||
cy.get('input[placeholder="Support"]').type("Jokes");
|
cy.findByPlaceholderText("Support").type("Jokes");
|
||||||
cy.contains(".mx_AccessibleButton", "Continue").click();
|
cy.findByRole("button", { name: "Continue" }).click();
|
||||||
|
|
||||||
// Copy matrix.to link
|
// Copy matrix.to link
|
||||||
cy.get(".mx_SpacePublicShare_shareButton").focus().realClick();
|
// Regex pattern due to strings of "mx_SpacePublicShare_shareButton"
|
||||||
|
cy.findByRole("button", { name: /Share invite link/ }).realClick();
|
||||||
cy.getClipboardText().should("eq", "https://matrix.to/#/#lets-have-a-riot:localhost");
|
cy.getClipboardText().should("eq", "https://matrix.to/#/#lets-have-a-riot:localhost");
|
||||||
|
|
||||||
// Go to space home
|
// Go to space home
|
||||||
cy.contains(".mx_AccessibleButton", "Go to my first room").click();
|
cy.findByRole("button", { name: "Go to my first room" }).click();
|
||||||
|
|
||||||
// Assert rooms exist in the room list
|
// Assert rooms exist in the room list
|
||||||
cy.contains(".mx_RoomList .mx_RoomTile", "General").should("exist");
|
cy.findByRole("treeitem", { name: "General" }).should("exist");
|
||||||
cy.contains(".mx_RoomList .mx_RoomTile", "Random").should("exist");
|
cy.findByRole("treeitem", { name: "Random" }).should("exist");
|
||||||
cy.contains(".mx_RoomList .mx_RoomTile", "Jokes").should("exist");
|
cy.findByRole("treeitem", { name: "Jokes" }).should("exist");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should allow user to create private space", () => {
|
it("should allow user to create private space", () => {
|
||||||
openSpaceCreateMenu().within(() => {
|
openSpaceCreateMenu().within(() => {
|
||||||
cy.get(".mx_SpaceCreateMenuType_private").click();
|
// Regex pattern due to strings of "mx_SpaceCreateMenuType_private"
|
||||||
|
cy.findByRole("button", { name: /Private/ }).click();
|
||||||
|
|
||||||
cy.get('.mx_SpaceBasicSettings_avatarContainer input[type="file"]').selectFile(
|
cy.get('.mx_SpaceBasicSettings_avatarContainer input[type="file"]').selectFile(
|
||||||
"cypress/fixtures/riot.png",
|
"cypress/fixtures/riot.png",
|
||||||
{ force: true },
|
{ force: true },
|
||||||
);
|
);
|
||||||
cy.get('input[label="Name"]').type("This is not a Riot");
|
cy.findByRole("textbox", { name: "Name" }).type("This is not a Riot");
|
||||||
cy.get('input[label="Address"]').should("not.exist");
|
cy.findByRole("textbox", { name: "Address" }).should("not.exist");
|
||||||
cy.get('textarea[label="Description"]').type("This is a private space of mourning Riot.im...");
|
cy.findByRole("textbox", { name: "Description" }).type("This is a private space of mourning Riot.im...");
|
||||||
cy.contains(".mx_AccessibleButton", "Create").click();
|
cy.findByRole("button", { name: "Create" }).click();
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.get(".mx_SpaceRoomView_privateScope_meAndMyTeammatesButton").click();
|
// Regex pattern due to strings of "mx_SpaceRoomView_privateScope_meAndMyTeammatesButton"
|
||||||
|
cy.findByRole("button", { name: /Me and my teammates/ }).click();
|
||||||
|
|
||||||
// Create the default General & Random rooms, as well as a custom "Projects" room
|
// Create the default General & Random rooms, as well as a custom "Projects" room
|
||||||
cy.get('input[label="Room name"][value="General"]').should("exist");
|
cy.findByPlaceholderText("General").should("exist");
|
||||||
cy.get('input[label="Room name"][value="Random"]').should("exist");
|
cy.findByPlaceholderText("Random").should("exist");
|
||||||
cy.get('input[placeholder="Support"]').type("Projects");
|
cy.findByPlaceholderText("Support").type("Projects");
|
||||||
cy.contains(".mx_AccessibleButton", "Continue").click();
|
cy.findByRole("button", { name: "Continue" }).click();
|
||||||
|
|
||||||
cy.get(".mx_SpaceRoomView").should("contain", "Invite your teammates");
|
cy.get(".mx_SpaceRoomView").within(() => {
|
||||||
cy.contains(".mx_AccessibleButton", "Skip for now").click();
|
cy.get("h1").findByText("Invite your teammates");
|
||||||
|
cy.findByRole("button", { name: "Skip for now" }).click();
|
||||||
|
});
|
||||||
|
|
||||||
// Assert rooms exist in the room list
|
// Assert rooms exist in the room list
|
||||||
cy.contains(".mx_RoomList .mx_RoomTile", "General").should("exist");
|
cy.findByRole("treeitem", { name: "General" }).should("exist");
|
||||||
cy.contains(".mx_RoomList .mx_RoomTile", "Random").should("exist");
|
cy.findByRole("treeitem", { name: "Random" }).should("exist");
|
||||||
cy.contains(".mx_RoomList .mx_RoomTile", "Projects").should("exist");
|
cy.findByRole("treeitem", { name: "Projects" }).should("exist");
|
||||||
|
|
||||||
// Assert rooms exist in the space explorer
|
// Assert rooms exist in the space explorer
|
||||||
cy.contains(".mx_SpaceHierarchy_list .mx_SpaceHierarchy_roomTile", "General").should("exist");
|
cy.contains(".mx_SpaceHierarchy_list .mx_SpaceHierarchy_roomTile", "General").should("exist");
|
||||||
|
@ -154,23 +162,32 @@ describe("Spaces", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
openSpaceCreateMenu().within(() => {
|
openSpaceCreateMenu().within(() => {
|
||||||
cy.get(".mx_SpaceCreateMenuType_private").click();
|
// Regex pattern due to strings of "mx_SpaceCreateMenuType_private"
|
||||||
|
cy.findByRole("button", { name: /Private/ }).click();
|
||||||
|
|
||||||
cy.get('.mx_SpaceBasicSettings_avatarContainer input[type="file"]').selectFile(
|
cy.get('.mx_SpaceBasicSettings_avatarContainer input[type="file"]').selectFile(
|
||||||
"cypress/fixtures/riot.png",
|
"cypress/fixtures/riot.png",
|
||||||
{ force: true },
|
{ force: true },
|
||||||
);
|
);
|
||||||
cy.get('input[label="Address"]').should("not.exist");
|
cy.findByRole("textbox", { name: "Address" }).should("not.exist");
|
||||||
cy.get('textarea[label="Description"]').type("This is a personal space to mourn Riot.im...");
|
cy.findByRole("textbox", { name: "Description" }).type("This is a personal space to mourn Riot.im...");
|
||||||
cy.get('input[label="Name"]').type("This is my Riot{enter}");
|
cy.findByRole("textbox", { name: "Name" }).type("This is my Riot{enter}");
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.get(".mx_SpaceRoomView_privateScope_justMeButton").click();
|
// Regex pattern due to of strings of "mx_SpaceRoomView_privateScope_justMeButton"
|
||||||
|
cy.findByRole("button", { name: /Just me/ }).click();
|
||||||
|
|
||||||
cy.get(".mx_AddExistingToSpace_entry").click();
|
cy.findByText("Sample Room").click({ force: true }); // force click as checkbox size is zero
|
||||||
cy.contains(".mx_AccessibleButton", "Add").click();
|
|
||||||
|
|
||||||
cy.contains(".mx_RoomList .mx_RoomTile", "Sample Room").should("exist");
|
// Temporal implementation as multiple elements with the role "button" and name "Add" are found
|
||||||
cy.contains(".mx_SpaceHierarchy_list .mx_SpaceHierarchy_roomTile", "Sample Room").should("exist");
|
cy.get(".mx_AddExistingToSpace_footer").within(() => {
|
||||||
|
cy.findByRole("button", { name: "Add" }).click();
|
||||||
|
});
|
||||||
|
|
||||||
|
cy.get(".mx_SpaceHierarchy_list").within(() => {
|
||||||
|
// Regex pattern due to the strings of "mx_SpaceHierarchy_roomTile_joined"
|
||||||
|
cy.findByRole("treeitem", { name: /Sample Room/ }).should("exist");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should allow user to invite another to a space", () => {
|
it("should allow user to invite another to a space", () => {
|
||||||
|
@ -185,20 +202,24 @@ describe("Spaces", () => {
|
||||||
}).as("spaceId");
|
}).as("spaceId");
|
||||||
|
|
||||||
openSpaceContextMenu("#space:localhost").within(() => {
|
openSpaceContextMenu("#space:localhost").within(() => {
|
||||||
cy.get('.mx_SpacePanel_contextMenu_inviteButton[aria-label="Invite"]').click();
|
cy.findByRole("menuitem", { name: "Invite" }).click();
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.get(".mx_SpacePublicShare").within(() => {
|
cy.get(".mx_SpacePublicShare").within(() => {
|
||||||
// Copy link first
|
// Copy link first
|
||||||
cy.get(".mx_SpacePublicShare_shareButton").focus().realClick();
|
// Regex pattern due to strings of "mx_SpacePublicShare_shareButton"
|
||||||
|
cy.findByRole("button", { name: /Share invite link/ })
|
||||||
|
.focus()
|
||||||
|
.realClick();
|
||||||
cy.getClipboardText().should("eq", "https://matrix.to/#/#space:localhost");
|
cy.getClipboardText().should("eq", "https://matrix.to/#/#space:localhost");
|
||||||
// Start Matrix invite flow
|
// Start Matrix invite flow
|
||||||
cy.get(".mx_SpacePublicShare_inviteButton").click();
|
// Regex pattern due to strings of "mx_SpacePublicShare_inviteButton"
|
||||||
|
cy.findByRole("button", { name: /Invite people/ }).click();
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.get(".mx_InviteDialog_other").within(() => {
|
cy.get(".mx_InviteDialog_other").within(() => {
|
||||||
cy.get('input[type="text"]').type(bot.getUserId());
|
cy.findByRole("textbox").type(bot.getUserId());
|
||||||
cy.contains(".mx_AccessibleButton", "Invite").click();
|
cy.findByRole("button", { name: "Invite" }).click();
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.get(".mx_InviteDialog_other").should("not.exist");
|
cy.get(".mx_InviteDialog_other").should("not.exist");
|
||||||
|
@ -219,7 +240,7 @@ describe("Spaces", () => {
|
||||||
.should("exist")
|
.should("exist")
|
||||||
.parent()
|
.parent()
|
||||||
.next()
|
.next()
|
||||||
.find('.mx_SpaceButton[aria-label="My Space"]')
|
.findByRole("button", { name: "My Space" })
|
||||||
.should("exist");
|
.should("exist");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -243,8 +264,11 @@ describe("Spaces", () => {
|
||||||
cy.viewSpaceHomeByName(spaceName);
|
cy.viewSpaceHomeByName(spaceName);
|
||||||
});
|
});
|
||||||
cy.get(".mx_SpaceRoomView .mx_SpaceHierarchy_list").within(() => {
|
cy.get(".mx_SpaceRoomView .mx_SpaceHierarchy_list").within(() => {
|
||||||
cy.contains(".mx_SpaceHierarchy_roomTile", "Music").should("exist");
|
// Regex pattern due to strings in "mx_SpaceHierarchy_roomTile_name"
|
||||||
cy.contains(".mx_SpaceHierarchy_roomTile", "Gaming").should("exist");
|
cy.findByRole("treeitem", { name: /Music/ }).findByRole("button").should("exist");
|
||||||
|
cy.findByRole("treeitem", { name: /Gaming/ })
|
||||||
|
.findByRole("button")
|
||||||
|
.should("exist");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -260,8 +284,12 @@ describe("Spaces", () => {
|
||||||
initial_state: [spaceChildInitialState(spaceId)],
|
initial_state: [spaceChildInitialState(spaceId)],
|
||||||
}).as("spaceId");
|
}).as("spaceId");
|
||||||
});
|
});
|
||||||
cy.get('.mx_SpacePanel .mx_SpaceButton[aria-label="Root Space"]').should("exist");
|
|
||||||
cy.get('.mx_SpacePanel .mx_SpaceButton[aria-label="Child Space"]').should("not.exist");
|
// Find collapsed Space panel
|
||||||
|
cy.findByRole("tree", { name: "Spaces" }).within(() => {
|
||||||
|
cy.findByRole("button", { name: "Root Space" }).should("exist");
|
||||||
|
cy.findByRole("button", { name: "Child Space" }).should("not.exist");
|
||||||
|
});
|
||||||
|
|
||||||
const axeOptions = {
|
const axeOptions = {
|
||||||
rules: {
|
rules: {
|
||||||
|
@ -274,8 +302,12 @@ describe("Spaces", () => {
|
||||||
cy.checkA11y(undefined, axeOptions);
|
cy.checkA11y(undefined, axeOptions);
|
||||||
cy.get(".mx_SpacePanel").percySnapshotElement("Space panel collapsed", { widths: [68] });
|
cy.get(".mx_SpacePanel").percySnapshotElement("Space panel collapsed", { widths: [68] });
|
||||||
|
|
||||||
cy.get(".mx_SpaceButton_toggleCollapse").click({ force: true });
|
cy.findByRole("tree", { name: "Spaces" }).within(() => {
|
||||||
cy.get(".mx_SpacePanel:not(.collapsed)").should("exist");
|
// This finds the expand button with the class name "mx_SpaceButton_toggleCollapse". Note there is another
|
||||||
|
// button with the same name with different class name "mx_SpacePanel_toggleCollapse".
|
||||||
|
cy.findByRole("button", { name: "Expand" }).realHover().click();
|
||||||
|
});
|
||||||
|
cy.get(".mx_SpacePanel:not(.collapsed)").should("exist"); // TODO: replace :not() selector
|
||||||
|
|
||||||
cy.contains(".mx_SpaceItem", "Root Space")
|
cy.contains(".mx_SpaceItem", "Root Space")
|
||||||
.should("exist")
|
.should("exist")
|
||||||
|
@ -300,12 +332,12 @@ describe("Spaces", () => {
|
||||||
cy.getSpacePanelButton("Test Space").should("exist");
|
cy.getSpacePanelButton("Test Space").should("exist");
|
||||||
cy.wait(500); // without this we can end up clicking too quickly and it ends up having no effect
|
cy.wait(500); // without this we can end up clicking too quickly and it ends up having no effect
|
||||||
cy.viewSpaceByName("Test Space");
|
cy.viewSpaceByName("Test Space");
|
||||||
cy.contains(".mx_AccessibleButton", "Accept").click();
|
cy.findByRole("button", { name: "Accept" }).click();
|
||||||
|
|
||||||
cy.contains(".mx_SpaceHierarchy_roomTile.mx_AccessibleButton", "Test Room").within(() => {
|
// Regex pattern due to strings in "mx_SpaceHierarchy_roomTile_item"
|
||||||
cy.contains("Join").should("exist").realHover().click();
|
cy.findByRole("button", { name: /Test Room/ }).realHover();
|
||||||
cy.contains("View", { timeout: 5000 }).should("exist").click();
|
cy.findByRole("button", { name: "Join" }).should("exist").realHover().click();
|
||||||
});
|
cy.findByRole("button", { name: "View", timeout: 5000 }).should("exist").realHover().click();
|
||||||
|
|
||||||
// Assert we get shown the new room intro, and thus not the soft crash screen
|
// Assert we get shown the new room intro, and thus not the soft crash screen
|
||||||
cy.get(".mx_NewRoomIntro").should("exist");
|
cy.get(".mx_NewRoomIntro").should("exist");
|
||||||
|
|
Loading…
Reference in New Issue