UNPKG

@revoloo/cypress6

Version:

Cypress.io end to end testing tool

190 lines (153 loc) 5.31 kB
import '../../spec_helper' import { expect } from 'chai' import 'sinon-chai' import _ from 'lodash' import path from 'path' import Promise from 'bluebird' import { EventEmitter } from 'events' import { BrowserWindow } from 'electron' import * as Windows from '../../../lib/gui/windows' import savedState from '../../../lib/saved_state' const cyDesktop = require('@packages/desktop-gui') const DEFAULT_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/0.0.0 Chrome/59.0.3071.115 Electron/1.8.2 Safari/537.36' describe('lib/gui/windows', () => { beforeEach(function () { Windows.reset() this.win = new EventEmitter() this.win.loadURL = sinon.stub() this.win.destroy = sinon.stub() this.win.getSize = sinon.stub().returns([1, 2]) this.win.getPosition = sinon.stub().returns([3, 4]) this.win.webContents = new EventEmitter() this.win.webContents.openDevTools = sinon.stub() this.win.webContents.userAgent = DEFAULT_USER_AGENT this.win.isDestroyed = sinon.stub().returns(false) }) afterEach(() => { return Windows.reset() }) context('.getByWebContents', () => { it('calls BrowserWindow.fromWebContents', () => { sinon.stub(BrowserWindow, 'fromWebContents').withArgs('foo' as any).returns('bar' as any) expect(Windows.getByWebContents('foo')).to.eq('bar') }) }) context('.open', () => { it('sets default options', function () { const options: Windows.WindowOptions = { type: 'INDEX', } return Windows.open('/path/to/project', options, () => this.win) .then((win) => { expect(options).to.include({ height: 500, width: 600, type: 'INDEX', show: true, url: cyDesktop.getPathToIndex(), }) expect(options.webPreferences).to.include({ preload: path.resolve('lib', 'ipc', 'ipc.js'), }) expect(win.loadURL).to.be.calledWith(cyDesktop.getPathToIndex()) }) }) }) context('.create', () => { it('opens dev tools if saved state is open', function () { Windows.create('/foo/', { devTools: true }, () => this.win) expect(this.win.webContents.openDevTools).to.be.called Windows.create('/foo/', {}, () => this.win) expect(this.win.webContents.openDevTools).not.to.be.calledTwice }) }) // TODO: test everything else going on in this method! context('.trackState', () => { beforeEach(function () { return savedState.create() .then((state) => { this.state = state sinon.stub(this.state, 'set') this.projectRoot = undefined this.keys = { width: 'theWidth', height: 'someHeight', x: 'anX', y: 'aY', devTools: 'whatsUpWithDevTools', } }) }) it('saves size and position when window resizes, debounced', function () { // tried using useFakeTimers here, but it didn't work for some // reason, so this is the next best thing sinon.stub(_, 'debounce').returnsArg(0) Windows.trackState(this.projectRoot, false, this.win, this.keys) this.win.emit('resize') expect(_.debounce).to.be.called return Promise .delay(100) .then(() => { expect(this.state.set).to.be.calledWith({ theWidth: 1, someHeight: 2, anX: 3, aY: 4, }) }) }) it('returns if window isDestroyed on resize', function () { this.win.isDestroyed.returns(true) Windows.trackState(this.projectRoot, false, this.win, this.keys) this.win.emit('resize') return Promise .delay(100) .then(() => { expect(this.state.set).not.to.be.called }) }) it('saves position when window moves, debounced', function () { // tried using useFakeTimers here, but it didn't work for some // reason, so this is the next best thing sinon.stub(_, 'debounce').returnsArg(0) Windows.trackState(this.projectRoot, false, this.win, this.keys) this.win.emit('moved') return Promise .delay(100) .then(() => { expect(this.state.set).to.be.calledWith({ anX: 3, aY: 4, }) }) }) it('returns if window isDestroyed on moved', function () { this.win.isDestroyed.returns(true) Windows.trackState(this.projectRoot, false, this.win, this.keys) this.win.emit('moved') return Promise .delay(100) .then(() => { expect(this.state.set).not.to.be.called }) }) it('saves dev tools state when opened', function () { Windows.trackState(this.projectRoot, false, this.win, this.keys) this.win.webContents.emit('devtools-opened') return Promise .delay(100) .then(() => { expect(this.state.set).to.be.calledWith({ whatsUpWithDevTools: true }) }) }) it('saves dev tools state when closed', function () { Windows.trackState(this.projectRoot, false, this.win, this.keys) this.win.webContents.emit('devtools-closed') return Promise .delay(100) .then(() => { expect(this.state.set).to.be.calledWith({ whatsUpWithDevTools: false }) }) }) }) })