Files
upstream-mattermost/e2e-tests/cypress/tests/integration/channels/accessibility/accessibility_dropdowns_spec.js
upstream-mirror 240db4e2a7
Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
snapshot of https://github.com/mattermost/mattermost.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 00:29:55 +05:00

190 lines
6.6 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
// ***************************************************************
// - [#] indicates a test step (e.g. # Go to a page)
// - [*] indicates an assertion (e.g. * Check the title)
// - Use element ID when selecting an element. Create one if none.
// ***************************************************************
// Group: @channels @accessibility
describe('Verify Accessibility Support in Dropdown Menus', () => {
let offTopicUrl;
before(() => {
cy.apiCreateCustomAdmin().then(({sysadmin}) => {
cy.apiLogin(sysadmin);
cy.apiInitSetup().then(({offTopicUrl: url}) => {
offTopicUrl = url;
});
cy.apiCreateTeam('other-team', 'Other Team');
});
});
beforeEach(() => {
// Visit the Off Topic channel
cy.visit(offTopicUrl);
cy.postMessage('hello');
});
it('MM-T1464 Accessibility Support in Channel Menu Dropdown', () => {
// # Press tab from the Channel Favorite button
cy.uiGetChannelFavoriteButton().
focus().
tab({shift: true}).
tab().
tab({shift: true});
// * Verify the aria-label in channel menu button
cy.uiGetChannelHeaderButton().
findByLabelText('channel menu').
should('be.focused').click();
// * Verify the accessibility support in the Channel Dropdown menu
cy.uiGetChannelMenu().
parent().
should('have.attr', 'aria-label', 'channel menu').
and('have.attr', 'role', 'menu');
// * Verify the first option is not selected by default
cy.uiGetChannelMenu().children().eq(0).should('not.be.focused');
// # Press tab
cy.focused().tab();
// * Verify the accessibility support in the Channel Dropdown menu items
const menuItems = [
'View Info',
'Move to...',
'Notification Preferences',
'Mute Channel',
'Add Members',
'Manage Members',
'Edit Channel Header',
'Edit Channel Purpose',
'Rename Channel',
'Convert to Private Channel',
'Archive Channel',
'Leave Channel',
];
menuItems.forEach((item) => {
// * Verify that the menu item is focused
cy.uiGetChannelMenu().findByText(item).parent().should('be.focused');
// # Press tab for next item
cy.focused().tab();
});
// * Verify if menu is closed when we press Escape
cy.get('body').typeWithForce('{esc}');
cy.uiGetChannelMenu({exist: false});
});
it('MM-T1476 Accessibility Support in Team Menu Dropdown', () => {
// # Open team menu
cy.uiGetLHSHeader().click();
// * Verify the accessibility support in the Main Menu Dropdown
cy.findByRole('menu').
should('exist').
and('have.attr', 'aria-label', 'team menu').
and('have.class', 'a11y__popup');
// * Verify the first option is not selected by default
cy.uiGetLHSTeamMenu().find('.MenuItem').
children().eq(0).
should('not.be.focused').
focus();
// * Verify the accessibility support in the Main Menu Dropdown items
const menuItems = [
{id: 'invitePeople', label: 'Invite People dialog'},
{id: 'teamSettings', label: 'Team Settings dialog'},
{id: 'manageMembers', label: 'Manage Members dialog'},
{id: 'joinTeam', text: 'Join another team'},
{id: 'leaveTeam', label: 'Leave Team dialog'},
{id: 'createTeam', text: 'Create a team'},
];
menuItems.forEach((item) => {
// * Verify that the menu item is focused
if (item.label) {
cy.focused().should('have.attr', 'aria-label', item.label);
} else {
cy.focused().should('have.text', item.text);
}
// # Press tab for next item
cy.focused().tab();
});
cy.uiGetLHSTeamMenu().find('.MenuItem').each((el) => {
cy.wrap(el).should('have.attr', 'role', 'menuitem');
});
// * Verify if menu is closed when we press Escape
cy.get('body').typeWithForce('{esc}');
cy.uiGetLHSTeamMenu().should('not.exist');
});
it('MM-T1477 Accessibility Support in Status Dropdown - KNOWN ISSUE: MM-45716', () => {
// # Focus to set status button
cy.uiGetSetStatusButton().focus().tab({shift: true}).tab();
// * Verify the aria-label in status menu button
cy.uiGetSetStatusButton().
should('be.focused').
click();
// * Verify the accessibility support in the Status Dropdown
cy.uiGetStatusMenuContainer().
should('have.attr', 'aria-label', 'set status').
and('have.class', 'a11y__popup').
and('have.attr', 'role', 'menu');
// * Verify the first option is not selected by default
cy.uiGetStatusMenuContainer().find('.dropdown-menu').children().eq(0).should('not.be.focused');
// # Press tab
cy.focused().tab();
// * Verify first focus is on menu header which is the profile image
cy.uiGetStatusMenuContainer().within(() => {
cy.findByAltText('user profile image').should('be.focused');
});
// # Press tab
cy.focused().tab();
// * Verify the accessibility support in the Status Dropdown menu items
const menuItems = [
{id: 'status-menu-custom-status', label: 'Set a Custom Status dialog'},
{id: 'status-menu-online', label: 'online'},
{id: 'status-menu-away', label: 'away'},
{id: 'status-menu-dnd_menuitem', label: 'do not disturb. disables all notifications'},
{id: 'status-menu-offline', label: 'offline'},
{id: 'accountSettings', label: 'Profile dialog'},
{id: 'logout', label: 'Log Out'},
];
menuItems.forEach((item) => {
// * Verify that the menu item is focused
cy.uiGetStatusMenuContainer().find(`#${item.id}`).
should('be.visible').
findAllByLabelText(item.label).first().
should('be.focused');
// # Press tab for next item
cy.focused().tab();
});
// * Verify if menu is closed when we press Escape
cy.get('body').typeWithForce('{esc}');
cy.uiGetStatusMenuContainer({exist: false});
});
});