Refactor/migrate/autocomplete database speabase specs to ts (#27837)

* refactor: migrate database/users_spec.js to ts

- migrate file autocomplete/database/users_spec.js to typescripts
- udpate system.d.ts data type adding type
for shouldHaveElasticsearchDisabled

* refactor: migrate users_in_channel_switcher_spec.js

- migrate file users_in_channel_switcher_spec to typescript
- fix issue with data type on file autocomplete/helpers.ts
function verifySuggestionAtChannelSwitcher
- fix issue with data type on file autocomplete/common_test.ts
function doTestQuickChannelSwitcher

* refactor: migrate users_in_message_input_box_spec to ts

- migrate file database/users_in_message_input_box_spec.js to typescript
- migrate file support/ui/suggestion_list.js to typescript and update
docs and type definitions
- update references to doTestPostextbox function
- update references to verifySuggestionAtPostTextbox function

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
Angel Mendez
2024-09-02 04:48:40 -06:00
коммит произвёл GitHub
родитель 073d4ff959
Коммит 84f10a8773
9 изменённых файлов: 90 добавлений и 90 удалений

Просмотреть файл

@@ -16,13 +16,13 @@ import {
verifySuggestionAtPostTextbox,
} from './helpers';
export function doTestPostextbox(mention: string, ...suggestion: Cypress.UserProfile[]) {
export function doTestPostextbox(mention: string, ...suggestion: SimpleUser[]) {
getPostTextboxInput();
startAtMention(mention);
verifySuggestionAtPostTextbox(...suggestion);
}
export function doTestQuickChannelSwitcher(mention: string, ...suggestion: Cypress.UserProfile[]) {
export function doTestQuickChannelSwitcher(mention: string, ...suggestion: SimpleUser[]) {
getQuickChannelSwitcherInput();
startAtMention(mention);
verifySuggestionAtChannelSwitcher(...suggestion);
@@ -49,10 +49,10 @@ export function doTestUserChannelSection(prefix: string, testTeam: Cypress.Team,
type(`@${prefix}odinson`);
// * Thor should be a channel member
cy.uiVerifyAtMentionInSuggestionList(thor as Cypress.UserProfile, true);
cy.uiVerifyAtMentionInSuggestionList(thor, true);
// * Loki should NOT be a channel member
cy.uiVerifyAtMentionInSuggestionList(loki as Cypress.UserProfile, false);
cy.uiVerifyAtMentionInSuggestionList(loki, false);
}
export function doTestDMChannelSidebar(testUsers: Record<string, SimpleUser>) {

Просмотреть файл

@@ -12,11 +12,11 @@
import {getRandomLetter} from '../../../../utils';
import {doTestQuickChannelSwitcher} from '../common_test';
import {createSearchData} from '../helpers';
import {createSearchData, SimpleUser} from '../helpers';
describe('Autocomplete with Database - Users', () => {
const prefix = getRandomLetter(3);
let testUsers;
let testUsers: Record<string, SimpleUser>;
before(() => {
cy.apiGetClientLicense().then(({isCloudLicensed}) => {

Просмотреть файл

@@ -12,11 +12,11 @@
import {getRandomLetter} from '../../../../utils';
import {doTestPostextbox} from '../common_test';
import {createSearchData} from '../helpers';
import {createSearchData, SimpleUser} from '../helpers';
describe('Autocomplete with Database - Users', () => {
const prefix = getRandomLetter(3);
let testUsers;
let testUsers: Record<string, SimpleUser>;
before(() => {
cy.apiGetClientLicense().then(({isCloudLicensed}) => {

Просмотреть файл

@@ -12,12 +12,12 @@
import {getRandomLetter} from '../../../../utils';
import {doTestDMChannelSidebar, doTestUserChannelSection} from '../common_test';
import {createSearchData} from '../helpers';
import {createSearchData, SimpleUser} from '../helpers';
describe('Autocomplete with Database - Users', () => {
const prefix = getRandomLetter(3);
let testUsers;
let testTeam;
let testUsers: Record<string, SimpleUser>;
let testTeam: Cypress.Team;
before(() => {
cy.apiGetClientLicense().then(({isCloudLicensed}) => {

Просмотреть файл

@@ -210,14 +210,14 @@ function startAtMention(string: string) {
cy.get('#suggestionList').should('be.visible');
}
function verifySuggestionAtPostTextbox(...expectedUsers: Cypress.UserProfile[]) {
function verifySuggestionAtPostTextbox(...expectedUsers: SimpleUser[]) {
expectedUsers.forEach((user) => {
cy.wait(TIMEOUTS.HALF_SEC);
cy.uiVerifyAtMentionSuggestion(user);
});
}
function verifySuggestionAtChannelSwitcher(...expectedUsers: Cypress.UserProfile[]) {
function verifySuggestionAtChannelSwitcher(...expectedUsers: SimpleUser[]) {
expectedUsers.forEach((user) => {
cy.findByTestId(user.username).
should('be.visible').

Просмотреть файл

@@ -146,6 +146,14 @@ declare namespace Cypress {
*/
apiInvalidateCache(): Chainable<Record<string, any>>;
/**
* Allow test if matches elastic search disabled.
* Otherwise, fail fast.
* @example
* cy.shouldHaveElasticsearchDisabled();
*/
shouldHaveElasticsearchDisabled(): Chainable;
/**
* Allow test for server other than Cloud edition or with Cloud license.
* Otherwise, fail fast.

Просмотреть файл

@@ -1,41 +0,0 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
/// <reference types="cypress" />
// ***************************************************************
// Each command should be properly documented using JSDoc.
// See https://jsdoc.app/index.html for reference.
// Basic requirements for documentation are the following:
// - Meaningful description
// - Each parameter with `@params`
// - Return value with `@returns`
// - Example usage with `@example`
// Custom command should follow naming convention of having `ui` prefix, e.g. `uiCheckLicenseExists`.
// ***************************************************************
declare namespace Cypress {
interface Chainable {
/**
* Verify user's at-mention in the suggestion list
* @param {UserProfile} user - user object
* @param {boolean} isSelected - check if user is selected with false as default
* @param {string} sectionDividerName - name of the section in suggestion list, ex. "Channel Members"
*
* @example
* cy.uiVerifyAtMentionInSuggestionList(user, true, 'Channel Members');
*/
uiVerifyAtMentionInSuggestionList(user: UserProfile, isSelected: boolean, sectionDividerName?: string): Chainable;
/**
* Verify user's at-mention suggestion
* @param {UserProfile} user - user object
* @param {boolean} isSelected - check if user is selected with false as default
*
* @example
* cy.uiVerifyAtMentionSuggestion(user, true);
*/
uiVerifyAtMentionSuggestion(user: UserProfile, isSelected?: boolean): Chainable;
}
}

Просмотреть файл

@@ -1,36 +0,0 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
Cypress.Commands.add('uiVerifyAtMentionInSuggestionList', (user, isSelected = false, sectionDividerName = null) => {
// * Verify that the suggestion list is open and visible
return cy.get('#suggestionList').should('be.visible').within(() => {
if (sectionDividerName) {
// * Verify the section name is as expected
cy.get('.suggestion-list__divider').findByText(sectionDividerName).should('be.visible');
cy.get('.suggestion-list__divider').next().findByTestId(`mentionSuggestion_${user.username}`).should('be.visible');
}
// * Verify that the user is selected
return cy.uiVerifyAtMentionSuggestion(user, isSelected);
});
});
Cypress.Commands.add('uiVerifyAtMentionSuggestion', (user, isSelected = false) => {
const {
username,
first_name: firstName,
last_name: lastName,
nickname,
} = user;
// * Verify that the user is selected
cy.findByTestId(`mentionSuggestion_${username}`).as('selectedMentionSuggestion').should('be.visible');
if (isSelected) {
cy.get('@selectedMentionSuggestion').should('have.class', 'suggestion--selected');
}
cy.get('@selectedMentionSuggestion').findByText(`@${username}`).should('be.visible');
cy.get('@selectedMentionSuggestion').findByText(`${firstName} ${lastName} (${nickname})`).should('be.visible');
return cy.findByTestId(`mentionSuggestion_${username}`);
});

Просмотреть файл

@@ -0,0 +1,69 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {SimpleUser} from 'tests/integration/channels/autocomplete/helpers';
import {ChainableT} from 'tests/types';
/**
* Verify user's at-mention in the suggestion list
* @param {SimpleUser} user - user object
* @param {boolean} isSelected - check if user is selected with false as default
* @param {string} sectionDividerName - name of the section in suggestion list, ex. "Channel Members"
*
* @example
* cy.uiVerifyAtMentionInSuggestionList(user, true, 'Channel Members');
*/
function uiVerifyAtMentionInSuggestionList(user: SimpleUser, isSelected = false, sectionDividerName: string = null): ChainableT {
// * Verify that the suggestion list is open and visible
return cy.get('#suggestionList').should('be.visible').within(() => {
if (sectionDividerName) {
// * Verify the section name is as expected
cy.get('.suggestion-list__divider').findByText(sectionDividerName).should('be.visible');
cy.get('.suggestion-list__divider').next().findByTestId(`mentionSuggestion_${user.username}`).should('be.visible');
}
// * Verify that the user is selected
return cy.uiVerifyAtMentionSuggestion(user, isSelected);
});
}
Cypress.Commands.add('uiVerifyAtMentionInSuggestionList', uiVerifyAtMentionInSuggestionList);
/**
* Verify user's at-mention suggestion
* @param {SimpleUser} user - user object
* @param {boolean} isSelected - check if user is selected with false as default
*
* @example
* cy.uiVerifyAtMentionSuggestion(user, true);
*/
function uiVerifyAtMentionSuggestion(user: SimpleUser, isSelected = false): ChainableT {
const {
username,
first_name: firstName,
last_name: lastName,
nickname,
} = user;
// * Verify that the user is selected
cy.findByTestId(`mentionSuggestion_${username}`).as('selectedMentionSuggestion').should('be.visible');
if (isSelected) {
cy.get('@selectedMentionSuggestion').should('have.class', 'suggestion--selected');
}
cy.get('@selectedMentionSuggestion').findByText(`@${username}`).should('be.visible');
cy.get('@selectedMentionSuggestion').findByText(`${firstName} ${lastName} (${nickname})`).should('be.visible');
return cy.findByTestId(`mentionSuggestion_${username}`);
}
Cypress.Commands.add('uiVerifyAtMentionSuggestion', uiVerifyAtMentionSuggestion);
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cypress {
interface Chainable {
uiVerifyAtMentionInSuggestionList: typeof uiVerifyAtMentionInSuggestionList;
uiVerifyAtMentionSuggestion: typeof uiVerifyAtMentionSuggestion;
}
}
}