Files
mattermostest/src/main/views/downloadsDropdownView.test.js
Devin Binnie 9b36c25e4e [MM-52696] Upgrade and clean up Desktop App dev dependencies (#2970)
* Upgrade to ESLint v8

* Upgrade TypeScript, api-types, react-intl

* Remove unnecessary dependencies

* Update to React 17.0.2

* npm audit fixes, remove storybook

* Lock some packages

* Remove nan patch

* Remove some deprecated dependencies

* Fix lint/type/tests

* Merge'd

* Fix bad use of spawn

* Fix notarize

* Fix afterpack, switch to tsc es2020

* Fix api types

* Use @mattermost/eslint-plugin
2024-03-07 15:55:33 -05:00

102 lines
3.8 KiB
JavaScript

// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
'use strict';
import {getDoNotDisturb as getDarwinDoNotDisturb} from 'macos-notification-state';
import {DOWNLOADS_DROPDOWN_FULL_WIDTH, DOWNLOADS_DROPDOWN_HEIGHT, TAB_BAR_HEIGHT} from 'common/utils/constants';
import MainWindow from 'main/windows/mainWindow';
import {DownloadsDropdownView} from './downloadsDropdownView';
jest.mock('main/utils', () => ({
getLocalPreload: (file) => file,
getLocalURLString: (file) => file,
}));
jest.mock('fs', () => ({
existsSync: jest.fn().mockReturnValue(false),
readFileSync: jest.fn().mockImplementation((text) => text),
writeFile: jest.fn(),
}));
jest.mock('macos-notification-state', () => ({
getDoNotDisturb: jest.fn(),
}));
jest.mock('electron', () => {
class NotificationMock {
static isSupported = jest.fn();
static didConstruct = jest.fn();
constructor() {
NotificationMock.didConstruct();
}
on = jest.fn();
show = jest.fn();
click = jest.fn();
close = jest.fn();
}
return {
app: {
getAppPath: () => '',
},
BrowserView: jest.fn().mockImplementation(() => ({
webContents: {
loadURL: jest.fn(),
focus: jest.fn(),
session: {
webRequest: {
onHeadersReceived: jest.fn(),
},
},
},
setBounds: jest.fn(),
})),
ipcMain: {
emit: jest.fn(),
handle: jest.fn(),
on: jest.fn(),
removeHandler: jest.fn(),
removeListener: jest.fn(),
},
Notification: NotificationMock,
};
});
jest.mock('main/downloadsManager', () => ({
getDownloads: jest.fn(),
onOpen: jest.fn(),
onClose: jest.fn(),
}));
jest.mock('main/windows/mainWindow', () => ({
on: jest.fn(),
get: jest.fn(),
getBounds: jest.fn(),
sendToRenderer: jest.fn(),
}));
describe('main/views/DownloadsDropdownView', () => {
beforeEach(() => {
MainWindow.get.mockReturnValue({addBrowserView: jest.fn(), setTopBrowserView: jest.fn()});
getDarwinDoNotDisturb.mockReturnValue(false);
});
describe('getBounds', () => {
it('should be placed far right when window is large enough', () => {
const downloadsDropdownView = new DownloadsDropdownView();
expect(downloadsDropdownView.getBounds(800, DOWNLOADS_DROPDOWN_FULL_WIDTH, DOWNLOADS_DROPDOWN_HEIGHT)).toStrictEqual({x: 800 - DOWNLOADS_DROPDOWN_FULL_WIDTH, y: TAB_BAR_HEIGHT, width: DOWNLOADS_DROPDOWN_FULL_WIDTH, height: DOWNLOADS_DROPDOWN_HEIGHT});
});
it('should be placed left if window is very small', () => {
const downloadsDropdownView = new DownloadsDropdownView();
expect(downloadsDropdownView.getBounds(500, DOWNLOADS_DROPDOWN_FULL_WIDTH, DOWNLOADS_DROPDOWN_HEIGHT)).toStrictEqual({x: 0, y: TAB_BAR_HEIGHT, width: DOWNLOADS_DROPDOWN_FULL_WIDTH, height: DOWNLOADS_DROPDOWN_HEIGHT});
});
});
it('should change the view bounds based on open/closed state', () => {
MainWindow.getBounds.mockReturnValue({width: 800, height: 600, x: 0, y: 0});
const downloadsDropdownView = new DownloadsDropdownView();
downloadsDropdownView.init();
downloadsDropdownView.bounds = {width: 400, height: 300};
downloadsDropdownView.handleOpen();
expect(downloadsDropdownView.view.setBounds).toBeCalledWith(downloadsDropdownView.bounds);
downloadsDropdownView.handleClose();
expect(downloadsDropdownView.view.setBounds).toBeCalledWith({width: 0, height: 0, x: expect.any(Number), y: expect.any(Number)});
});
});