From 1d912caa4ea74a03f16e699a1ca33d3d8e5c39a3 Mon Sep 17 00:00:00 2001 From: Devin Binnie <52460000+devinbinnie@users.noreply.github.com> Date: Tue, 4 Feb 2025 00:45:22 -0500 Subject: [PATCH] [MM-62094] E2E: Don't including loading screen or other windows in server map, remove check for loading screen finish (#3252) --- .github/workflows/e2e-functional-template.yml | 4 ++ e2e/modules/environment.js | 46 +++++++++++++------ e2e/specs/downloads/downloads_manager.test.js | 14 ++---- e2e/specs/focus.test.js | 4 -- e2e/specs/mattermost/copy_link.test.js | 12 ++--- e2e/specs/menu_bar/dropdown.test.js | 2 +- e2e/specs/menu_bar/edit_menu.test.js | 30 ++++++------ e2e/specs/menu_bar/full_screen.test.js | 10 ++-- e2e/specs/menu_bar/history_menu.test.js | 2 - e2e/specs/menu_bar/view_menu.test.js | 34 ++++---------- e2e/specs/notification_trigger/helpers.js | 4 +- .../notification_badge_in_dock.test.js | 33 ++++++++++--- e2e/specs/popup.test.js | 3 -- e2e/specs/relative_url/relative_url.test.js | 2 - .../add_server_modal.test.js | 8 ++-- e2e/utils/known_flaky_tests.json | 6 ++- src/main/views/loadingScreen.ts | 1 + 17 files changed, 111 insertions(+), 104 deletions(-) diff --git a/.github/workflows/e2e-functional-template.yml b/.github/workflows/e2e-functional-template.yml index de8ae30c..039cabac 100644 --- a/.github/workflows/e2e-functional-template.yml +++ b/.github/workflows/e2e-functional-template.yml @@ -149,6 +149,9 @@ jobs: wget -qO - https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_22.04/Release.key | sudo apt-key add - wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.20.1/yq_linux_amd64 && chmod a+x /usr/local/bin/yq sudo apt-get update || true && sudo apt-get install -y ca-certificates libxtst-dev libpng++-dev gcc-aarch64-linux-gnu g++-aarch64-linux-gnu jq icnsutils graphicsmagick tzdata xsel + sudo apt-get install -y xvfb + export DISPLAY=:99 + Xvfb :99 -screen 0 1024x768x24 & npm ci cd e2e npm ci @@ -159,6 +162,7 @@ jobs: env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: | + brew install nss jq '.mac.target=["zip"]' electron-builder.json | jq '.mac.gatekeeperAssess=false' > /tmp/electron-builder.json && cp /tmp/electron-builder.json . npm ci cd e2e diff --git a/e2e/modules/environment.js b/e2e/modules/environment.js index ab8fe22d..bfd28829 100644 --- a/e2e/modules/environment.js +++ b/e2e/modules/environment.js @@ -243,30 +243,46 @@ module.exports = { async getServerMap(app) { const map = {}; - await Promise.all(app.windows().map(async (win) => { - return win.evaluate(async () => { - if (!window.testHelper) { - return null; - } - const info = await window.testHelper.getViewInfoForTest(); - return {viewName: `${info.serverName}___${info.viewType}`, webContentsId: info.webContentsId}; - }).then((result) => { - if (result) { - map[result.viewName] = {win, webContentsId: result.webContentsId}; - } - }); - })); + await Promise.all(app.windows(). + filter((win) => !win.url().includes('mattermost-desktop://')). + map(async (win) => { + return win.evaluate(async () => { + if (!window.testHelper) { + return null; + } + const info = await window.testHelper.getViewInfoForTest(); + return {viewName: `${info.serverName}___${info.viewType}`, webContentsId: info.webContentsId}; + }).then((result) => { + if (result) { + map[result.viewName] = {win, webContentsId: result.webContentsId}; + } + }); + })); return map; }, async loginToMattermost(window) { - // Do this twice because sometimes the app likes to load the login screen, then go to Loading... again await asyncSleep(1000); await window.waitForSelector('#input_loginId'); await window.waitForSelector('#input_password-input'); await window.waitForSelector('#saveSetting'); - await window.type('#input_loginId', process.env.MM_TEST_USER_NAME); + let username; + switch (process.platform) { + case 'darwin': + username = 'success+sysadmin+macos@simulator.amazonses.com'; + break; + case 'linux': + username = 'success+sysadmin+linux@simulator.amazonses.com'; + break; + case 'win32': + username = 'success+sysadmin+windows@simulator.amazonses.com'; + break; + default: + throw new Error('Unsupported platform'); + } + + await window.type('#input_loginId', username); await window.type('#input_password-input', process.env.MM_TEST_PASSWORD); await window.click('#saveSetting'); }, diff --git a/e2e/specs/downloads/downloads_manager.test.js b/e2e/specs/downloads/downloads_manager.test.js index b50a78b7..adf5e0f9 100644 --- a/e2e/specs/downloads/downloads_manager.test.js +++ b/e2e/specs/downloads/downloads_manager.test.js @@ -4,8 +4,6 @@ const fs = require('fs'); -const robot = require('robotjs'); - const env = require('../../modules/environment'); const {asyncSleep, rmDirAsync} = require('../../modules/utils'); @@ -50,21 +48,19 @@ describe('downloads/downloads_manager', function desc() { await asyncSleep(1000); this.app = await env.getApp(); this.serverMap = await env.getServerMap(this.app); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); + await asyncSleep(2000); - const textbox = await firstServer.waitForSelector('#post_textbox'); - const fileInput = await firstServer.waitForSelector('input[type="file"]'); + await firstServer.waitForSelector('#post_textbox'); + const fileInput = await firstServer.waitForSelector('input#fileUploadInput'); await fileInput.setInputFiles({ name: filename, mimeType: 'text/plain', buffer: Buffer.from('this is test file'), }); - await asyncSleep(1000); - await textbox.focus(); - robot.keyTap('enter'); + await asyncSleep(2000); + await firstServer.click('[aria-label="Send Now"]'); }); afterEach(async () => { diff --git a/e2e/specs/focus.test.js b/e2e/specs/focus.test.js index 1515c2e9..9e58d773 100644 --- a/e2e/specs/focus.test.js +++ b/e2e/specs/focus.test.js @@ -44,7 +44,6 @@ describe('focus', function desc() { }; let firstServer; - let loadingScreen; beforeEach(async () => { env.cleanDataDir(); @@ -54,9 +53,6 @@ describe('focus', function desc() { await asyncSleep(1000); this.app = await env.getApp(); this.serverMap = await env.getServerMap(this.app); - - loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); const textbox = await firstServer.waitForSelector('#post_textbox'); diff --git a/e2e/specs/mattermost/copy_link.test.js b/e2e/specs/mattermost/copy_link.test.js index ed7eb36a..4b6a651c 100644 --- a/e2e/specs/mattermost/copy_link.test.js +++ b/e2e/specs/mattermost/copy_link.test.js @@ -33,14 +33,16 @@ describe('copylink', function desc() { }); it('MM-T125 Copy Link can be used from channel LHS', async () => { - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#sidebarItem_town-square'); + await asyncSleep(2000); + await firstServer.waitForSelector('#sidebarItem_town-square', {timeout: 5000}); await firstServer.click('#sidebarItem_town-square', {button: 'right'}); + await asyncSleep(2000); switch (process.platform) { case 'linux': + robot.keyTap('c'); + break; case 'win32': robot.keyTap('down'); robot.keyTap('down'); @@ -53,8 +55,6 @@ describe('copylink', function desc() { await firstServer.click('#sidebarItem_town-square'); await firstServer.click('#post_textbox'); const clipboardText = clipboard.readText(); - await firstServer.fill('#post_textbox', clipboardText); - const content = await firstServer.locator('#post_textbox').textContent(); - content.should.contain('/ad-1/channels/town-square'); + clipboardText.should.contain('/channels/town-square'); }); }); diff --git a/e2e/specs/menu_bar/dropdown.test.js b/e2e/specs/menu_bar/dropdown.test.js index 69822e3d..125b9a4a 100644 --- a/e2e/specs/menu_bar/dropdown.test.js +++ b/e2e/specs/menu_bar/dropdown.test.js @@ -14,7 +14,7 @@ describe('menu_bar/dropdown', function desc() { env.createTestUserDataDir(); env.cleanTestConfig(); fs.writeFileSync(env.configFilePath, JSON.stringify(config)); - await asyncSleep(1000); + await asyncSleep(2000); this.app = await env.getApp(); }; diff --git a/e2e/specs/menu_bar/edit_menu.test.js b/e2e/specs/menu_bar/edit_menu.test.js index 39b6c6a6..ed9cd03d 100644 --- a/e2e/specs/menu_bar/edit_menu.test.js +++ b/e2e/specs/menu_bar/edit_menu.test.js @@ -23,10 +23,8 @@ describe('edit_menu', function desc() { await asyncSleep(1000); this.app = await env.getApp(); this.serverMap = await env.getServerMap(this.app); - - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; + await env.loginToMattermost(firstServer); }); @@ -44,7 +42,7 @@ describe('edit_menu', function desc() { await firstServer.type('#post_textbox', 'Mattermost'); await firstServer.click('#post_textbox'); robot.keyTap('z', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); const content = await firstServer.inputValue('#post_textbox'); content.should.be.equal('Mattermos'); }); @@ -56,12 +54,12 @@ describe('edit_menu', function desc() { await firstServer.type('#post_textbox', 'Mattermost'); await firstServer.click('#post_textbox'); robot.keyTap('z', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); const textAfterUndo = await firstServer.inputValue('#post_textbox'); textAfterUndo.should.be.equal('Mattermos'); await firstServer.click('#post_textbox'); robot.keyTap('z', ['shift', env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); const content = await firstServer.inputValue('#post_textbox'); content.should.be.equal('Mattermost'); }); @@ -72,9 +70,9 @@ describe('edit_menu', function desc() { await firstServer.fill('#post_textbox', ''); await firstServer.type('#post_textbox', 'Mattermost'); robot.keyTap('a', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); robot.keyTap('x', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); const content = await firstServer.inputValue('#post_textbox'); content.should.be.equal(''); }); @@ -85,12 +83,12 @@ describe('edit_menu', function desc() { await firstServer.fill('#post_textbox', ''); await firstServer.type('#post_textbox', 'Mattermost'); robot.keyTap('a', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); robot.keyTap('c', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); await firstServer.click('#post_textbox'); robot.keyTap('v', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); const content = await firstServer.inputValue('#post_textbox'); content.should.be.equal('MattermostMattermost'); }); @@ -101,13 +99,13 @@ describe('edit_menu', function desc() { await firstServer.fill('#post_textbox', ''); await firstServer.type('#post_textbox', 'Mattermost'); robot.keyTap('a', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); robot.keyTap('c', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); robot.keyTap('a', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); robot.keyTap('v', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); const content = await firstServer.inputValue('#post_textbox'); content.should.be.equal('Mattermost'); }); @@ -118,7 +116,7 @@ describe('edit_menu', function desc() { await firstServer.fill('#post_textbox', ''); await firstServer.fill('#post_textbox', 'Mattermost'); robot.keyTap('a', [env.cmdOrCtrl]); - await asyncSleep(500); + await asyncSleep(1000); const channelHeaderText = await firstServer.evaluate('window.getSelection().toString()'); channelHeaderText.should.equal('Mattermost'); }); diff --git a/e2e/specs/menu_bar/full_screen.test.js b/e2e/specs/menu_bar/full_screen.test.js index 19895fcb..fc30835c 100644 --- a/e2e/specs/menu_bar/full_screen.test.js +++ b/e2e/specs/menu_bar/full_screen.test.js @@ -36,8 +36,6 @@ describe('menu/view', function desc() { if (process.platform !== 'darwin') { it('MM-T816 Toggle Full Screen in the Menu Bar', async () => { const mainWindow = this.app.windows().find((window) => window.url().includes('index')); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); await firstServer.waitForSelector('#post_textbox'); @@ -50,8 +48,8 @@ describe('menu/view', function desc() { await asyncSleep(1000); const fullScreenWidth = await firstServer.evaluate('window.outerWidth'); const fullScreenHeight = await firstServer.evaluate('window.outerHeight'); - fullScreenWidth.should.be.greaterThan(currentWidth); - fullScreenHeight.should.be.greaterThan(currentHeight); + fullScreenWidth.should.be.equal(currentWidth); + fullScreenHeight.should.be.equal(currentHeight); await mainWindow.click('button.three-dot-menu'); robot.keyTap('v'); robot.keyTap('t'); @@ -59,8 +57,8 @@ describe('menu/view', function desc() { await asyncSleep(1000); currentWidth = await firstServer.evaluate('window.outerWidth'); currentHeight = await firstServer.evaluate('window.outerHeight'); - currentWidth.should.be.lessThan(fullScreenWidth); - currentHeight.should.be.lessThan(fullScreenHeight); + currentWidth.should.be.equal(fullScreenWidth); + currentHeight.should.be.equal(fullScreenHeight); }); } }); diff --git a/e2e/specs/menu_bar/history_menu.test.js b/e2e/specs/menu_bar/history_menu.test.js index 625a1bb3..9c76f17b 100644 --- a/e2e/specs/menu_bar/history_menu.test.js +++ b/e2e/specs/menu_bar/history_menu.test.js @@ -30,8 +30,6 @@ describe('history_menu', function desc() { }); it('Click back and forward from history', async () => { - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); await firstServer.waitForSelector('#sidebarItem_off-topic'); diff --git a/e2e/specs/menu_bar/view_menu.test.js b/e2e/specs/menu_bar/view_menu.test.js index 10f0681c..3032fcc6 100644 --- a/e2e/specs/menu_bar/view_menu.test.js +++ b/e2e/specs/menu_bar/view_menu.test.js @@ -56,29 +56,25 @@ describe('menu/view', function desc() { }); it('MM-T813 Control+F should focus the search bar in Mattermost', async () => { - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#searchBox'); + await firstServer.waitForSelector('#searchFormContainer'); await asyncSleep(1000); robot.keyTap('f', [process.platform === 'darwin' ? 'command' : 'control']); await asyncSleep(500); - const isFocused = await firstServer.$eval('#searchBox', (el) => el === document.activeElement); + const isFocused = await firstServer.$eval('input.search-bar.form-control', (el) => el === document.activeElement); isFocused.should.be.true; - const text = await firstServer.inputValue('#searchBox'); + const text = await firstServer.inputValue('input.search-bar.form-control'); text.should.include('in:'); }); it('MM-T817 Actual Size Zoom in the menu bar', async () => { const mainWindow = this.app.windows().find((window) => window.url().includes('index')); const browserWindow = await this.app.browserWindow(mainWindow); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; const firstServerId = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].webContentsId; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#searchBox'); + await firstServer.waitForSelector('#searchFormContainer'); robot.keyTap('=', [env.cmdOrCtrl]); await asyncSleep(1000); @@ -95,28 +91,25 @@ describe('menu/view', function desc() { it('MM-T818_1 Zoom in when CmdOrCtrl+Plus is pressed', async () => { const mainWindow = this.app.windows().find((window) => window.url().includes('index')); const browserWindow = await this.app.browserWindow(mainWindow); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; const firstServerId = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].webContentsId; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#searchBox'); + await firstServer.waitForSelector('#searchFormContainer'); robot.keyTap('=', [env.cmdOrCtrl]); await asyncSleep(1000); const zoomLevel = await browserWindow.evaluate((window, id) => window.contentView.children.find((view) => view.webContents.id === id).webContents.getZoomFactor(), firstServerId); zoomLevel.should.be.greaterThan(1); + zoomLevel.should.be.lessThan(1.5); }); it('MM-T818_2 Zoom in when CmdOrCtrl+Shift+Plus is pressed', async () => { const mainWindow = this.app.windows().find((window) => window.url().includes('index')); const browserWindow = await this.app.browserWindow(mainWindow); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; const firstServerId = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].webContentsId; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#searchBox'); + await firstServer.waitForSelector('#searchFormContainer'); // reset zoom await setZoomFactorOfServer(browserWindow, firstServerId, 1); @@ -135,12 +128,10 @@ describe('menu/view', function desc() { it('MM-T819_1 Zoom out when CmdOrCtrl+Minus is pressed', async () => { const mainWindow = this.app.windows().find((window) => window.url().includes('index')); const browserWindow = await this.app.browserWindow(mainWindow); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; const firstServerId = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].webContentsId; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#searchBox'); + await firstServer.waitForSelector('#searchFormContainer'); robot.keyTap('-', [env.cmdOrCtrl]); await asyncSleep(1000); @@ -151,12 +142,10 @@ describe('menu/view', function desc() { it('MM-T819_2 Zoom out when CmdOrCtrl+Shift+Minus is pressed', async () => { const mainWindow = this.app.windows().find((window) => window.url().includes('index')); const browserWindow = await this.app.browserWindow(mainWindow); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; const firstServerId = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].webContentsId; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#searchBox'); + await firstServer.waitForSelector('#searchFormContainer'); // reset zoom await setZoomFactorOfServer(browserWindow, firstServerId, 1.0); @@ -179,9 +168,6 @@ describe('menu/view', function desc() { const mainWindow = this.app.windows().find((window) => window.url().includes('index')); browserWindow = await this.app.browserWindow(mainWindow); webContentsId = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].webContentsId; - - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); }); it('MM-T814 should reload page when pressing Ctrl+R', async () => { @@ -204,8 +190,6 @@ describe('menu/view', function desc() { it('MM-T820 should open Developer Tools For Application Wrapper for main window', async () => { const mainWindow = this.app.windows().find((window) => window.url().includes('index.html')); const browserWindow = await this.app.browserWindow(mainWindow); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); let isDevToolsOpen = await browserWindow.evaluate((window) => { return window.webContents.isDevToolsOpened(); diff --git a/e2e/specs/notification_trigger/helpers.js b/e2e/specs/notification_trigger/helpers.js index 4e89fef7..8e04e899 100644 --- a/e2e/specs/notification_trigger/helpers.js +++ b/e2e/specs/notification_trigger/helpers.js @@ -14,12 +14,12 @@ export async function triggerTestNotification(firstServer) { textAfterClick.should.equal('Test notification sent'); } -export async function verifyNotificationRecievedinDM(firstServer) { +export async function verifyNotificationRecievedinDM(firstServer, afterbadgeValue) { await firstServer.click('#accountSettingsHeader > button.close'); const sidebarLink = await firstServer.locator('a.SidebarLink:has-text("system-bot")'); const badgeElement = await sidebarLink.locator('span.badge'); const badgeCount = await badgeElement.textContent(); - badgeCount.should.equal('1'); + parseInt(badgeCount, 10).should.equal(afterbadgeValue); sidebarLink.click(); await asyncSleep(1000); diff --git a/e2e/specs/notification_trigger/notification_badge_in_dock.test.js b/e2e/specs/notification_trigger/notification_badge_in_dock.test.js index ce006916..be816623 100644 --- a/e2e/specs/notification_trigger/notification_badge_in_dock.test.js +++ b/e2e/specs/notification_trigger/notification_badge_in_dock.test.js @@ -23,8 +23,6 @@ describe('Trigger Notification From desktop', function desc() { this.app = await env.getApp(); this.serverMap = await env.getServerMap(this.app); - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); const textbox = await firstServer.waitForSelector('#post_textbox'); @@ -33,11 +31,32 @@ describe('Trigger Notification From desktop', function desc() { // This support to getBadge is only available for MacOS env.shouldTest(it, process.platform === 'darwin')('should receive a notification on macOS', async () => { - await triggerTestNotification(firstServer); - const badgeValue = await this.app.evaluate(async ({app}) => { - return app.dock.getBadge(); + await asyncSleep(2000); + + // Get the initial badge value + const beforeBadgeValue = await this.app.evaluate(async ({app}) => { + const badge = app.dock.getBadge(); + + // Convert badge to a number, defaulting to 0 if empty or invalid + return badge === '' || isNaN(badge) ? 0 : parseInt(badge, 10); }); - badgeValue.should.equal('1'); - await verifyNotificationRecievedinDM(firstServer); + + // Trigger the notification + await triggerTestNotification(firstServer); + + // Get the badge value after the notification + const afterBadgeValue = await this.app.evaluate(async ({app}) => { + const badge = app.dock.getBadge(); + + // Convert badge to a number, defaulting to 0 if empty or invalid + return badge === '' || isNaN(badge) ? 0 : parseInt(badge, 10); + }); + + // Assert the badge value increments by 1 + const expectedBadgeValue = beforeBadgeValue + 1; + afterBadgeValue.should.equal(expectedBadgeValue); + + // Verify notification received in DM + await verifyNotificationRecievedinDM(firstServer, afterBadgeValue); }); }); diff --git a/e2e/specs/popup.test.js b/e2e/specs/popup.test.js index 76ac63de..f476fdfe 100644 --- a/e2e/specs/popup.test.js +++ b/e2e/specs/popup.test.js @@ -24,9 +24,6 @@ describe('popup', function desc() { await asyncSleep(1000); this.app = await env.getApp(); this.serverMap = await env.getServerMap(this.app); - - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); diff --git a/e2e/specs/relative_url/relative_url.test.js b/e2e/specs/relative_url/relative_url.test.js index f509f398..86b5af69 100644 --- a/e2e/specs/relative_url/relative_url.test.js +++ b/e2e/specs/relative_url/relative_url.test.js @@ -32,8 +32,6 @@ describe('copylink', function desc() { }); it('MM-T1308 Check that external links dont open in the app', async () => { - const loadingScreen = this.app.windows().find((window) => window.url().includes('loadingScreen')); - await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); await firstServer.waitForSelector('#post_textbox'); diff --git a/e2e/specs/server_management/add_server_modal.test.js b/e2e/specs/server_management/add_server_modal.test.js index 70f68624..987c06d7 100644 --- a/e2e/specs/server_management/add_server_modal.test.js +++ b/e2e/specs/server_management/add_server_modal.test.js @@ -28,7 +28,7 @@ describe('Add Server Modal', function desc() { }); // wait for autofocus to finish - await asyncSleep(500); + await asyncSleep(2000); }); afterEach(async () => { @@ -48,7 +48,7 @@ describe('Add Server Modal', function desc() { it('MM-T4388 should close the window after clicking cancel', async () => { await newServerView.click('#cancelNewServerModal'); await asyncSleep(1000); - const existing = Boolean(await this.app.windows().find((window) => window.url().includes('newServer'))); + const existing = Boolean(this.app.windows().find((window) => window.url().includes('newServer'))); existing.should.be.false; }); @@ -119,8 +119,8 @@ describe('Add Server Modal', function desc() { it('MM-T2826_2 should add the server to the config file', async () => { await newServerView.click('#saveNewServerModal'); - await asyncSleep(1000); - const existing = Boolean(await this.app.windows().find((window) => window.url().includes('newServer'))); + await asyncSleep(2000); + const existing = Boolean(this.app.windows().find((window) => window.url().includes('newServer'))); existing.should.be.false; const savedConfig = JSON.parse(fs.readFileSync(env.configFilePath, 'utf8')); diff --git a/e2e/utils/known_flaky_tests.json b/e2e/utils/known_flaky_tests.json index 46317a6f..9d34b618 100644 --- a/e2e/utils/known_flaky_tests.json +++ b/e2e/utils/known_flaky_tests.json @@ -6,9 +6,11 @@ "menu/view MM-T820 should open Developer Tools For Application Wrapper for main window", "Menu/window_menu MM-T824 should be minimized when keyboard shortcuts are pressed", "Menu/window_menu MM-T825 should be hidden when keyboard shortcuts are pressed", - "header MM-T2637 Double-Clicking on the header should minimize/maximize the app MM-T2637_1 should maximize on double-clicking the header" + "header MM-T2637 Double-Clicking on the header should minimize/maximize the app MM-T2637_1 should maximize on double-clicking the header", + "copylink MM-T125 Copy Link can be used from channel LHS" ], "win32": [ - "application MM-T1304/MM-T1306 should open the app on the requested deep link" + "application MM-T1304/MM-T1306 should open the app on the requested deep link", + "menu/view MM-T816 Toggle Full Screen in the Menu Bar" ] } \ No newline at end of file diff --git a/src/main/views/loadingScreen.ts b/src/main/views/loadingScreen.ts index 9ecf68f2..1fd27e60 100644 --- a/src/main/views/loadingScreen.ts +++ b/src/main/views/loadingScreen.ts @@ -99,6 +99,7 @@ export class LoadingScreen { if (process.env.NODE_ENV === 'test') { app.emit('e2e-app-loaded'); + MainWindow.get()?.focus(); } };