[MM-51874] Migrate loading screen to singleton (#2655)

* Migrate loadingScreen to singleton

* REVERT ME when MainWindow singleton changes are merged

* Revert "REVERT ME when MainWindow singleton changes are merged"

This reverts commit 2de5520117b9aefb8eeb161d493de7cb275f7a5b.
This commit is contained in:
Devin Binnie
2023-04-04 11:49:40 -04:00
committed by GitHub
parent 22ec280945
commit 39150137b6
10 changed files with 204 additions and 170 deletions

View File

@@ -16,6 +16,7 @@ import MainWindow from 'main/windows/mainWindow';
import {MattermostView} from './MattermostView';
import {ViewManager} from './viewManager';
import LoadingScreen from './loadingScreen';
jest.mock('electron', () => ({
app: {
@@ -57,7 +58,10 @@ jest.mock('main/i18nManager', () => ({
jest.mock('main/server/serverInfo', () => ({
ServerInfo: jest.fn(),
}));
jest.mock('main/views/loadingScreen', () => ({
show: jest.fn(),
fade: jest.fn(),
}));
jest.mock('main/windows/mainWindow', () => ({
get: jest.fn(),
}));
@@ -78,7 +82,6 @@ describe('main/views/viewManager', () => {
const destroyFn = jest.fn();
beforeEach(() => {
viewManager.createLoadingScreen = jest.fn();
viewManager.showByName = jest.fn();
viewManager.getServerView = jest.fn().mockImplementation((srv, tabName) => ({name: `${srv.name}-${tabName}`}));
MattermostView.mockImplementation((tab) => ({
@@ -92,7 +95,6 @@ describe('main/views/viewManager', () => {
afterEach(() => {
jest.resetAllMocks();
viewManager.loadingScreen = undefined;
viewManager.closedViews = new Map();
viewManager.views = new Map();
});
@@ -112,7 +114,6 @@ describe('main/views/viewManager', () => {
it('should add view to views map and add listeners', () => {
viewManager.loadView({name: 'server1'}, {}, {name: 'tab1', isOpen: true}, 'http://server-1.com/subpath');
expect(viewManager.views.has('server1-tab1')).toBe(true);
expect(viewManager.createLoadingScreen).toHaveBeenCalled();
expect(onceFn).toHaveBeenCalledWith(LOAD_SUCCESS, viewManager.activateView);
expect(loadFn).toHaveBeenCalledWith('http://server-1.com/subpath');
});
@@ -218,7 +219,6 @@ describe('main/views/viewManager', () => {
afterEach(() => {
jest.resetAllMocks();
delete viewManager.loadingScreen;
delete viewManager.currentView;
viewManager.closedViews = new Map();
viewManager.views = new Map();
@@ -582,8 +582,6 @@ describe('main/views/viewManager', () => {
beforeEach(() => {
viewManager.getCurrentView = jest.fn();
viewManager.showLoadingScreen = jest.fn();
viewManager.fadeLoadingScreen = jest.fn();
});
afterEach(() => {
@@ -641,7 +639,7 @@ describe('main/views/viewManager', () => {
view.needsLoadingScreen.mockImplementation(() => true);
viewManager.views.set('view1', view);
viewManager.showByName('view1');
expect(viewManager.showLoadingScreen).toHaveBeenCalled();
expect(LoadingScreen.show).toHaveBeenCalled();
});
it('should show the view when not errored', () => {
@@ -655,44 +653,6 @@ describe('main/views/viewManager', () => {
});
});
describe('showLoadingScreen', () => {
const window = {
getBrowserViews: jest.fn(),
setTopBrowserView: jest.fn(),
addBrowserView: jest.fn(),
};
const viewManager = new ViewManager();
const loadingScreen = {webContents: {send: jest.fn(), isLoading: () => false}};
beforeEach(() => {
MainWindow.get.mockReturnValue(window);
viewManager.createLoadingScreen = jest.fn();
viewManager.setLoadingScreenBounds = jest.fn();
window.getBrowserViews.mockImplementation(() => []);
});
afterEach(() => {
jest.resetAllMocks();
delete viewManager.loadingScreen;
});
it('should create new loading screen if one doesnt exist and add it to the window', () => {
viewManager.createLoadingScreen.mockImplementation(() => {
viewManager.loadingScreen = loadingScreen;
});
viewManager.showLoadingScreen();
expect(viewManager.createLoadingScreen).toHaveBeenCalled();
expect(window.addBrowserView).toHaveBeenCalled();
});
it('should set the browser view as top if already exists and needs to be shown', () => {
viewManager.loadingScreen = loadingScreen;
window.getBrowserViews.mockImplementation(() => [loadingScreen]);
viewManager.showLoadingScreen();
expect(window.setTopBrowserView).toHaveBeenCalled();
});
});
describe('getViewByURL', () => {
const viewManager = new ViewManager({});
viewManager.getServers = () => [