// Copyright (c) 2015-2016 Yuya Ochiai // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. 'use strict'; const fs = require('fs'); const env = require('../modules/environment'); describe('application', function desc() { this.timeout(30000); beforeEach(() => { env.createTestUserDataDir(); env.cleanTestConfig(); this.app = env.getSpectronApp(); return this.app.start(); }); afterEach(async () => { if (this.app && this.app.isRunning()) { await this.app.stop(); } }); it('should show two windows if there is no config file', async () => { await this.app.client.waitUntilWindowLoaded(); const count = await this.app.client.getWindowCount(); count.should.equal(2); const opened = await this.app.browserWindow.isDevToolsOpened(); opened.should.be.false; const visible = await this.app.browserWindow.isVisible(); visible.should.be.true; }); if (process.platform === 'darwin') { it.skip('should show closed window with cmd+tab', async () => { // Unable to utilize Command key press due to: https://bugs.chromium.org/p/chromedriver/issues/detail?id=3023#c2 await this.app.client.waitUntilWindowLoaded(); await this.app.client.keys(['Meta', 'w']); let visible = await this.app.browserWindow.isVisible(); visible.should.be.false; this.app.client.keys(['Meta', 'Tab']); visible = await this.app.browserWindow.isVisible(); visible.should.be.true; }); } it.skip('should restore window bounds', async () => { // bounds seems to be incorrectly calculated in some environments // - Windows 10: OK // - CircleCI: NG const expectedBounds = {x: 100, y: 200, width: 300, height: 400}; fs.writeFileSync(env.boundsInfoPath, JSON.stringify(expectedBounds)); await this.app.restart(); const bounds = await this.app.browserWindow.getBounds(); bounds.should.deep.equal(expectedBounds); }); it('should NOT restore window bounds if the origin is located on outside of viewarea', async () => { // bounds seems to be incorrectly calculated in some environments (e.g. CircleCI) // - Windows 10: OK // - CircleCI: NG fs.writeFileSync(env.boundsInfoPath, JSON.stringify({x: -100000, y: 200, width: 300, height: 400})); await this.app.restart(); let bounds = await this.app.browserWindow.getBounds(); bounds.x.should.satisfy((x) => (x > -10000)); fs.writeFileSync(env.boundsInfoPath, JSON.stringify({x: 100, y: 200000, width: 300, height: 400})); await this.app.restart(); bounds = await this.app.browserWindow.getBounds(); bounds.y.should.satisfy((y) => (y < 10000)); }); // it('should show settings.html when there is no config file', async () => { // await this.app.client.waitUntilWindowLoaded(); // await this.app.client.pause(1000); // const url = await this.app.client.getUrl(); // url.should.match(/\/settings.html$/); // const existing = await this.app.client.isExisting('#newServerModal'); // existing.should.equal(true); // }); // it('should show index.html when there is config file', async () => { // const config = { // version: 2, // teams: [{ // name: 'example', // url: env.mattermostURL, // order: 0, // }, { // name: 'github', // url: 'https://github.com/', // order: 1, // }], // showTrayIcon: false, // trayIconTheme: 'light', // minimizeToTray: false, // notifications: { // flashWindow: 0, // bounceIcon: false, // bounceIconType: 'informational', // }, // showUnreadBadge: true, // useSpellChecker: true, // enableHardwareAcceleration: true, // autostart: true, // darkMode: false, // }; // fs.writeFileSync(env.configFilePath, JSON.stringify(config)); // await this.app.restart(); // const url = await this.app.client.getUrl(); // url.should.match(/\/index.html$/); // }); // it('should upgrade v0 config file', async () => { // const Config = require('../../src/common/config').default; // const newConfig = new Config(env.configFilePath); // const oldConfig = { // url: env.mattermostURL, // }; // fs.writeFileSync(env.configFilePath, JSON.stringify(oldConfig)); // await this.app.restart(); // const url = await this.app.client.getUrl(); // url.should.match(/\/index.html$/); // const str = fs.readFileSync(env.configFilePath, 'utf8'); // const upgradedConfig = JSON.parse(str); // upgradedConfig.version.should.equal(newConfig.defaultData.version); // }); // it.skip('should be stopped when the app instance already exists', (done) => { // const secondApp = env.getSpectronApp(); // // In the correct case, 'start().then' is not called. // // So need to use setTimeout in order to finish this test. // const timer = setTimeout(() => { // done(); // }, 3000); // secondApp.start().then(() => { // clearTimeout(timer); // return secondApp.stop(); // }).then(() => { // done(new Error('Second app instance exists')); // }); });