Files
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

1022 lines
38 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {expect, test} from '@mattermost/playwright-lib';
/**
* @objective Verify keyboard navigation through interactive elements in Display settings
*/
test(
'navigate on keyboard tab between interactive elements',
{tag: ['@accessibility', '@settings', '@display_settings']},
async ({pw}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
const displaySettings = settingsModal.displaySettings;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible and focus should be on the modal
await expect(settingsModal.container).toBeVisible();
await pw.toBeFocusedWithFocusVisible(settingsModal.container);
// # Press Tab and verify focus is on Close button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(settingsModal.closeButton);
// # Click on Display tab to open it
await settingsModal.displayTab.click();
// * Display Settings panel should be visible
await expect(displaySettings.container).toBeVisible();
// # Press Tab to move focus to first edit button (Theme)
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.themeEditButton);
// # Press Tab to move focus to Clock Display button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.clockDisplayEditButton);
// # Press Tab to move focus to Teammate Name Display button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.teammateNameDisplayEditButton);
// # Press Tab to move focus to Show online availability button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.availabilityStatusOnPostsEditButton);
// # Press Tab to move focus to Share last active time button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.lastActiveTimeEditButton);
// # Press Tab to move focus to Timezone button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.timezoneEditButton);
// # Press Tab to move focus to Website Link Previews button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.showLinkPreviewsEditButton);
// # Press Tab to move focus to Default Appearance of Image Previews button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.collapseImagePreviewsEditButton);
// # Press Tab to move focus to Message Display button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.messageDisplayEditButton);
// # Press Tab to move focus to Click to open threads button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.clickToReplyEditButton);
// # Press Tab to move focus to Channel Display button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.channelDisplayModeEditButton);
// # Press Tab to move focus to Quick reactions button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.oneClickReactionsEditButton);
// # Press Tab to move focus to Render emoticons button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.emojiPickerEditButton);
// # Press Tab to move focus to Language button
await page.keyboard.press('Tab');
await pw.toBeFocusedWithFocusVisible(displaySettings.languageEditButton);
},
);
/**
* @objective Verify Display settings panel passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Display settings panel',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
// * Display Settings panel should be visible
await expect(settingsModal.displaySettings.container).toBeVisible();
// * Verify aria snapshot of Display settings tab
await expect(settingsModal.displaySettings.container).toMatchAriaSnapshot(`
- tabpanel "display":
- heading "Display Settings" [level=3]
- heading "Theme" [level=4]
- button "Theme Edit": Edit
- text: /.+/
- heading "Clock Display" [level=4]
- button "Clock Display Edit": Edit
- text: /.+/
- heading "Teammate Name Display" [level=4]
- button "Teammate Name Display Edit": Edit
- text: /.+/
- heading "Show online availability on profile images" [level=4]
- button "Show online availability on profile images Edit": Edit
- text: /.+/
- heading "Share last active time" [level=4]
- button "Share last active time Edit": Edit
- text: /.+/
- heading "Timezone" [level=4]
- button "Timezone Edit": Edit
- text: /.+/
- heading "Website Link Previews" [level=4]
- button "Website Link Previews Edit": Edit
- text: /.+/
- heading "Default Appearance of Image Previews" [level=4]
- button "Default Appearance of Image Previews Edit": Edit
- text: /.+/
- heading "Message Display" [level=4]
- button "Message Display Edit": Edit
- text: /.+/
- heading "Click to open threads" [level=4]
- button "Click to open threads Edit": Edit
- text: /.+/
- heading "Channel Display" [level=4]
- button "Channel Display Edit": Edit
- text: /.+/
- heading "Quick reactions on messages" [level=4]
- button "Quick reactions on messages Edit": Edit
- text: /.+/
- heading "Render emoticons as emojis" [level=4]
- button "Render emoticons as emojis Edit": Edit
- text: /.+/
- heading "Language" [level=4]
- button "Language Edit": Edit
- text: /.+/
`);
// * Analyze the Display settings panel for accessibility issues
const accessibilityScanResults = await axe
.builder(page, {disableColorContrast: true})
.include(settingsModal.displaySettings.id)
.analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Theme section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Theme section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Theme section
await displaySettings.themeEditButton.click();
// * Verify aria snapshot of Theme section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Theme" [level=4]
- group "Theme":
- text: Theme
- radio "Premade Themes" [checked]
- text: Premade Themes
- radio "Custom Theme"
- text: Custom Theme
- button /.*/
- button /.*/
- button /.*/
- button /.*/
- button /.*/
- link "See other themes"
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe
.builder(page)
.include(displaySettings.expandedSectionId)
.disableRules(['color-contrast'])
.analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Timezone section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Timezone section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Timezone section
await displaySettings.timezoneEditButton.click();
// * Verify aria snapshot of Timezone section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Timezone" [level=4]
- checkbox "Automatic" [checked]
- text: Automatic
- log
- text: /.+ Select the timezone used for timestamps in the user interface and email notifications./
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Language section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Language section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Language section
await displaySettings.languageEditButton.click();
// * Verify aria snapshot of Language section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Language" [level=4]
- text: /.+/
- log
- text: /.+/
- combobox /.+/
- text: Select which language Mattermost displays in the user interface.
- paragraph
- text: /.+/
- link "Mattermost Translation Server"
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe
.builder(page)
.include(displaySettings.expandedSectionId)
.disableRules(['color-contrast', 'link-in-text-block'])
.analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Clock Display section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Clock Display section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Clock Display section
await displaySettings.clockDisplayEditButton.click();
// * Verify aria snapshot of Clock Display section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Clock Display" [level=4]
- group "Clock Display":
- text: Clock Display
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Teammate Name Display section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Teammate Name Display section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Teammate Name Display section
await displaySettings.teammateNameDisplayEditButton.click();
// * Verify aria snapshot of Teammate Name Display section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Teammate Name Display" [level=4]
- group "Teammate Name Display":
- text: Teammate Name Display
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Message Display section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Message Display section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Message Display section
await displaySettings.messageDisplayEditButton.click();
// * Verify aria snapshot of Message Display section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Message Display" [level=4]
- group "Message Display":
- text: Message Display
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Channel Display section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Channel Display section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Channel Display section
await displaySettings.channelDisplayModeEditButton.click();
// * Verify aria snapshot of Channel Display section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Channel Display" [level=4]
- group "Channel Display":
- text: Channel Display
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Show online availability section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Show online availability section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Show online availability section
await displaySettings.availabilityStatusOnPostsEditButton.click();
// * Verify aria snapshot of Show online availability section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Show online availability on profile images" [level=4]
- group "Show online availability on profile images":
- text: Show online availability on profile images
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Share last active time section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Share last active time section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Share last active time section
await displaySettings.lastActiveTimeEditButton.click();
// * Verify aria snapshot of Share last active time section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Share last active time" [level=4]
- group "Share last active time":
- text: Share last active time
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Website Link Previews section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Website Link Previews section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Website Link Previews section
await displaySettings.showLinkPreviewsEditButton.click();
// * Verify aria snapshot of Website Link Previews section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Website Link Previews" [level=4]
- group "Website Link Previews":
- text: Website Link Previews
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Default Appearance of Image Previews section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Default Appearance of Image Previews section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Default Appearance of Image Previews section
await displaySettings.collapseImagePreviewsEditButton.scrollIntoViewIfNeeded();
await displaySettings.collapseImagePreviewsEditButton.click();
// * Verify aria snapshot of Default Appearance of Image Previews section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Default Appearance of Image Previews" [level=4]
- group "Default Appearance of Image Previews":
- text: Default Appearance of Image Previews
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Click to open threads section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Click to open threads section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Click to open threads section
await displaySettings.clickToReplyEditButton.click();
// * Verify aria snapshot of Click to open threads section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Click to open threads" [level=4]
- group "Click to open threads":
- text: Click to open threads
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Quick reactions on messages section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Quick reactions on messages section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Quick reactions on messages section
await displaySettings.oneClickReactionsEditButton.click();
// * Verify aria snapshot of Quick reactions on messages section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Quick reactions on messages" [level=4]
- group "Quick reactions on messages":
- text: Quick reactions on messages
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);
/**
* @objective Verify Render emoticons as emojis section passes accessibility scan and matches aria-snapshot
*/
test(
'accessibility scan and aria-snapshot of Render emoticons as emojis section',
{tag: ['@accessibility', '@settings', '@display_settings', '@snapshots']},
async ({pw, axe}) => {
// # Create and sign in a new user
const {user} = await pw.initSetup();
// # Log in a user in new browser context
const {page, channelsPage} = await pw.testBrowser.login(user);
const globalHeader = channelsPage.globalHeader;
const settingsModal = channelsPage.settingsModal;
// # Visit a default channel page
await channelsPage.goto();
await channelsPage.toBeVisible();
// # Set focus to Settings button and press Enter
await globalHeader.settingsButton.focus();
await page.keyboard.press('Enter');
// * Settings modal should be visible
await expect(settingsModal.container).toBeVisible();
// # Open Display tab
await settingsModal.displayTab.click();
const displaySettings = settingsModal.displaySettings;
// # Click Edit on Render emoticons as emojis section
await displaySettings.emojiPickerEditButton.click();
// * Verify aria snapshot of Render emoticons as emojis section when expanded
await displaySettings.expandedSection.waitFor();
await expect(displaySettings.expandedSection).toMatchAriaSnapshot(`
- heading "Render emoticons as emojis" [level=4]
- group "Render emoticons as emojis":
- text: Render emoticons as emojis
- radio /.+/ [checked]
- text: /.+/
- radio /.+/
- text: /.+/
- separator
- alert
- button "Save"
- button "Cancel"
`);
// # Analyze the expanded section for accessibility issues
const accessibilityScanResults = await axe.builder(page).include(displaySettings.expandedSectionId).analyze();
// * Should have no violation
expect(accessibilityScanResults.violations).toHaveLength(0);
},
);