Merge branch 'master' of github.com:mattermost/mattermost-server into MM-50966-in-product-expansion
Этот коммит содержится в:
12
.github/PULL_REQUEST_TEMPLATE.md
поставляемый
12
.github/PULL_REQUEST_TEMPLATE.md
поставляемый
@@ -19,6 +19,18 @@ If this pull request addresses a Help Wanted ticket, please link the relevant Gi
|
||||
Otherwise, link the JIRA ticket.
|
||||
-->
|
||||
|
||||
#### Screenshots
|
||||
<!--
|
||||
If the PR includes UI changes, include screenshots/GIFs.
|
||||
|
||||
For an easier comparison of UI changes a table (template below) can be used.
|
||||
|
||||
| before | after |
|
||||
|----|----|
|
||||
| <insert before screenshot here> | <insert after screenshot here> |
|
||||
|
||||
-->
|
||||
|
||||
#### Release Note
|
||||
<!--
|
||||
Add a release note for each of the following conditions:
|
||||
|
||||
124
.github/workflows/artifacts.yml
поставляемый
Обычный файл
124
.github/workflows/artifacts.yml
поставляемый
Обычный файл
@@ -0,0 +1,124 @@
|
||||
name: Artifacts generation and upload
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Mattermost Build"]
|
||||
types:
|
||||
- completed
|
||||
jobs:
|
||||
upload-s3:
|
||||
name: cd/Upload artifacts to S3
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
REPO_NAME: ${{ github.event.repository.name }}
|
||||
if: >
|
||||
github.event.workflow_run.event == 'pull_request' &&
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
steps:
|
||||
- name: cd/Configure AWS
|
||||
uses: aws-actions/configure-aws-credentials@07c2f971bac433df982ccc261983ae443861db49 # v1-node16
|
||||
with:
|
||||
aws-region: us-east-1
|
||||
aws-access-key-id: ${{ secrets.PR_BUILDS_BUCKET_AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.PR_BUILDS_BUCKET_AWS_SECRET_ACCESS_KEY }}
|
||||
- name: cd/Download artifacts
|
||||
uses: dawidd6/action-download-artifact@0c49384d39ceb023b8040f480a25596fd6cf441b # v2.26.0
|
||||
with:
|
||||
workflow: ${{ github.event.workflow_run.workflow_id }}
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
workflow_conclusion: success
|
||||
name: server-dist-artifact
|
||||
path: server/dist
|
||||
# Get Branch name from calling workflow
|
||||
# Search for the string "pull" and replace it with "PR" in branch-name
|
||||
- name: cd/Get branch name
|
||||
run: echo "BRANCH_NAME=$(echo ${{ github.event.workflow_run.head_branch }} | sed 's/^pull\//PR-/g')" >> $GITHUB_ENV
|
||||
- name: cd/Upload artifacts to S3
|
||||
run: |
|
||||
aws s3 cp server/dist/ s3://pr-builds.mattermost.com/$REPO_NAME/$BRANCH_NAME/ --acl public-read --cache-control "no-cache" --recursive --no-progress
|
||||
aws s3 cp server/dist/ s3://pr-builds.mattermost.com/$REPO_NAME/commit/${{ github.sha }}/ --acl public-read --cache-control "no-cache" --recursive --no-progress
|
||||
build-docker:
|
||||
name: cd/Build and push docker image
|
||||
needs: upload-s3
|
||||
env:
|
||||
REPO_NAME: ${{ github.event.repository.name }}
|
||||
runs-on: ubuntu-22.04
|
||||
if: >
|
||||
github.event.workflow_run.event == 'pull_request' &&
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
steps:
|
||||
- name: cd/Login to Docker Hub
|
||||
uses: docker/login-action@3da7dc6e2b31f99ef2cb9fb4c50fb0971e0d0139 # v2.1.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_DEV_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_DEV_TOKEN }}
|
||||
- name: cd/Download artifacts
|
||||
uses: dawidd6/action-download-artifact@0c49384d39ceb023b8040f480a25596fd6cf441b # v2.26.0
|
||||
with:
|
||||
workflow: ${{ github.event.workflow_run.workflow_id }}
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
workflow_conclusion: success
|
||||
name: server-build-artifact
|
||||
path: server/build/
|
||||
- name: cd/Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@11e8a2e2910826a92412015c515187a2d6750279 # v2.4
|
||||
- name: cd/Docker build and push
|
||||
env:
|
||||
DOCKER_CLI_EXPERIMENTAL: enabled
|
||||
run: |
|
||||
export TAG=$(echo "${{ github.event.pull_request.head.sha || github.sha }}" | cut -c1-7)
|
||||
cd server/build
|
||||
export DOCKER_CLI_EXPERIMENTAL=enabled
|
||||
export MM_PACKAGE=https://pr-builds.mattermost.com/$REPO_NAME/commit/${{ github.sha }}/mattermost-team-linux-amd64.tar.gz
|
||||
docker buildx build --push --build-arg MM_PACKAGE=$MM_PACKAGE -t mattermostdevelopment/mm-te-test:${TAG} .
|
||||
# Temporary uploading also to mattermost/mm-te-test:${TAG} except mattermostdevelopment/mm-te-test:${TAG}
|
||||
# Context: https://community.mattermost.com/private-core/pl/3jzzxzfiji8hx833ewyuthzkjh
|
||||
build-docker-temp:
|
||||
name: cd/Build and push docker image
|
||||
needs: upload-s3
|
||||
env:
|
||||
REPO_NAME: ${{ github.event.repository.name }}
|
||||
runs-on: ubuntu-22.04
|
||||
if: >
|
||||
github.event.workflow_run.event == 'pull_request' &&
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
steps:
|
||||
- name: cd/Login to Docker Hub
|
||||
uses: docker/login-action@3da7dc6e2b31f99ef2cb9fb4c50fb0971e0d0139 # v2.1.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: cd/Download artifacts
|
||||
uses: dawidd6/action-download-artifact@0c49384d39ceb023b8040f480a25596fd6cf441b # v2.26.0
|
||||
with:
|
||||
workflow: ${{ github.event.workflow_run.workflow_id }}
|
||||
run_id: ${{ github.event.workflow_run.id }}
|
||||
workflow_conclusion: success
|
||||
name: server-build-artifact
|
||||
path: server/build/
|
||||
- name: cd/Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@11e8a2e2910826a92412015c515187a2d6750279 # v2.4
|
||||
- name: cd/Docker build and push
|
||||
env:
|
||||
DOCKER_CLI_EXPERIMENTAL: enabled
|
||||
run: |
|
||||
export TAG=$(echo "${{ github.event.pull_request.head.sha || github.sha }}" | cut -c1-7)
|
||||
cd server/build
|
||||
export DOCKER_CLI_EXPERIMENTAL=enabled
|
||||
export MM_PACKAGE=https://pr-builds.mattermost.com/$REPO_NAME/commit/${{ github.sha }}/mattermost-team-linux-amd64.tar.gz
|
||||
docker buildx build --push --build-arg MM_PACKAGE=$MM_PACKAGE -t mattermost/mm-te-test:${TAG} .
|
||||
sentry:
|
||||
name: Send build info to sentry
|
||||
if: >
|
||||
github.event.workflow_run.event == 'pull_request' &&
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.MM_SERVER_SENTRY_AUTH_TOKEN }}
|
||||
SENTRY_ORG: ${{ secrets.MM_SERVER_SENTRY_ORG }}
|
||||
SENTRY_PROJECT: ${{ secrets.MM_SERVER_SENTRY_PROJECT }}
|
||||
steps:
|
||||
- name: cd/Checkout mattermost-server
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
||||
- name: cd/Create Sentry release
|
||||
uses: getsentry/action-release@85e0095193a153d57c458995f99d0afd81b9e5ea # v1.3.0
|
||||
|
||||
77
.github/workflows/ci.yml
поставляемый
77
.github/workflows/ci.yml
поставляемый
@@ -1,4 +1,4 @@
|
||||
name: mattermost-build
|
||||
name: Mattermost Build
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
@@ -232,77 +232,4 @@ jobs:
|
||||
with:
|
||||
name: server-build-artifact
|
||||
path: server/build/
|
||||
retention-days: 14
|
||||
upload-s3:
|
||||
name: Upload to S3 bucket
|
||||
runs-on: ubuntu-22.04
|
||||
needs: build-mattermost-server
|
||||
env:
|
||||
REPO_NAME: ${{ github.event.repository.name }}
|
||||
steps:
|
||||
- name: Download dist artifacts
|
||||
uses: actions/download-artifact@e9ef242655d12993efdcda9058dee2db83a2cb9b # v3.0.2
|
||||
with:
|
||||
name: server-dist-artifact
|
||||
path: server/dist/
|
||||
- name: Configure AWS
|
||||
uses: aws-actions/configure-aws-credentials@07c2f971bac433df982ccc261983ae443861db49 # v1-node16
|
||||
with:
|
||||
aws-region: us-east-1
|
||||
aws-access-key-id: ${{ secrets.MM_SERVER_AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.MM_SERVER_AWS_SECRET_ACCESS_KEY }}
|
||||
# We need to sanitize the branch name before using it
|
||||
- name: ci/sanitize-branch-name
|
||||
id: branch
|
||||
uses: transferwise/sanitize-branch-name@b10b4d524ac5a7b645b43a3527db3a6cca017b9d # v1
|
||||
# Search for the string "pull" and replace it with "PR" in branch-name
|
||||
- name: ci/sanitize-branch-name-replace-pull-with-PR-
|
||||
run: echo "BRANCH_NAME=$(echo ${{ steps.branch.outputs.sanitized-branch-name }} | sed 's/^pull\//PR-/g')" >> $GITHUB_ENV
|
||||
- name: ci/artifact-upload
|
||||
run: |
|
||||
aws s3 cp server/dist/ s3://pr-builds.mattermost.com/$REPO_NAME/$BRANCH_NAME/ --acl public-read --cache-control "no-cache" --recursive
|
||||
aws s3 cp server/dist/ s3://pr-builds.mattermost.com/$REPO_NAME/commit/${{ github.sha }}/ --acl public-read --cache-control "no-cache" --recursive
|
||||
build-docker:
|
||||
name: Build docker image
|
||||
runs-on: ubuntu-22.04
|
||||
needs: upload-s3
|
||||
steps:
|
||||
- name: Download build artifacts
|
||||
uses: actions/download-artifact@e9ef242655d12993efdcda9058dee2db83a2cb9b # v3.0.2
|
||||
with:
|
||||
name: server-build-artifact
|
||||
path: server/build/
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@3da7dc6e2b31f99ef2cb9fb4c50fb0971e0d0139 # v2.1.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@11e8a2e2910826a92412015c515187a2d6750279 # v2.4
|
||||
- name: Docker build and push
|
||||
env:
|
||||
DOCKER_CLI_EXPERIMENTAL: enabled
|
||||
run: |
|
||||
export TAG=$(echo "${{ github.event.pull_request.head.sha || github.sha }}" | cut -c1-7)
|
||||
cd server/build
|
||||
export DOCKER_CLI_EXPERIMENTAL=enabled
|
||||
export MM_PACKAGE=https://pr-builds.mattermost.com/mattermost-server/commit/${GITHUB_SHA}/mattermost-team-linux-amd64.tar.gz
|
||||
docker buildx build --push --build-arg MM_PACKAGE=$MM_PACKAGE -t mattermost/mm-te-test:${TAG} .
|
||||
sentry:
|
||||
name: Send build info to sentry
|
||||
runs-on: ubuntu-22.04
|
||||
needs:
|
||||
- test-postgres-binary
|
||||
- test-postgres-normal
|
||||
- test-mysql
|
||||
- build-mattermost-server
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
env:
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.MM_SERVER_SENTRY_AUTH_TOKEN }}
|
||||
SENTRY_ORG: ${{ secrets.MM_SERVER_SENTRY_ORG }}
|
||||
SENTRY_PROJECT: ${{ secrets.MM_SERVER_SENTRY_PROJECT }}
|
||||
steps:
|
||||
- name: Checkout mattermost-server
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
|
||||
- name: Create Sentry release
|
||||
uses: getsentry/action-release@85e0095193a153d57c458995f99d0afd81b9e5ea # v1.3.0
|
||||
retention-days: 14
|
||||
|
||||
@@ -95,7 +95,7 @@ describe('Verify Accessibility Support in different sections in Settings and Pro
|
||||
|
||||
it('MM-T1465_1 Verify Label & Tab behavior in section links', () => {
|
||||
// * Verify aria-label and tab support in section of Account settings modal
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
cy.findByRole('tab', {name: 'profile settings'}).should('be.visible').focus().should('be.focused');
|
||||
['profile settings', 'security'].forEach((text) => {
|
||||
// * Verify aria-label on each tab and it supports navigating to the next tab with arrow keys
|
||||
@@ -114,9 +114,10 @@ describe('Verify Accessibility Support in different sections in Settings and Pro
|
||||
|
||||
it('MM-T1465_2 Verify Accessibility Support in each section in Settings and Profile Dialog', () => {
|
||||
cy.visit(url);
|
||||
cy.postMessage('hello');
|
||||
|
||||
// # Open account settings modal
|
||||
cy.uiOpenProfileModal();
|
||||
// # Open profile settings modal
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// * Verify if the focus goes to the individual fields in Profile section
|
||||
cy.findByRole('tab', {name: 'profile settings'}).click().tab();
|
||||
@@ -149,6 +150,7 @@ describe('Verify Accessibility Support in different sections in Settings and Pro
|
||||
|
||||
it('MM-T1481 Verify Correct Radio button behavior in Settings and Profile', () => {
|
||||
cy.visit(url);
|
||||
cy.postMessage('hello');
|
||||
cy.uiOpenSettingsModal();
|
||||
|
||||
cy.get('#notificationsButton').click();
|
||||
@@ -160,7 +162,8 @@ describe('Verify Accessibility Support in different sections in Settings and Pro
|
||||
|
||||
it('MM-T1482 Input fields in Settings and Profile should read labels', () => {
|
||||
cy.visit(url);
|
||||
cy.uiOpenProfileModal();
|
||||
cy.postMessage('hello');
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
accountSettings.profile.forEach((section) => {
|
||||
if (section.type === 'text') {
|
||||
@@ -178,6 +181,7 @@ describe('Verify Accessibility Support in different sections in Settings and Pro
|
||||
|
||||
it('MM-T1485 Language dropdown should read labels', () => {
|
||||
cy.visit(url);
|
||||
cy.postMessage('hello');
|
||||
cy.uiOpenSettingsModal();
|
||||
|
||||
cy.get('#displayButton').click();
|
||||
@@ -216,9 +220,10 @@ describe('Verify Accessibility Support in different sections in Settings and Pro
|
||||
|
||||
it('MM-T1488 Profile Picture should read labels', () => {
|
||||
cy.visit(url);
|
||||
cy.postMessage('hello');
|
||||
|
||||
// # Go to Edit Profile picture
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
cy.get('#pictureEdit').click();
|
||||
|
||||
// * Verify image alt in profile image
|
||||
@@ -269,9 +274,10 @@ describe('Verify Accessibility Support in different sections in Settings and Pro
|
||||
|
||||
it('MM-T1496 Security Settings screen should read labels', () => {
|
||||
cy.visit(url);
|
||||
cy.postMessage('hello');
|
||||
|
||||
// # Go to Security Settings
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
cy.get('#securityButton').click();
|
||||
|
||||
// * Check Tab behavior in MFA section
|
||||
|
||||
@@ -21,17 +21,16 @@ describe('Account Settings', () => {
|
||||
offTopic = offTopicUrl;
|
||||
testUser = user;
|
||||
testTeam = team;
|
||||
|
||||
cy.postMessage('hello');
|
||||
});
|
||||
});
|
||||
|
||||
it('MM-T2049 Account Settings link in own popover', () => {
|
||||
// # Click avatar to open profile popover
|
||||
cy.get('div.status-wrapper').should('be.visible').click();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click account settings link
|
||||
cy.get('#accountSettings').should('be.visible').click();
|
||||
|
||||
// # Check if account settings modal is open
|
||||
// # Check if profile settings modal is open
|
||||
cy.get('#accountSettingsModal').should('be.visible');
|
||||
|
||||
cy.uiClose();
|
||||
@@ -62,33 +61,22 @@ describe('Account Settings', () => {
|
||||
|
||||
it('MM-T2074 New email not visible to other users until it has been confirmed', () => {
|
||||
// # Login as admin
|
||||
cy.apiLogout();
|
||||
cy.apiAdminLogin();
|
||||
|
||||
// * Set require email verification to true
|
||||
cy.visit('/admin_console/authentication/email');
|
||||
cy.get('[id="EmailSettings.EnableSignInWithEmailtrue"]').should('be.visible').click();
|
||||
cy.get('#saveSetting').invoke('attr', 'disabled').
|
||||
then((disabled) => {
|
||||
disabled ? '' : cy.uiSave();
|
||||
});
|
||||
cy.visit(offTopic);
|
||||
|
||||
// # Create user
|
||||
cy.apiCreateUser({prefix: 'test'}).then(({user: newUser}) => {
|
||||
// # Add user to team
|
||||
cy.apiAddUserToTeam(testTeam.id, newUser.id).then(() => {
|
||||
// # Create DM channel
|
||||
cy.apiCreateDirectChannel([testUser.id, newUser.id]).then(({channel}) => {
|
||||
// # Login to first user
|
||||
cy.uiLogout();
|
||||
cy.uiLogin(testUser);
|
||||
cy.apiLogin(testUser);
|
||||
cy.visit(offTopic);
|
||||
cy.postMessage('hello');
|
||||
|
||||
// * Update email
|
||||
const oldEMail = testUser.email;
|
||||
const newEMail = 'test@example.com';
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
cy.get('#emailEdit').should('be.visible').click();
|
||||
cy.get('#primaryEmail').should('be.visible').type(newEMail);
|
||||
cy.get('#confirmEmail').should('be.visible').type(newEMail);
|
||||
@@ -99,8 +87,7 @@ describe('Account Settings', () => {
|
||||
cy.postMessageAs({sender: testUser, message: `@${newUser.username}`, channelId: channel.id});
|
||||
|
||||
// # Login to 2nd user
|
||||
cy.uiLogout();
|
||||
cy.uiLogin(newUser);
|
||||
cy.apiLogin(newUser);
|
||||
|
||||
// * Check if email updated
|
||||
cy.visit(`/${testTeam.name}/messages/@${testUser.username}`);
|
||||
|
||||
@@ -16,6 +16,9 @@ describe('Profile > Profile Settings > Position', () => {
|
||||
cy.apiInitSetup({loginAfter: true}).then(({offTopicUrl}) => {
|
||||
// # Visit off-topic channel
|
||||
cy.visit(offTopicUrl);
|
||||
|
||||
// # Post message in the main channel
|
||||
cy.postMessage('hello from master hacker');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -23,20 +26,21 @@ describe('Profile > Profile Settings > Position', () => {
|
||||
const position = 'Master hacker';
|
||||
|
||||
// # Open 'Profile' modal and view the default 'Profile Settings'
|
||||
cy.uiOpenProfileModal().within(() => {
|
||||
cy.uiOpenProfileModal('Profile Settings').within(() => {
|
||||
// # Open 'Position' setting
|
||||
cy.findByRole('heading', {name: 'Position'}).should('be.visible').click();
|
||||
|
||||
// # Enter new 'Position'
|
||||
cy.findByRole('textbox', {name: 'Position'}).should('be.visible').type(position);
|
||||
cy.findByRole('textbox', {name: 'Position'}).
|
||||
should('be.visible').
|
||||
and('be.focused').
|
||||
type(position).
|
||||
should('have.value', position);
|
||||
|
||||
// # Save and close the modal
|
||||
cy.uiSaveAndClose();
|
||||
});
|
||||
|
||||
// # Post message in the main channel
|
||||
cy.postMessage('hello from master hacker');
|
||||
|
||||
// # Click on the profile image
|
||||
cy.get('.profile-icon > img').as('profileIconForPopover').click();
|
||||
|
||||
@@ -48,7 +52,7 @@ describe('Profile > Profile Settings > Position', () => {
|
||||
const longPosition = 'Master Hacker II'.repeat(8);
|
||||
|
||||
// # Open 'Profile' modal and view the default 'Profile Settings'
|
||||
cy.uiOpenProfileModal().within(() => {
|
||||
cy.uiOpenProfileModal('Profile Settings').within(() => {
|
||||
const minPositionHeader = () => cy.findByRole('heading', {name: 'Position'});
|
||||
const maxPositionInput = () => cy.findByRole('textbox', {name: 'Position'});
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ describe('Profile > Profile Settings > Email', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -174,7 +174,7 @@ describe('Profile > Profile Settings > Email', () => {
|
||||
expect(subject).to.equal(`[${siteName}] Your email address has changed`);
|
||||
});
|
||||
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// * Verify new email address
|
||||
cy.get('#emailDesc').should('be.visible').should('have.text', email);
|
||||
|
||||
@@ -23,7 +23,7 @@ describe('Profile > Profile Settings > Full Name', () => {
|
||||
|
||||
it('MM-T2043 Enter first name', () => {
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click "Edit" to the right of "Full Name"
|
||||
cy.get('#nameEdit').should('be.visible').click();
|
||||
@@ -46,7 +46,7 @@ describe('Profile > Profile Settings > Full Name', () => {
|
||||
|
||||
it('MM-T2042 Full Name starting blank stays blank', () => {
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click "Edit" to the right of "Full Name"
|
||||
cy.get('#nameEdit').should('be.visible').click();
|
||||
|
||||
@@ -33,7 +33,7 @@ describe('Profile > Profile Settings> Full Name', () => {
|
||||
|
||||
it('MM-T2046 Full Name - Truncated in popover', () => {
|
||||
// # Go to Profile -> Profile Settings -> Full Name -> Edit
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Open Full Name section
|
||||
cy.get('#nameDesc').click();
|
||||
@@ -50,7 +50,7 @@ describe('Profile > Profile Settings> Full Name', () => {
|
||||
// * Full name field shows first and last name.
|
||||
cy.contains('#nameDesc', `${firstName} ${lastName}`);
|
||||
|
||||
// # Close account settings modal
|
||||
// # Close profile settings modal
|
||||
cy.uiClose();
|
||||
});
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ describe('Account Settings', () => {
|
||||
|
||||
it('MM-T2045 Full Name - Link in help text', () => {
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// * Ensure that the Profile tab is loaded
|
||||
cy.get('#generalSettingsTitle').should('be.visible').should('contain', 'Profile');
|
||||
|
||||
@@ -27,7 +27,7 @@ describe('Settings > Sidebar > General', () => {
|
||||
|
||||
it('MM-T3848 No nickname is present', () => {
|
||||
// # Open 'Profile' modal and view the default 'Profile'
|
||||
cy.uiOpenProfileModal().within(() => {
|
||||
cy.uiOpenProfileModal('Profile Settings').within(() => {
|
||||
// # Open 'Nickname' setting
|
||||
cy.uiGetHeading('Nickname').click();
|
||||
|
||||
@@ -56,7 +56,7 @@ describe('Settings > Sidebar > General', () => {
|
||||
const newNickname = 'victor_nick';
|
||||
|
||||
// # Open 'Profile' modal and view the default 'Profile Settings'
|
||||
cy.uiOpenProfileModal().within(() => {
|
||||
cy.uiOpenProfileModal('Profile Settings').within(() => {
|
||||
// # Open 'Nickname' setting
|
||||
cy.uiGetHeading('Nickname').click();
|
||||
|
||||
@@ -133,7 +133,7 @@ describe('Settings > Sidebar > General', () => {
|
||||
|
||||
it('MM-T2061 Nickname should reset on cancel of edit', () => {
|
||||
// # Open 'Profile' modal and view the default 'Profile Settings'
|
||||
cy.uiOpenProfileModal().within(() => {
|
||||
cy.uiOpenProfileModal('Profile Settings').within(() => {
|
||||
// # Open 'Nickname' setting
|
||||
cy.uiGetHeading('Nickname').click();
|
||||
|
||||
@@ -156,7 +156,7 @@ describe('Settings > Sidebar > General', () => {
|
||||
|
||||
it('MM-T2062 Clear nickname and save', () => {
|
||||
// # Open 'Profile' modal and view the default 'Profile Settings'
|
||||
cy.uiOpenProfileModal().within(() => {
|
||||
cy.uiOpenProfileModal('Profile Settings').within(() => {
|
||||
// # Open 'Nickname' setting
|
||||
cy.uiGetHeading('Nickname').click();
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
import * as TIMEOUTS from '../../../../fixtures/timeouts';
|
||||
|
||||
describe('Account Settings', () => {
|
||||
describe('Profile Settings', () => {
|
||||
beforeEach(() => {
|
||||
cy.apiAdminLogin().apiInitSetup({loginAfter: true}).its('user').as('user');
|
||||
});
|
||||
@@ -21,7 +21,7 @@ describe('Account Settings', () => {
|
||||
getProfilePictureId().as('idOld');
|
||||
|
||||
// # Open Profile > Profile Settings > Profile Picture > Edit
|
||||
cy.uiOpenProfileModal().findByRole('button', {name: /picture edit/i}).click();
|
||||
cy.uiOpenProfileModal('Profile Settings').findByRole('button', {name: /picture edit/i}).click();
|
||||
|
||||
// # Click the X to remove the old profile picture but do not click save
|
||||
cy.findByRole('button', {name: /remove profile picture/i}).click();
|
||||
@@ -74,7 +74,7 @@ function verifyProfilePictureDoesNotUpdateAfterCancel() {
|
||||
});
|
||||
|
||||
// # Open Profile > Profile Settings > Profile Picture > Edit
|
||||
cy.uiOpenProfileModal().findByRole('button', {name: /picture edit/i}).click();
|
||||
cy.uiOpenProfileModal('Profile Settings').findByRole('button', {name: /picture edit/i}).click();
|
||||
|
||||
// # Select a new profile picture
|
||||
cy.findByTestId('uploadPicture').attachFile('png-image-file.png');
|
||||
|
||||
@@ -32,7 +32,7 @@ describe('Profile > Profile Settings > Profile Picture', () => {
|
||||
and('not.include', customImageMatch);
|
||||
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click "Edit" to the right of "Profile Picture"
|
||||
cy.get('#pictureEdit').should('be.visible').click();
|
||||
@@ -51,7 +51,7 @@ describe('Profile > Profile Settings > Profile Picture', () => {
|
||||
and('include', customImageMatch);
|
||||
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click "Edit" to the right of "Profile Picture"
|
||||
cy.get('#pictureEdit').should('be.visible').click();
|
||||
@@ -75,7 +75,7 @@ describe('Profile > Profile Settings > Profile Picture', () => {
|
||||
|
||||
it('MM-T2077 Profile picture: non image file shows error', () => {
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click "Edit" to the right of "Profile Picture"
|
||||
cy.get('#pictureEdit').should('be.visible').click();
|
||||
|
||||
@@ -41,7 +41,7 @@ describe('Settings > Sidebar > General > Edit', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
});
|
||||
|
||||
it('MM-T2050 Username cannot be blank', () => {
|
||||
@@ -101,7 +101,7 @@ describe('Settings > Sidebar > General > Edit', () => {
|
||||
// # Login the temporary user
|
||||
cy.apiLogin(tempUser);
|
||||
cy.visit(offTopicUrl);
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Step 1
|
||||
// # Edit the username field
|
||||
@@ -214,8 +214,8 @@ describe('Settings > Sidebar > General > Edit', () => {
|
||||
cy.apiLogin(testUser);
|
||||
cy.visit(offTopicUrl);
|
||||
|
||||
// # Open account settings modal
|
||||
cy.uiOpenProfileModal();
|
||||
// # Open profile settings modal
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Open Full Name section
|
||||
cy.get('#usernameDesc').click();
|
||||
|
||||
@@ -79,7 +79,7 @@ describe('Authentication', () => {
|
||||
cy.visit('/');
|
||||
|
||||
// # Open Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click "Edit" to the right of "Email"
|
||||
cy.get('#emailEdit').should('be.visible').click();
|
||||
|
||||
@@ -60,8 +60,8 @@ describe('Channels', () => {
|
||||
cy.apiLogin(otherUser);
|
||||
cy.visit(`/${testTeam.name}/channels/town-square`);
|
||||
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
cy.get('#moreChannelsModal').should('be.visible').within(() => {
|
||||
// * Dropdown should be visible, defaulting to "Public Channels"
|
||||
@@ -103,8 +103,8 @@ describe('Channels', () => {
|
||||
cy.findByText('Archive').should('be.visible').click();
|
||||
});
|
||||
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
cy.get('#moreChannelsModal').should('be.visible').within(() => {
|
||||
// # CLick dropdown to open selection
|
||||
@@ -191,8 +191,8 @@ describe('Channels', () => {
|
||||
});
|
||||
});
|
||||
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Dropdown should be visible, defaulting to "Public Channels"
|
||||
cy.get('#channelsMoreDropdown').should('be.visible').within((el) => {
|
||||
@@ -244,8 +244,8 @@ function verifyMoreChannelsModalWithArchivedSelection(isEnabled, testUser, testT
|
||||
}
|
||||
|
||||
function verifyMoreChannelsModal(isEnabled) {
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Verify that the more channels modal is open and with or without option to view archived channels
|
||||
cy.get('#moreChannelsModal').should('be.visible').within(() => {
|
||||
|
||||
@@ -49,8 +49,8 @@ describe('more public channels', () => {
|
||||
// # Go to town square
|
||||
cy.visit(`/${testTeam.name}/channels/town-square`);
|
||||
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Assert that the moreChannelsModel is visible
|
||||
cy.findByRole('dialog', {name: 'More Channels'}).should('be.visible').within(() => {
|
||||
@@ -82,8 +82,8 @@ describe('more public channels', () => {
|
||||
// # Go to town square
|
||||
cy.visit(`/${testTeam.name}/channels/town-square`);
|
||||
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Assert the moreChannelsModel is visible
|
||||
cy.findByRole('dialog', {name: 'More Channels'}).should('be.visible').within(() => {
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
// ***************************************************************
|
||||
|
||||
// Stage: @prod
|
||||
// Group: @channels @channel
|
||||
// Group: @channels @channel_settings
|
||||
// Group: @channels @channel @channel_settings
|
||||
|
||||
import * as TIMEOUTS from '../../../fixtures/timeouts';
|
||||
import {getRandomId} from '../../../utils';
|
||||
@@ -54,7 +53,7 @@ describe('Channel routing', () => {
|
||||
|
||||
it('MM-T884_2 Creating new channel validates against two user IDs being used as channel name', () => {
|
||||
// # click on create public channel
|
||||
cy.uiBrowseOrCreateChannel('Create New Channel').click();
|
||||
cy.uiBrowseOrCreateChannel('Create new channel').click();
|
||||
|
||||
// * Verify that the new channel modal is visible
|
||||
cy.get('#new-channel-modal').should('be.visible').within(() => {
|
||||
@@ -74,7 +73,7 @@ describe('Channel routing', () => {
|
||||
|
||||
it('MM-T884_3 Creating a new channel validates against gm-like names being used as channel name', () => {
|
||||
// # click on create public channel
|
||||
cy.uiBrowseOrCreateChannel('Create New Channel').click();
|
||||
cy.uiBrowseOrCreateChannel('Create new channel').click();
|
||||
|
||||
// * Verify that the new channel modal is visible
|
||||
cy.findByRole('dialog', {name: 'Create a new channel'}).within(() => {
|
||||
|
||||
@@ -143,7 +143,7 @@ function createCategoryFromSidebarMenu() {
|
||||
cy.uiGetLHSAddChannelButton().click();
|
||||
|
||||
// # Click on create category link
|
||||
cy.findByText('Create New Category').should('be.visible').click();
|
||||
cy.findByText('Create new category').should('be.visible').click();
|
||||
|
||||
// # Verify that Create Category modal has shown up.
|
||||
// # Wait for a while until the modal has fully loaded, especially during first-time access.
|
||||
|
||||
@@ -26,7 +26,7 @@ describe('Category sorting', () => {
|
||||
cy.uiGetLHSAddChannelButton().click();
|
||||
|
||||
// # Click on create category link
|
||||
cy.findByText('Create New Category').should('be.visible').click();
|
||||
cy.findByText('Create new category').should('be.visible').click();
|
||||
|
||||
// # Add a name 26 characters in length e.g `abcdefghijklmnopqrstuvwxyz`
|
||||
cy.get('#editCategoryModal').should('be.visible').wait(TIMEOUTS.HALF_SEC).within(() => {
|
||||
|
||||
@@ -23,14 +23,14 @@ describe('Channel sidebar', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('MM-T3161_1 should create a new category from sidebar menu -- KNOWN ISSUE: MM-42576', () => {
|
||||
it('MM-T3161_1 should create a new category from sidebar menu', () => {
|
||||
const categoryName = createCategoryFromSidebarMenu();
|
||||
|
||||
// * Check if the category exists
|
||||
cy.findByLabelText(categoryName).should('be.visible');
|
||||
});
|
||||
|
||||
it('MM-T3161_2 should create a new category from category menu -- KNOWN ISSUE: MM-42576', () => {
|
||||
it('MM-T3161_2 should create a new category from category menu', () => {
|
||||
const categoryName = createCategoryFromSidebarMenu();
|
||||
|
||||
// # Create new category from category menu
|
||||
@@ -43,7 +43,7 @@ describe('Channel sidebar', () => {
|
||||
cy.findByLabelText(newCategoryName).should('be.visible');
|
||||
});
|
||||
|
||||
it('MM-T3161_3 move an existing channel to a new category -- KNOWN ISSUE: MM-42576', () => {
|
||||
it('MM-T3161_3 move an existing channel to a new category', () => {
|
||||
const newCategoryName = `category-${getRandomId()}`;
|
||||
|
||||
// # Move to a new category
|
||||
@@ -53,7 +53,7 @@ describe('Channel sidebar', () => {
|
||||
cy.findByLabelText(newCategoryName).should('be.visible');
|
||||
});
|
||||
|
||||
it('MM-T3163 Rename a category -- KNOWN ISSUE: MM-42576', () => {
|
||||
it('MM-T3163 Rename a category', () => {
|
||||
const categoryName = createCategoryFromSidebarMenu();
|
||||
|
||||
// # Rename category from category menu
|
||||
@@ -71,7 +71,7 @@ describe('Channel sidebar', () => {
|
||||
cy.findByLabelText(renameCategory).should('be.visible');
|
||||
});
|
||||
|
||||
it('MM-T3165 Delete a category -- KNOWN ISSUE: MM-42576', () => {
|
||||
it('MM-T3165 Delete a category', () => {
|
||||
const categoryName = createCategoryFromSidebarMenu();
|
||||
|
||||
// # Delete category from category menu
|
||||
@@ -93,7 +93,7 @@ function createCategoryFromSidebarMenu() {
|
||||
cy.uiGetLHSAddChannelButton().click();
|
||||
|
||||
// # Click on create category link
|
||||
cy.findByText('Create New Category').should('be.visible').click();
|
||||
cy.findByText('Create new category').should('be.visible').click();
|
||||
|
||||
// # Verify that Create Category modal has shown up.
|
||||
// # Wait for a while until the modal has fully loaded, especially during first-time access.
|
||||
|
||||
@@ -64,8 +64,8 @@ describe('Channel sidebar', () => {
|
||||
// # Click the New Channel Dropdown button
|
||||
cy.uiGetLHSAddChannelButton().should('be.visible').click();
|
||||
|
||||
// # Click the Browse Channels dropdown item
|
||||
cy.get('.AddChannelDropdown .MenuItem:contains(Browse Channels) button').should('be.visible').click();
|
||||
// # Click the Browse channels dropdown item
|
||||
cy.get('.AddChannelDropdown .MenuItem:contains(Browse channels) button').should('be.visible').click();
|
||||
|
||||
// * Verify that the more channels modal is visible
|
||||
cy.get('.more-modal').should('be.visible');
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
// Stage: @prod
|
||||
// Group: @channels @collapsed_reply_threads
|
||||
|
||||
import * as TIMEOUTS from '../../../fixtures/timeouts';
|
||||
|
||||
describe('Collapsed Reply Threads', () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
@@ -174,4 +176,45 @@ describe('Collapsed Reply Threads', () => {
|
||||
cy.uiCloseRHS();
|
||||
});
|
||||
});
|
||||
|
||||
it('MM-T5413 should auto-scroll to bottom upon pasting long text in reply', () => {
|
||||
// # Post a root post as current user
|
||||
cy.postMessageAs({
|
||||
sender: testUser,
|
||||
message: 'Another interesting post,',
|
||||
channelId: testChannel.id,
|
||||
}).then(({id: rootId}) => {
|
||||
// # Post multiple replies as other user so that the new messages line is pushed up
|
||||
Cypress._.times(20, (i) => {
|
||||
cy.postMessageAs({
|
||||
sender: otherUser,
|
||||
message: 'Reply ' + i,
|
||||
channelId: testChannel.id,
|
||||
rootId,
|
||||
});
|
||||
});
|
||||
|
||||
// # Click root post
|
||||
cy.get(`#post_${rootId}`).click();
|
||||
|
||||
// # Wait for RHS to open and scroll to position
|
||||
cy.wait(TIMEOUTS.ONE_SEC);
|
||||
|
||||
// * RHS should open and the editor's actions should not be visible.
|
||||
cy.get('#rhsContainer').findByTestId('SendMessageButton').should('not.be.visible');
|
||||
|
||||
// # Close RHS
|
||||
cy.uiCloseRHS();
|
||||
|
||||
// # Click root post
|
||||
cy.get(`#post_${rootId}`).click();
|
||||
|
||||
// # Paste a multiline string in the RHS textbox.
|
||||
const text = 'word '.repeat(2000);
|
||||
cy.get('#rhsContainer').findByTestId('reply_textbox').clear().invoke('val', text).trigger('input');
|
||||
|
||||
// * RHS should open and the editor should be visible and focused
|
||||
cy.get('#rhsContainer').findByTestId('SendMessageButton').should('be.visible');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -101,7 +101,7 @@ describe('Verify Accessibility Support in Modals & Dialogs', () => {
|
||||
cy.reload();
|
||||
|
||||
// * Verify the aria-label in more public channels button
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Verify the accessibility support in More Channels Dialog
|
||||
cy.findByRole('dialog', {name: 'More Channels'}).within(() => {
|
||||
|
||||
@@ -230,7 +230,7 @@ context('ldap', () => {
|
||||
|
||||
// # Go to team page to look for this channel in public channel directory
|
||||
cy.visit(`/${testTeam.name}`);
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Search private channel name and make sure it isn't there in public channel directory
|
||||
cy.get('#searchChannelsTextbox').type(testChannel.display_name);
|
||||
@@ -451,8 +451,8 @@ context('ldap', () => {
|
||||
// # Visit off-topic channel
|
||||
cy.visit(`/${testTeam.name}/channels/off-topic`);
|
||||
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Search public channel and ensure it appears in the list
|
||||
cy.get('#searchChannelsTextbox').type(publicChannel.display_name);
|
||||
@@ -468,8 +468,8 @@ context('ldap', () => {
|
||||
// # Visit off-topic channel
|
||||
cy.visit(`/${testTeam.name}/channels/off-topic`);
|
||||
|
||||
// # Go to LHS and click 'Browse Channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse Channels').click();
|
||||
// # Go to LHS and click 'Browse channels'
|
||||
cy.uiBrowseOrCreateChannel('Browse channels').click();
|
||||
|
||||
// * Search private channel name and make sure it isn't there in public channel directory
|
||||
cy.get('#searchChannelsTextbox').type(publicChannel.display_name);
|
||||
|
||||
@@ -292,7 +292,7 @@ describe('Integrations page', () => {
|
||||
// * The app should no longer exist
|
||||
cy.get(`[data-app="${oauthClientID}"]`).should('not.exist');
|
||||
|
||||
// # Close the account settings modal
|
||||
// # Close the profile settings modal
|
||||
cy.get('#accountSettingsHeader').within(() => {
|
||||
cy.get('button.close').click();
|
||||
});
|
||||
|
||||
@@ -148,7 +148,7 @@ describe('Team Permissions', () => {
|
||||
cy.visit(`/${testTeam.name}/channels/town-square`);
|
||||
|
||||
// # Click on create new channel at LHS
|
||||
cy.uiBrowseOrCreateChannel('Create New Channel').click();
|
||||
cy.uiBrowseOrCreateChannel('Create new channel').click();
|
||||
|
||||
// * Verify that the create private channel is disabled
|
||||
cy.findByRole('dialog', {name: 'Create a new channel'}).find('#public-private-selector-button-P').should('have.class', 'disabled');
|
||||
|
||||
@@ -105,7 +105,7 @@ function verifyCreatePublicChannel(teamName, testUsers) {
|
||||
cy.visit(`/${teamName}/channels/town-square`);
|
||||
|
||||
// # Click on create new channel at LHS
|
||||
cy.uiBrowseOrCreateChannel('Create New Channel').click();
|
||||
cy.uiBrowseOrCreateChannel('Create new channel').click();
|
||||
|
||||
cy.findByRole('dialog', {name: 'Create a new channel'}).within(() => {
|
||||
// * Verify if creating a public channel is disabled or not
|
||||
|
||||
@@ -176,7 +176,7 @@ describe('Integrations', () => {
|
||||
// # Post "/marketplace" as SystemAdmin
|
||||
cy.postMessage('/marketplace ');
|
||||
|
||||
cy.get('#modal_marketplace').should('be.visible');
|
||||
cy.findByRole('heading', {name: 'App Marketplace'}).should('be.visible');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -21,7 +21,7 @@ describe('Keyboard Shortcuts', () => {
|
||||
// # Type CTRL/CMD+SHIFT+A to open 'Settings'
|
||||
cy.uiGetPostTextBox().cmdOrCtrlShortcut('{shift}A');
|
||||
|
||||
// * Ensure account settings modal is open
|
||||
// * Ensure profile settings modal is open
|
||||
cy.get('#accountSettingsModal').should('be.visible');
|
||||
|
||||
cy.uiClose();
|
||||
|
||||
@@ -111,7 +111,7 @@ describe('Keyboard shortcut CTRL/CMD+Shift+\\ for adding reaction to last messag
|
||||
cy.uiOpenTeamMenu('View Members');
|
||||
verifyEmojiPickerNotOpen();
|
||||
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
verifyEmojiPickerNotOpen();
|
||||
|
||||
['Edit Channel Header', 'Rename Channel'].forEach((modal) => {
|
||||
|
||||
@@ -25,7 +25,7 @@ describe('Main menu', () => {
|
||||
cy.apiLogin(testUser);
|
||||
cy.visit(`/${testTeam.name}/channels/town-square`);
|
||||
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
cy.findByRole('set status').should('not.exist');
|
||||
});
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ describe('Messaging', () => {
|
||||
// # Create a post and hover over post menu and verify One click reactions are not part of the post menu on hover
|
||||
cy.visit(offTopicPath);
|
||||
|
||||
// # Toggle One-click reactions option in Account Settings>Display>One-click reactions on messages to ON
|
||||
// # Toggle One-click reactions option in Settings > Display> One-click reactions on messages to ON
|
||||
cy.uiOpenSettingsModal('Display').within(() => {
|
||||
cy.findByText('Display', {timeout: timeouts.ONE_MIN}).click();
|
||||
cy.findByText('Quick reactions on messages').click();
|
||||
@@ -158,7 +158,7 @@ describe('Messaging', () => {
|
||||
|
||||
cy.visit(offTopicPath).wait(timeouts.HALF_SEC);
|
||||
|
||||
// # Open Account Settings > Display
|
||||
// # Open Settings > Display
|
||||
// * Verify One-click reactions on messages option is not available
|
||||
cy.uiOpenSettingsModal('Display').within(() => {
|
||||
cy.findByText('Display', {timeout: timeouts.ONE_MIN}).click();
|
||||
|
||||
@@ -77,7 +77,7 @@ describe('Channel', () => {
|
||||
*/
|
||||
function verifyExistingChannelError(newChannelName, makePrivate = false) {
|
||||
// Click on '+' button for Public or Private Channel
|
||||
cy.uiBrowseOrCreateChannel('Create New Channel').click();
|
||||
cy.uiBrowseOrCreateChannel('Create new channel').click();
|
||||
|
||||
if (makePrivate) {
|
||||
cy.get('#public-private-selector-button-P').click();
|
||||
|
||||
@@ -22,7 +22,7 @@ describe('Profile Settings', () => {
|
||||
});
|
||||
|
||||
it('MM-T2044 Clear fields, values revert', () => {
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Click "Edit" to the right of "Full Name"
|
||||
cy.get('#nameEdit').should('be.visible').click();
|
||||
|
||||
@@ -33,7 +33,7 @@ describe('Settings > Sidebar > General', () => {
|
||||
// # Login as test user, visit off-topic and go to the Profile
|
||||
cy.apiLogin(testUser);
|
||||
cy.visit(offTopicUrl);
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// # Open Full Name section
|
||||
cy.get('#nameDesc').click();
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('admin console', () => {
|
||||
describe('admin console', {testIsolation: true}, () => {
|
||||
let testUser;
|
||||
let testTeam;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('api > runs', () => {
|
||||
describe('api > runs', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import {onlyOn} from '@cypress/skip-test';
|
||||
|
||||
describe('channels > App Bar', () => {
|
||||
describe('channels > App Bar', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > broadcast', () => {
|
||||
describe('channels > broadcast', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testAdmin;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import {onlyOn} from '@cypress/skip-test';
|
||||
|
||||
describe('channels > channel header', () => {
|
||||
describe('channels > channel header', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
// Group: @playbooks
|
||||
import * as TIMEOUTS from '../../../fixtures/timeouts';
|
||||
|
||||
describe('channels > general actions', () => {
|
||||
describe('channels > general actions', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testSysadmin;
|
||||
let testUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > actions', () => {
|
||||
describe('channels > actions', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testSysadmin;
|
||||
let testUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > post type components', () => {
|
||||
describe('channels > post type components', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testChannel;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > retrospective', () => {
|
||||
describe('runs > retrospective', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybookWithMetrics;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > rhs > header', () => {
|
||||
describe('channels > rhs > header', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import {HALF_SEC, ONE_SEC} from '../../../../fixtures/timeouts';
|
||||
|
||||
describe('channels > rhs > checklist', () => {
|
||||
describe('channels > rhs > checklist', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
@@ -164,7 +164,7 @@ describe('channels > rhs > checklist', () => {
|
||||
});
|
||||
|
||||
// * Verify the expected error message.
|
||||
cy.verifyEphemeralMessage('Failed to execute slash command /invalid');
|
||||
cy.verifyEphemeralMessage('Failed to find slash command /invalid');
|
||||
});
|
||||
|
||||
it('successfully runs a valid slash command', () => {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > rhs > header', () => {
|
||||
describe('channels > rhs > header', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > rhs > home', () => {
|
||||
describe('channels > rhs > home', {testIsolation: true}, () => {
|
||||
let testSysadmin;
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > rhs > runlist', () => {
|
||||
describe('channels > rhs > runlist', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels rhs > start a run', () => {
|
||||
describe('channels rhs > start a run', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testChannel;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
import * as TIMEOUTS from '../../../../fixtures/timeouts';
|
||||
|
||||
describe('channels > rhs > status update', () => {
|
||||
describe('channels > rhs > status update', {testIsolation: true}, () => {
|
||||
const defaultReminderMessage = '# Default reminder message';
|
||||
let testTeam;
|
||||
let testChannel;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > rhs > template', () => {
|
||||
describe('channels > rhs > template', {testIsolation: true}, () => {
|
||||
let team1;
|
||||
let testUser;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > rhs > title', () => {
|
||||
describe('channels > rhs > title', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import * as TIMEOUTS from '../../../fixtures/timeouts';
|
||||
|
||||
describe('channels > rhs', () => {
|
||||
describe('channels > rhs', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > run dialog', () => {
|
||||
describe('channels > run dialog', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > run', () => {
|
||||
describe('channels > run', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPrivateChannel;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import {switchToChannel} from '../../../channels/mark_as_unread/helpers';
|
||||
|
||||
describe('channels > slash command > owner', () => {
|
||||
describe('channels > slash command > owner', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testUser2;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > slash command > info', () => {
|
||||
describe('channels > slash command > info', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testUser2;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > slash command > owner', () => {
|
||||
describe('channels > slash command > owner', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testUser2;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > slash command > test', () => {
|
||||
describe('channels > slash command > test', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testUser2;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('channels > slash command > todo', () => {
|
||||
describe('channels > slash command > todo', {testIsolation: true}, () => {
|
||||
let team1;
|
||||
let team2;
|
||||
let testUser;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import * as TIMEOUTS from '../../../fixtures/timeouts';
|
||||
|
||||
describe('channels > update request post', () => {
|
||||
describe('channels > update request post', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testParticipant;
|
||||
let testChannelMemberOnly;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('digest messages', () => {
|
||||
describe('digest messages', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
import {HALF_SEC} from '../../fixtures/timeouts';
|
||||
import {stubClipboard} from '../../utils';
|
||||
|
||||
describe('lhs', () => {
|
||||
describe('lhs', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPublicPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('navigation', () => {
|
||||
describe('navigation', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('playbooks > edit', () => {
|
||||
describe('playbooks > edit', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testUser2;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('playbooks > creation button', () => {
|
||||
describe('playbooks > creation button', {testIsolation: true}, () => {
|
||||
let testSysadmin;
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
//
|
||||
import * as TIMEOUTS from '../../../../fixtures/timeouts';
|
||||
|
||||
describe('playbooks > edit > task actions', () => {
|
||||
describe('playbooks > edit > task actions', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testUser2;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
/* eslint-disable no-only-tests/no-only-tests */
|
||||
|
||||
describe('playbooks > edit_metrics', () => {
|
||||
describe('playbooks > edit_metrics', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
import * as TIMEOUTS from '../../../fixtures/timeouts';
|
||||
|
||||
describe('playbooks > edit', () => {
|
||||
describe('playbooks > edit', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testSysadmin;
|
||||
let testUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('playbooks > feedback', () => {
|
||||
describe('playbooks > feedback', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('playbooks > list', () => {
|
||||
describe('playbooks > list', {testIsolation: true}, () => {
|
||||
const playbookTitle = 'The Playbook Name';
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import {stubClipboard} from '../../../utils';
|
||||
|
||||
describe('playbooks > overview', () => {
|
||||
describe('playbooks > overview', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testOtherTeam;
|
||||
let testUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('playbooks > list pagination', () => {
|
||||
describe('playbooks > list pagination', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
const ExtraPlaybooks = 20;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
const RUN_NAME_MAX_LENGTH = 64;
|
||||
|
||||
describe('playbooks > start a run', () => {
|
||||
describe('playbooks > start a run', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('playbooks > edit status update', () => {
|
||||
describe('playbooks > edit status update', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPlaybook;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > list', () => {
|
||||
describe('runs > list', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testAnotherUser;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
import {getRandomId} from '../../../utils';
|
||||
|
||||
describe('runs > permissions', () => {
|
||||
describe('runs > permissions', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testOtherTeam;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page', () => {
|
||||
describe('runs > run details page', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testPublicPlaybook;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
// Note that this test checks the basic behavior in Run details page as participant / viewer
|
||||
// It relies on the Channel RHS Checklist test to cover the full behavior of the checklists
|
||||
|
||||
describe('runs > run details page > checklist', () => {
|
||||
describe('runs > run details page > checklist', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page > finish', () => {
|
||||
describe('runs > run details page > finish', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
import {stubClipboard} from '../../../utils';
|
||||
|
||||
describe('runs > run details page > header', () => {
|
||||
describe('runs > run details page > header', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page > restart run', () => {
|
||||
describe('runs > run details page > restart run', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -62,7 +62,7 @@ const verifyMetricInput = (index, title, target, description, placeholder) => {
|
||||
|
||||
const getRetro = () => cy.findByTestId('run-retrospective-section');
|
||||
|
||||
describe('runs > run details page', () => {
|
||||
describe('runs > run details page', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
/* eslint-disable no-only-tests/no-only-tests */
|
||||
|
||||
describe('runs > run details page > status update', () => {
|
||||
describe('runs > run details page > status update', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page > summary', () => {
|
||||
describe('runs > run details page > summary', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testRun;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
import * as TIMEOUTS from '../../../fixtures/timeouts';
|
||||
|
||||
describe('runs > task actions', () => {
|
||||
describe('runs > task actions', {testIsolation: true}, () => {
|
||||
let testPlaybook;
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page > rhs > participants', () => {
|
||||
describe('runs > run details page > rhs > participants', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testUser2;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page > run info', () => {
|
||||
describe('runs > run details page > run info', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page > RHS', () => {
|
||||
describe('runs > run details page > RHS', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('runs > run details page > status update', () => {
|
||||
describe('runs > run details page > status update', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testViewerUser;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('Task Inbox >', () => {
|
||||
describe('Task Inbox >', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// Stage: @prod
|
||||
// Group: @playbooks
|
||||
|
||||
describe('playbook tour points', () => {
|
||||
describe('playbook tour points', {testIsolation: true}, () => {
|
||||
let testTeam;
|
||||
let testUser;
|
||||
let testSysadmin;
|
||||
|
||||
10
e2e-tests/cypress/tests/support/ui/account_settings_modal.d.ts
поставляемый
10
e2e-tests/cypress/tests/support/ui/account_settings_modal.d.ts
поставляемый
@@ -18,19 +18,19 @@ declare namespace Cypress {
|
||||
interface Chainable {
|
||||
|
||||
/**
|
||||
* Open the account settings modal
|
||||
* Open the profile settings modal
|
||||
* @param {string} section - such as `'General'`, `'Security'`, `'Notifications'`, `'Display'`, `'Sidebar'` and `'Advanced'`
|
||||
* @return the "#accountSettingsModal"
|
||||
*
|
||||
* @example
|
||||
* cy.uiOpenProfileModal().within(() => {
|
||||
* cy.uiOpenProfileModal('Profile Settings').within(() => {
|
||||
* // Do something here
|
||||
* });
|
||||
*/
|
||||
uiOpenProfileModal(section?: string): Chainable<JQuery<HTMLElement>>;
|
||||
uiOpenProfileModal(section: string): Chainable<JQuery<HTMLElement>>;
|
||||
|
||||
/**
|
||||
* Close the account settings modal given that the modal itself is opened.
|
||||
* Close the profile settings modal given that the modal itself is opened.
|
||||
*
|
||||
* @example
|
||||
* cy.uiCloseAccountSettingsModal();
|
||||
@@ -38,7 +38,7 @@ declare namespace Cypress {
|
||||
uiCloseAccountSettingsModal(): Chainable;
|
||||
|
||||
/**
|
||||
* Navigate to account settings and verify the user's first, last name
|
||||
* Navigate to profile settings and verify the user's first, last name
|
||||
* @param {String} firstname - expected user firstname
|
||||
* @param {String} lastname - expected user lastname
|
||||
*/
|
||||
|
||||
@@ -19,7 +19,7 @@ Cypress.Commands.add('uiOpenProfileModal', (section = '') => {
|
||||
|
||||
Cypress.Commands.add('verifyAccountNameSettings', (firstname, lastname) => {
|
||||
// # Go to Profile
|
||||
cy.uiOpenProfileModal();
|
||||
cy.uiOpenProfileModal('Profile Settings');
|
||||
|
||||
// * Check name value
|
||||
cy.get('#nameDesc').should('have.text', `${firstname} ${lastname}`);
|
||||
|
||||
@@ -11,7 +11,7 @@ Cypress.Commands.add('uiCreateChannel', ({
|
||||
name = '',
|
||||
createBoard = false,
|
||||
}) => {
|
||||
cy.uiBrowseOrCreateChannel('Create New Channel').click();
|
||||
cy.uiBrowseOrCreateChannel('Create new channel').click();
|
||||
|
||||
cy.get('#new-channel-modal').should('be.visible');
|
||||
if (isPrivate) {
|
||||
|
||||
@@ -7,8 +7,8 @@ Cypress.Commands.add('uiCreateSidebarCategory', (categoryName = `category-${getR
|
||||
// # Click the New Category/Channel Dropdown button
|
||||
cy.uiGetLHSAddChannelButton().click();
|
||||
|
||||
// # Click the Create New Category dropdown item
|
||||
cy.get('.AddChannelDropdown').should('be.visible').contains('.MenuItem', 'Create New Category').click();
|
||||
// # Click the Create new category dropdown item
|
||||
cy.get('.AddChannelDropdown').should('be.visible').contains('.MenuItem', 'Create new category').click();
|
||||
|
||||
cy.findByRole('dialog', {name: 'Rename Category'}).should('be.visible').within(() => {
|
||||
// # Fill in the category name and click 'Create'
|
||||
|
||||
@@ -176,7 +176,7 @@ Cypress.Commands.add('updateStatus', (message, reminderQuery) => {
|
||||
|
||||
if (reminderQuery) {
|
||||
cy.get('#reminder_timer_datetime').within(() => {
|
||||
cy.get('input').type(reminderQuery, {delay: TIMEOUTS.TWO_HUNDRED_MILLIS, force: true}).type('{enter}', {force: true});
|
||||
cy.get('input').type(reminderQuery, {delay: TIMEOUTS.TWO_HUNDRED_MILLIS, force: true}).wait(TIMEOUTS.ONE_SEC).type('{enter}');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ declare global {
|
||||
* @param {string} item - dropdown menu. If set, it will do click action.
|
||||
*
|
||||
* @example
|
||||
* cy.uiBrowseOrCreateChannel('Browse Channels');
|
||||
* cy.uiBrowseOrCreateChannel('Browse channels');
|
||||
*/
|
||||
uiBrowseOrCreateChannel(item: string): Chainable;
|
||||
|
||||
|
||||
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Ссылка в новой задаче
Block a user