[MM-39793][MM-T2633] E2E Test: Use back button to return to the desktop app login - and fixes (#2043)
* [MM-39793][MM-T2633] E2E Test: Use back button to return to the desktop app login - and fixes * Lint and test fixes
This commit is contained in:
@@ -97,4 +97,14 @@ describe('main/utils', () => {
|
||||
expect(Utils.getLocalURLString('index.html', null, true)).toStrictEqual('file:///path/to/app/dist/index.html');
|
||||
});
|
||||
});
|
||||
|
||||
describe('shouldHaveBackBar', () => {
|
||||
it('should have back bar for custom logins', () => {
|
||||
expect(Utils.shouldHaveBackBar('https://server-1.com', 'https://server-1.com/login/sso/saml')).toBe(true);
|
||||
});
|
||||
|
||||
it('should not have back bar for regular login', () => {
|
||||
expect(Utils.shouldHaveBackBar('https://server-1.com', 'https://server-1.com/login')).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -8,7 +8,8 @@ import {app, BrowserWindow} from 'electron';
|
||||
|
||||
import {Args} from 'types/args';
|
||||
|
||||
import {BACK_BAR_HEIGHT, PRODUCTION, TAB_BAR_HEIGHT} from 'common/utils/constants';
|
||||
import {BACK_BAR_HEIGHT, customLoginRegexPaths, PRODUCTION, TAB_BAR_HEIGHT} from 'common/utils/constants';
|
||||
import UrlUtils from 'common/utils/url';
|
||||
import Utils from 'common/utils/util';
|
||||
|
||||
export function shouldBeHiddenOnStartup(parsedArgv: Args) {
|
||||
@@ -37,6 +38,28 @@ export function getAdjustedWindowBoundaries(width: number, height: number, hasBa
|
||||
};
|
||||
}
|
||||
|
||||
export function shouldHaveBackBar(serverUrl: URL | string, inputURL: URL | string) {
|
||||
if (UrlUtils.isUrlType('login', serverUrl, inputURL)) {
|
||||
const serverURL = UrlUtils.parseURL(serverUrl);
|
||||
const subpath = serverURL ? serverURL.pathname : '';
|
||||
const parsedURL = UrlUtils.parseURL(inputURL);
|
||||
if (!parsedURL) {
|
||||
return false;
|
||||
}
|
||||
const urlPath = parsedURL.pathname;
|
||||
const replacement = subpath.endsWith('/') ? '/' : '';
|
||||
const replacedPath = urlPath.replace(subpath, replacement);
|
||||
for (const regexPath of customLoginRegexPaths) {
|
||||
if (replacedPath.match(regexPath)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
return !UrlUtils.isTeamUrl(serverUrl, inputURL) && !UrlUtils.isAdminUrl(serverUrl, inputURL);
|
||||
}
|
||||
|
||||
export function getLocalURLString(urlPath: string, query?: Map<string, string>, isMain?: boolean) {
|
||||
let pathname;
|
||||
const processPath = isMain ? '' : '/renderer';
|
||||
|
@@ -9,6 +9,7 @@ import MessagingTabView from 'common/tabs/MessagingTabView';
|
||||
|
||||
import * as WindowManager from '../windows/windowManager';
|
||||
import * as appState from '../appState';
|
||||
import Utils from '../utils';
|
||||
|
||||
import {MattermostView} from './MattermostView';
|
||||
|
||||
@@ -44,6 +45,7 @@ jest.mock('../utils', () => ({
|
||||
getWindowBoundaries: jest.fn(),
|
||||
getLocalPreload: (file) => file,
|
||||
composeUserAgent: () => 'Mattermost/5.0.0',
|
||||
shouldHaveBackBar: jest.fn(),
|
||||
}));
|
||||
|
||||
const server = new MattermostServer('server_name', 'http://server-1.com');
|
||||
@@ -280,11 +282,13 @@ describe('main/views/MattermostView', () => {
|
||||
});
|
||||
|
||||
it('should hide back button on internal url', () => {
|
||||
Utils.shouldHaveBackBar.mockReturnValue(false);
|
||||
mattermostView.handleDidNavigate(null, 'http://server-1.com/path/to/channels');
|
||||
expect(WindowManager.sendToRenderer).toHaveBeenCalledWith(TOGGLE_BACK_BUTTON, false);
|
||||
});
|
||||
|
||||
it('should show back button on external url', () => {
|
||||
Utils.shouldHaveBackBar.mockReturnValue(true);
|
||||
mattermostView.handleDidNavigate(null, 'http://server-2.com/some/other/path');
|
||||
expect(WindowManager.sendToRenderer).toHaveBeenCalledWith(TOGGLE_BACK_BUTTON, true);
|
||||
});
|
||||
|
@@ -26,7 +26,7 @@ import {TabView} from 'common/tabs/TabView';
|
||||
|
||||
import {ServerInfo} from 'main/server/serverInfo';
|
||||
import ContextMenu from '../contextMenu';
|
||||
import {getWindowBoundaries, getLocalPreload, composeUserAgent} from '../utils';
|
||||
import {getWindowBoundaries, getLocalPreload, composeUserAgent, shouldHaveBackBar} from '../utils';
|
||||
import WindowManager from '../windows/windowManager';
|
||||
import * as appState from '../appState';
|
||||
|
||||
@@ -217,7 +217,7 @@ export class MattermostView extends EventEmitter {
|
||||
this.status = Status.WAITING_MM;
|
||||
this.removeLoading = setTimeout(this.setInitialized, MAX_LOADING_SCREEN_SECONDS, true);
|
||||
this.emit(LOAD_SUCCESS, this.tab.name, loadURL);
|
||||
this.setBounds(getWindowBoundaries(this.window, !(urlUtils.isTeamUrl(this.tab.url || '', this.view.webContents.getURL()) || urlUtils.isAdminUrl(this.tab.url || '', this.view.webContents.getURL()))));
|
||||
this.setBounds(getWindowBoundaries(this.window, shouldHaveBackBar(this.tab.url || '', this.view.webContents.getURL())));
|
||||
};
|
||||
}
|
||||
|
||||
@@ -226,7 +226,7 @@ export class MattermostView extends EventEmitter {
|
||||
const request = typeof requestedVisibility === 'undefined' ? true : requestedVisibility;
|
||||
if (request && !this.isVisible) {
|
||||
this.window.addBrowserView(this.view);
|
||||
this.setBounds(getWindowBoundaries(this.window, !(urlUtils.isTeamUrl(this.tab.url || '', this.view.webContents.getURL()) || urlUtils.isAdminUrl(this.tab.url || '', this.view.webContents.getURL()))));
|
||||
this.setBounds(getWindowBoundaries(this.window, shouldHaveBackBar(this.tab.url || '', this.view.webContents.getURL())));
|
||||
if (this.status === Status.READY) {
|
||||
this.focus();
|
||||
}
|
||||
@@ -341,15 +341,14 @@ export class MattermostView extends EventEmitter {
|
||||
handleDidNavigate = (event: Event, url: string) => {
|
||||
log.debug('MattermostView.handleDidNavigate', {tabName: this.tab.name, url});
|
||||
|
||||
const isUrlTeamUrl = urlUtils.isTeamUrl(this.tab.url || '', url) || urlUtils.isAdminUrl(this.tab.url || '', url);
|
||||
if (isUrlTeamUrl) {
|
||||
this.setBounds(getWindowBoundaries(this.window));
|
||||
WindowManager.sendToRenderer(TOGGLE_BACK_BUTTON, false);
|
||||
log.info('hide back button');
|
||||
} else {
|
||||
if (shouldHaveBackBar(this.tab.url || '', url)) {
|
||||
this.setBounds(getWindowBoundaries(this.window, true));
|
||||
WindowManager.sendToRenderer(TOGGLE_BACK_BUTTON, true);
|
||||
log.info('show back button');
|
||||
} else {
|
||||
this.setBounds(getWindowBoundaries(this.window));
|
||||
WindowManager.sendToRenderer(TOGGLE_BACK_BUTTON, false);
|
||||
log.info('hide back button');
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -53,6 +53,7 @@ jest.mock('common/tabs/TabView', () => ({
|
||||
}));
|
||||
jest.mock('../utils', () => ({
|
||||
getAdjustedWindowBoundaries: jest.fn(),
|
||||
shouldHaveBackBar: jest.fn(),
|
||||
}));
|
||||
jest.mock('../views/viewManager', () => ({
|
||||
ViewManager: jest.fn(),
|
||||
|
@@ -32,7 +32,7 @@ import {SECOND} from 'common/utils/constants';
|
||||
import Config from 'common/config';
|
||||
import {getTabViewName, TAB_MESSAGING} from 'common/tabs/TabView';
|
||||
|
||||
import {getAdjustedWindowBoundaries} from '../utils';
|
||||
import {getAdjustedWindowBoundaries, shouldHaveBackBar} from '../utils';
|
||||
|
||||
import {ViewManager} from '../views/viewManager';
|
||||
import CriticalErrorHandler from '../CriticalErrorHandler';
|
||||
@@ -194,7 +194,7 @@ export class WindowManager {
|
||||
|
||||
const setBoundsFunction = () => {
|
||||
if (currentView) {
|
||||
currentView.setBounds(getAdjustedWindowBoundaries(bounds.width!, bounds.height!, !(urlUtils.isTeamUrl(currentView.tab.url, currentView.view.webContents.getURL()) || urlUtils.isAdminUrl(currentView.tab.url, currentView.view.webContents.getURL()))));
|
||||
currentView.setBounds(getAdjustedWindowBoundaries(bounds.width!, bounds.height!, shouldHaveBackBar(currentView.tab.url, currentView.view.webContents.getURL())));
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user