mattermost/e2e-tests/cypress/tests/support/ui/sidebar_left.ts

273 lines
8.2 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {ChainableT} from '../../types';
Cypress.Commands.add('uiGetLHS', () => {
return cy.get('#SidebarContainer').should('be.visible');
});
Cypress.Commands.add('uiGetLHSHeader', () => {
return cy.uiGetLHS().
find('#sidebarTeamMenuButton').
should('be.visible');
});
Cypress.Commands.add('uiOpenTeamMenu', (item = '') => {
// # Click on LHS header
cy.uiGetLHSHeader().click();
if (!item) {
// # Return the menu if no item is passed
return cy.uiGetLHSTeamMenu();
}
// # Click on a particular item
return cy.uiGetLHSTeamMenu().
findByText(item).
scrollIntoView().
should('be.visible').
click();
});
Cypress.Commands.add('uiGetLHSAddChannelButton', () => {
return cy.uiGetLHS().findByRole('button', {name: 'Browse or create channels'});
});
Cypress.Commands.add('uiGetLHSTeamMenu', () => {
return cy.get('#sidebarTeamMenu');
});
function uiOpenSystemConsoleMenu(item = ''): ChainableT<JQuery> {
// # Click on LHS header button
cy.uiGetSystemConsoleButton().click();
if (!item) {
// # Return the menu if no item is passed
return cy.uiGetSystemConsoleMenu();
}
// # Click on a particular item
return cy.uiGetSystemConsoleMenu().
findByText(item).
scrollIntoView().
should('be.visible').
click();
}
Cypress.Commands.add('uiOpenSystemConsoleMenu', uiOpenSystemConsoleMenu);
function uiGetSystemConsoleButton(): ChainableT<JQuery> {
return cy.get('.admin-sidebar').
findByRole('button', {name: 'Menu Icon'});
}
Cypress.Commands.add('uiGetSystemConsoleButton', uiGetSystemConsoleButton);
function uiGetSystemConsoleMenu(): ChainableT<JQuery> {
return cy.get('.admin-sidebar').
find('.dropdown-menu').
should('be.visible');
}
Cypress.Commands.add('uiGetSystemConsoleMenu', uiGetSystemConsoleMenu);
Cypress.Commands.add('uiGetLhsSection', (section) => {
if (section === 'UNREADS') {
return cy.findByText(section).
parent().
parent().
parent();
}
return cy.findAllByRole('button', {name: section}).
first().
parent().
parent().
parent();
});
Cypress.Commands.add('uiBrowseOrCreateChannel', (menuitem) => {
cy.uiGetLHSAddChannelButton().should('be.visible').click();
cy.get('#browserOrAddChannelMenu').
should('exist').and('be.visible').
within(() => {
if (menuitem) {
cy.findByText(menuitem).should('exist').click();
}
});
});
Cypress.Commands.add('uiAddDirectMessage', () => {
return cy.findByRole('button', {name: 'Write a direct message'});
});
Cypress.Commands.add('uiGetFindChannels', () => {
return cy.get('#lhsNavigator').findByRole('button', {name: 'Find Channels'});
});
Cypress.Commands.add('uiOpenFindChannels', () => {
cy.uiGetFindChannels().click();
});
function uiGetSidebarThreadsButton(): ChainableT<JQuery> {
return cy.get('#sidebar-threads-button').should('be.visible');
}
Cypress.Commands.add('uiGetSidebarThreadsButton', uiGetSidebarThreadsButton);
Cypress.Commands.add('uiGetChannelSidebarMenu', (channelName, isChannelId = false) => {
cy.uiGetLHS().within(() => {
if (isChannelId) {
cy.get(`#sidebarItem_${channelName}`).should('be.visible').find('button').should('exist').click({force: true});
} else {
cy.findByText(channelName).should('be.visible').parents('a').find('button').should('exist').click({force: true});
}
});
return cy.findByRole('menu', {name: 'Edit channel menu'}).should('be.visible');
});
Cypress.Commands.add('uiClickSidebarItem', (name) => {
cy.uiGetSidebarItem(name).click({force: true});
if (name === 'threads') {
cy.get('body').then((body) => {
if (body.find('#genericModalLabel').length > 0) {
cy.uiCloseModal('A new way to view and follow threads');
}
});
cy.get('#tutorial-threads-mobile-header span.Button_label').contains('Followed threads');
} else {
cy.findAllByTestId('postView').last().scrollIntoView().should('be.visible');
}
});
Cypress.Commands.add('uiGetSidebarItem', (channelName) => {
return cy.get(`#sidebarItem_${channelName}`);
});
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cypress {
interface Chainable {
/**
* Get LHS
*
* @example
* cy.uiGetLHS();
*/
uiGetLHS(): Chainable;
/**
* Get LHS header
*
* @example
* cy.uiGetLHSHeader().click();
*/
uiGetLHSHeader(): Chainable;
/**
* Open team menu
*
* @param {string} item - ex. 'Invite People', 'Team Settings', etc.
*
* @example
* cy.uiOpenTeamMenu();
*/
uiOpenTeamMenu(item?: string): Chainable;
/**
* Get LHS add channel button
*
* @example
* cy.uiGetLHSAddChannelButton().click();
*/
uiGetLHSAddChannelButton(): Chainable;
/**
* Get LHS team menu
*
* @example
* cy.uiGetLHSTeamMenu().should('not.exist);
*/
uiGetLHSTeamMenu(): Chainable;
/**
* Get LHS section
* @param {string} section - section such as UNREADS, CHANNELS, FAVORITES, DIRECT MESSAGES and other custom category
*
* @example
* cy.uiGetLhsSection('CHANNELS');
*/
uiGetLhsSection(section: string): Chainable;
/**
* Open menu to browse or create channel
* @param {string} item - dropdown menu. If set, it will do click action.
*
* @example
* cy.uiBrowseOrCreateChannel('Browse channels');
*/
uiBrowseOrCreateChannel(item: string): Chainable;
/**
* Get "+" button to write a direct message
* @example
* cy.uiAddDirectMessage();
*/
uiAddDirectMessage(): Chainable;
/**
* Get find channels button
* @example
* cy.uiGetFindChannels();
*/
uiGetFindChannels(): Chainable;
/**
* Open find channels
* @example
* cy.uiOpenFindChannels();
*/
uiOpenFindChannels(): Chainable;
/**
* Open menu of a channel in the sidebar
* @param {string} channelName - name of channel, ex. 'town-square'
* @param {boolean} isChannelId - default false. If true, it will use channel id instead of channel name
* @example
* cy.uiGetChannelSidebarMenu('Town Square');
* cy.uiGetChannelSidebarMenu('user1212__user333', true);
*/
uiGetChannelSidebarMenu(channelName: string, isChannelId?: boolean): Chainable;
/**
* Click sidebar item by channel or thread name
* @param {string} name - channel name for channels, and threads for Global Threads
*
* @example
* cy.uiClickSidebarItem('town-square');
*/
uiClickSidebarItem(name: string): Chainable;
/**
* Get sidebar item by channel or thread name
* @param {string} name - channel name for channels, and threads for Global Threads
*
* @example
* cy.uiGetSidebarItem('town-square').find('.badge').should('be.visible');
*/
uiGetSidebarItem(name: string): Chainable;
uiOpenSystemConsoleMenu: typeof uiOpenSystemConsoleMenu;
uiGetSystemConsoleButton: typeof uiGetSystemConsoleButton;
uiGetSystemConsoleMenu: typeof uiGetSystemConsoleMenu;
uiGetSidebarThreadsButton: typeof uiGetSidebarThreadsButton;
}
}
}