summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorErik Larkö <erik@mullvad.net>2017-07-20 09:47:00 +0200
committerErik Larkö <erik@mullvad.net>2017-07-20 09:47:00 +0200
commit8c13b784a277db52f8100e3cd5bdea17f0736d1f (patch)
treed64c0f23e9cb6cf30816b3e3c648168ec1715450 /test
parent310cca89fcd29eb5df07d8a6b144e4fe8eeab56d (diff)
parent2ea377f3bd30a1e8d1d6392fcd224e82ff418601 (diff)
downloadmullvadvpn-8c13b784a277db52f8100e3cd5bdea17f0736d1f.tar.xz
mullvadvpn-8c13b784a277db52f8100e3cd5bdea17f0736d1f.zip
Merge branch 'switch-tests-rebased'
Diffstat (limited to 'test')
-rw-r--r--test/components/Switch.spec.js100
-rw-r--r--test/global.js17
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;
+});