Files
team/e2e-tests/cypress/tests/support/ui/channel_sidebar.ts
Harrison HealeyandGitHub daec1283e5 MM-69003 Mostly share ESLint config between web app and E2E tests (#36767)
* Switch Cypress to use shared ESLint config

* Run --fix in Cypress

* Manually fix remaining lint issues in Cypress

* Switch Playwright to use shared ESLint config

* Run --fix in Playwright

* Manually fix remaining lint issues in Playwright

* Install and cache web app deps during Cypress CI builds

This also caches the types and client package. That isn't needed currently
since it uses prepackaged versions of those, but I imagine we might change
that at some point.

* Run e2e-tests-check when ESLint plugin is updated

* Change E2E test GHA caching to cache all of web app node_modules

* Fix mismatch between cache save and restore

* Try bumping cache keys

* Copy step to install dependencies to server.run_cypress.sh

I don't know how this must've worked before, but if this fixes the issue,
it seems like neither Cypress nor Playwright actually use the cached
depenendencies.

* Try disabling caching entirely for Cypress tests

* Try bypassing makefile?

* Try also manually building dependencies in run_specs.sh

I don't know why this appears to duplicate run_cypress.sh and
run_playwright.sh, both of which are called run_test.sh which
might not be used any more as best I can tell.

* Try installing the web app dependencies in yet another place

* Disable the extra steps in server.prepare.sh specifically for Cypress

* Revert changes to update cache key and disable web app depenedency cache on Cypress builds
2026-06-09 20:50:58 +00:00

85 lines
3.1 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {getRandomId} from '../../utils';
import type {ChainableT} from '@/types';
/**
* Create a new category
*
* @param [categoryName] category's name
*
* @example
* cy.uiCreateSidebarCategory();
*/
function uiCreateSidebarCategory(categoryName: string = `category-${getRandomId()}`): ChainableT<any> {
// # Click on the sidebar menu dropdown and select Create Category
cy.uiBrowseOrCreateChannel('Create new category');
cy.findByRole('dialog', {name: 'Create New Category'}).should('be.visible').within(() => {
// # Fill in the category name and click 'Create'
cy.findByRole('textbox').should('be.visible').typeWithForce(categoryName).
invoke('val').should('equal', categoryName);
cy.findByRole('button', {name: 'Create'}).should('be.enabled').click();
});
// * Wait for the category to appear in the sidebar
cy.contains('.SidebarChannelGroup', categoryName, {matchCase: false});
return cy.wrap({displayName: categoryName});
}
Cypress.Commands.add('uiCreateSidebarCategory', uiCreateSidebarCategory);
/**
* Move a channel to a category.
* Open the channel menu, select Move to, and click either New Category or on the category.
*
* @param channelName channel's name
* @param categoryName category's name
* @param [newCategory=false] create a new category to move into
* @param [isChannelId=false] whether channelName is a channel ID
*
* @example
* cy.uiMoveChannelToCategory('Town Square', 'Favorites');
*/
function uiMoveChannelToCategory(channelName: string, categoryName: string, newCategory = false, isChannelId = false): ChainableT<any> {
// # Open the channel menu, select Move to
cy.uiGetChannelSidebarMenu(channelName, isChannelId).within(() => {
cy.findByText('Move to...').should('be.visible').trigger('mouseover');
});
// # Select the move to category
cy.findAllByRole('menu', {name: 'Move to submenu'}).should('be.visible').within(() => {
if (newCategory) {
cy.findByText('New Category').should('be.visible').click({force: true});
} else {
cy.findByText(categoryName).should('be.visible').click({force: true});
}
});
if (newCategory) {
cy.findByRole('dialog', {name: 'Create New Category'}).should('be.visible').within(() => {
// # Fill in the category name and click 'Create'
cy.findByRole('textbox').should('be.visible').typeWithForce(categoryName).
invoke('val').should('equal', categoryName);
cy.findByRole('button', {name: 'Create'}).should('be.enabled').click();
});
}
return cy.wrap({displayName: categoryName});
}
Cypress.Commands.add('uiMoveChannelToCategory', uiMoveChannelToCategory);
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cypress {
interface Chainable {
uiCreateSidebarCategory: typeof uiCreateSidebarCategory;
uiMoveChannelToCategory: typeof uiMoveChannelToCategory;
}
}
}