summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2018-07-05 13:49:10 +0200
committerAndrej Mihajlov <and@mullvad.net>2018-07-05 17:13:43 +0200
commit7b5bc3ce5f182f83437aae244dd9772a8d51f072 (patch)
tree76fed1c3d9f608e0ae6821b8eeccb112062ba1ee /test
parent6403d3b357a247c7601edf40bcd4e06f5d85addf (diff)
downloadmullvadvpn-7b5bc3ce5f182f83437aae244dd9772a8d51f072.tar.xz
mullvadvpn-7b5bc3ce5f182f83437aae244dd9772a8d51f072.zip
Add initial form data to Support form, save form data when failed to submit the problem report
Diffstat (limited to 'test')
-rw-r--r--test/components/Support.spec.js152
1 files changed, 77 insertions, 75 deletions
diff --git a/test/components/Support.spec.js b/test/components/Support.spec.js
index ce1efb2b75..59ddc25606 100644
--- a/test/components/Support.spec.js
+++ b/test/components/Support.spec.js
@@ -6,113 +6,115 @@ import { shallow } from 'enzyme';
import type { SupportProps } from '../../app/components/Support';
describe('components/Support', () => {
- const makeProps = (mergeProps: $Shape<SupportProps> = {}): SupportProps => {
- const defaultProps: SupportProps = {
- account: {
- accountToken: null,
- accountHistory: [],
- error: null,
- expiry: null,
- status: 'none',
- },
- onClose: () => {},
- onViewLog: (_path) => {},
- onCollectLog: () => Promise.resolve('/tmp/mullvad_problem_report.log'),
- onSend: (_report) => {},
- };
- return Object.assign({}, defaultProps, mergeProps);
- };
+ it('should call close callback', () => {
+ const props = makeProps({ onClose: spy() });
+ const component = shallow(<Support {...props} />);
+ const closeButton = component.find({ testName: 'support__close' });
- it('should call close callback', (done) => {
- const props = makeProps({
- onClose: () => done(),
- });
- const component = getComponent(render(props), 'support__close');
- click(component);
+ click(closeButton);
+ expect(props.onClose).to.have.been.called.once;
});
- it('should call view logs callback', (done) => {
- const props = makeProps({
- onViewLog: (_path) => done(),
- });
- const component = getComponent(render(props), 'support__view_logs');
- click(component);
+ it('should call view logs callback', async () => {
+ const props = makeProps({ viewLog: spy() });
+ const component = shallow(<Support {...props} />);
+ const viewButton = component.find({ testName: 'support__view_logs' });
+
+ await click(viewButton);
+ expect(props.viewLog).to.have.been.called.once;
});
- it('should call send callback when description filled in', (done) => {
+ it('should call send callback when description filled in', async () => {
const props = makeProps({
- onSend: (_report) => done(),
+ defaultEmail: 'foo',
+ defaultMessage: 'abc',
+ sendProblemReport: spy((_report) => Promise.resolve()),
});
+ const component = shallow(<Support {...props} />);
+ const sendButton = component.find({ testName: 'support__send_logs' });
- const component = render(props);
- component.setState({ message: 'abc', email: 'foo' });
-
- const sendButton = getComponent(component, 'support__send_logs');
expect(sendButton.prop('disabled')).to.be.false;
- click(sendButton);
+ await click(sendButton);
+ expect(props.sendProblemReport).to.have.been.called.once;
});
it('should not call send callback when description is empty', () => {
- const component = render(makeProps());
- component.setState({ message: '' });
+ const props = makeProps({ defaultMessage: '' });
+ const component = shallow(<Support {...props} />);
+ const sendButton = component.find({ testName: 'support__send_logs' });
- const sendButton = getComponent(render(makeProps()), 'support__send_logs');
expect(sendButton.prop('disabled')).to.be.true;
});
- it('should not collect report twice', (done) => {
- const collectCallback = spy(() => Promise.resolve('non-falsy'));
+ it('should not collect report twice', async () => {
const props = makeProps({
- onCollectLog: collectCallback,
+ collectProblemReport: spy(() => Promise.resolve('/path/to/problem/report')),
});
+ const component = shallow(<Support {...props} />);
+ const viewButton = component.find({ testName: 'support__view_logs' });
- const viewLogButton = getComponent(render(props), 'support__view_logs');
- click(viewLogButton);
+ await Promise.all([click(viewButton), click(viewButton)]);
+ expect(props.collectProblemReport).to.have.been.called.once;
+ });
- setTimeout(() => {
- click(viewLogButton);
+ it('should collect report on submission', async () => {
+ const props = makeProps({
+ defaultMessage: '',
+ defaultEmail: 'foo',
+ collectProblemReport: spy(() => Promise.resolve('/path/to/problem/report')),
+ sendProblemReport: spy(() => Promise.resolve()),
});
+ const component = shallow(<Support {...props} />);
+ const sendButton = component.find({ testName: 'support__send_logs' });
- setTimeout(() => {
- try {
- expect(collectCallback).to.have.been.called.once;
- done();
- } catch (e) {
- done(e);
- }
- });
+ await click(sendButton);
+ expect(props.collectProblemReport).to.have.been.called.once;
+ expect(props.sendProblemReport).to.have.been.called.once;
});
- it('should collect report on submission', (done) => {
- const collectCallback = spy(() => Promise.resolve(''));
+ it('should save the report form on change', () => {
const props = makeProps({
- onCollectLog: collectCallback,
- onSend: (_report) => {
- try {
- expect(collectCallback).to.have.been.called.once;
- done();
- } catch (e) {
- done(e);
- }
- },
+ defaultEmail: 'email@domain',
+ defaultMessage: 'test message',
+ sendProblemReport: () => Promise.reject(new Error('Simulation')),
+ saveReportForm: spy(),
});
+ const component = shallow(<Support {...props} />);
+ const input = component.find({ testName: 'support__form_message' });
+ input.simulate('changeText', 'new message');
+ expect(props.saveReportForm).to.have.been.called.once;
+ });
- const component = render(props);
- component.setState({ message: '', email: 'foo' });
+ it('should clear the report form upon successful submission', async () => {
+ const props = makeProps({
+ defaultEmail: 'email@domain',
+ defaultMessage: 'test message',
+ sendProblemReport: () => Promise.resolve(),
+ clearReportForm: spy(),
+ });
+ const component = shallow(<Support {...props} />);
+ const sendButton = component.find({ testName: 'support__send_logs' });
- const sendButton = getComponent(component, 'support__send_logs');
- click(sendButton);
+ await click(sendButton);
+ expect(props.clearReportForm).to.have.been.called.once;
});
});
-function render(props) {
- return shallow(<Support {...props} />);
-}
-
-function getComponent(container, testName) {
- return container.findWhere((n) => n.prop('testName') === testName);
+function makeProps(mergeProps: $Shape<SupportProps> = {}): SupportProps {
+ const defaultProps: SupportProps = {
+ defaultEmail: '',
+ defaultMessage: '',
+ accountHistory: [],
+ onClose: () => {},
+ viewLog: (_path) => {},
+ collectProblemReport: () => Promise.resolve('/path/to/problem/report'),
+ sendProblemReport: (_report) => Promise.resolve(),
+ saveReportForm: (_form) => {},
+ clearReportForm: () => {},
+ };
+ return { ...defaultProps, ...mergeProps };
}
function click(component) {
- component.prop('onPress')();
+ return component.prop('onPress')();
}