summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@codeispoetry.ru>2017-07-17 23:16:37 +0100
committerErik Larkö <erik@mullvad.net>2017-07-20 09:46:21 +0200
commit218e70ea95cf2b4d3caecd07faa72313b1bdaae9 (patch)
tree1cafd79e171e9c6e6575649fa0b283d96e8de041 /test
parentce767c669272fe9e7fe8f016d1be1f45b4d01dd4 (diff)
downloadmullvadvpn-218e70ea95cf2b4d3caecd07faa72313b1bdaae9.tar.xz
mullvadvpn-218e70ea95cf2b4d3caecd07faa72313b1bdaae9.zip
Add Switch tests
Diffstat (limited to 'test')
-rw-r--r--test/components/Switch.spec.js104
-rw-r--r--test/global.js10
2 files changed, 111 insertions, 3 deletions
diff --git a/test/components/Switch.spec.js b/test/components/Switch.spec.js
new file mode 100644
index 0000000000..78258b1d40
--- /dev/null
+++ b/test/components/Switch.spec.js
@@ -0,0 +1,104 @@
+// @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 });
+
+ domNode.checked = true;
+ Simulate.change(domNode);
+ });
+
+ 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 });
+
+ domNode.checked = false;
+ Simulate.change(domNode);
+ });
+
+ 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..7c3873ae63 100644
--- a/test/global.js
+++ b/test/global.js
@@ -2,10 +2,14 @@ import log from 'electron-log';
import jsdom from 'jsdom';
before(() => {
+ log.transports.console.level = false;
+ log.transports.file.level = false;
+});
+
+beforeEach(() => {
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;
+ global.HTMLInputElement = window.HTMLInputElement;
+ global.MouseEvent = window.MouseEvent;
});