diff options
| author | Erik Larkö <erik@mullvad.net> | 2017-07-20 09:47:00 +0200 |
|---|---|---|
| committer | Erik Larkö <erik@mullvad.net> | 2017-07-20 09:47:00 +0200 |
| commit | 8c13b784a277db52f8100e3cd5bdea17f0736d1f (patch) | |
| tree | d64c0f23e9cb6cf30816b3e3c648168ec1715450 /test | |
| parent | 310cca89fcd29eb5df07d8a6b144e4fe8eeab56d (diff) | |
| parent | 2ea377f3bd30a1e8d1d6392fcd224e82ff418601 (diff) | |
| download | mullvadvpn-8c13b784a277db52f8100e3cd5bdea17f0736d1f.tar.xz mullvadvpn-8c13b784a277db52f8100e3cd5bdea17f0736d1f.zip | |
Merge branch 'switch-tests-rebased'
Diffstat (limited to 'test')
| -rw-r--r-- | test/components/Switch.spec.js | 100 | ||||
| -rw-r--r-- | test/global.js | 17 |
2 files changed, 112 insertions, 5 deletions
diff --git a/test/components/Switch.spec.js b/test/components/Switch.spec.js new file mode 100644 index 0000000000..8cdc053c24 --- /dev/null +++ b/test/components/Switch.spec.js @@ -0,0 +1,100 @@ +// @flow + +import { expect } from 'chai'; +import React from 'react'; +import ReactTestUtils, { Simulate } from 'react-dom/test-utils'; +import Switch from '../../app/components/Switch'; + +describe('components/Switch', () => { + + it('should switch on', (done) => { + const onChange = (isOn) => { + expect(isOn).to.be.true; + done(); + }; + const component = ReactTestUtils.renderIntoDocument( + <Switch isOn={ false } onChange={ onChange } /> + ); + const domNode = ReactTestUtils.findRenderedDOMComponentWithTag(component, 'input'); + + Simulate.mouseDown(domNode, { clientX: 100, clientY: 0 }); + Simulate.mouseUp(domNode, { clientX: 100, clientY: 0 }); + Simulate.change(domNode, { target: { checked: true } }); + }); + + it('should switch off', (done) => { + const onChange = (isOn) => { + expect(isOn).to.be.false; + done(); + }; + const component = ReactTestUtils.renderIntoDocument( + <Switch isOn={ true } onChange={ onChange } /> + ); + const domNode = ReactTestUtils.findRenderedDOMComponentWithTag(component, 'input'); + + Simulate.mouseDown(domNode, { clientX: 100, clientY: 0 }); + Simulate.mouseUp(domNode, { clientX: 100, clientY: 0 }); + Simulate.change(domNode, { target: { checked: false } }); + }); + + it('should handle left to right swipe', (done) => { + const onChange = (isOn) => { + expect(isOn).to.be.true; + done(); + }; + const component = ReactTestUtils.renderIntoDocument( + <Switch isOn={ false } onChange={ onChange } /> + ); + const domNode = ReactTestUtils.findRenderedDOMComponentWithTag(component, 'input'); + + Simulate.mouseDown(domNode, { clientX: 100, clientY: 0 }); + + // Switch listens to events on document + document.dispatchEvent(new MouseEvent('mousemove', { clientX: 150, clientY: 0 })); + document.dispatchEvent(new MouseEvent('mouseup', { clientX: 150, clientY: 0 })); + }); + + it('should handle right to left swipe', (done) => { + const onChange = (isOn) => { + expect(isOn).to.be.false; + done(); + }; + const component = ReactTestUtils.renderIntoDocument( + <Switch isOn={ true } onChange={ onChange } /> + ); + const domNode = ReactTestUtils.findRenderedDOMComponentWithTag(component, 'input'); + + Simulate.mouseDown(domNode, { clientX: 150, clientY: 0 }); + + // Switch listens to events on document + document.dispatchEvent(new MouseEvent('mousemove', { clientX: 100, clientY: 0 })); + document.dispatchEvent(new MouseEvent('mouseup', { clientX: 100, clientY: 0 })); + }); + + it('should timeout when user holds knob for too long without moving', (done) => { + const onChange = () => { + throw new Error('onChange should not be called on timeout.'); + }; + + const component = ReactTestUtils.renderIntoDocument( + <Switch isOn={ false } onChange={ onChange } /> + ); + const domNode = ReactTestUtils.findRenderedDOMComponentWithTag(component, 'input'); + + Simulate.mouseDown(domNode, { clientX: 100, clientY: 0 }); + + setTimeout(() => { + // Switch listens to events on document + document.dispatchEvent(new MouseEvent('mouseup', { clientX: 100, clientY: 0 })); + + try { + // should not trigger onChange() + Simulate.change(domNode); + done(); + } catch(e) { + done(e); + } + }, 1000); + }); + +});
\ No newline at end of file diff --git a/test/global.js b/test/global.js index 4cf366b166..7b4af72b63 100644 --- a/test/global.js +++ b/test/global.js @@ -1,11 +1,18 @@ import log from 'electron-log'; -import jsdom from 'jsdom'; +import { JSDOM } from 'jsdom'; before(() => { - global.document = jsdom.jsdom('<!doctype html><html><body></body></html>'); - global.window = document.defaultView; - global.navigator = window.navigator; - log.transports.console.level = false; log.transports.file.level = false; }); + +beforeEach(() => { + const dom = new JSDOM('<!doctype html><html><body></body></html>'); + const window = dom.window; + global.window = window; + global.document = window.document; + global.navigator = window.navigator; + global.HTMLInputElement = window.HTMLInputElement; + global.Event = window.Event; + global.MouseEvent = window.MouseEvent; +}); |
