1
0
mirror of https://gitlab.nic.cz/turris/reforis/foris-js.git synced 2025-06-16 13:46:16 +02:00

Set babel.

This commit is contained in:
Bogdan Bodnar
2019-08-23 15:20:22 +02:00
parent 02ca27e49c
commit 7b38c1658c
69 changed files with 2577 additions and 1269 deletions

View File

@ -0,0 +1,26 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from 'react';
import {render} from 'customTestRender';
import SubmitButton, {STATES} from '../components/SubmitButton';
describe('<SubmitButton/>', () => {
it('Render ready', () => {
const {container} = render(<SubmitButton state={STATES.READY}/>);
expect(container).toMatchSnapshot();
});
it('Render saving', () => {
const {container} = render(<SubmitButton state={STATES.SAVING}/>);
expect(container).toMatchSnapshot();
});
it('Render load', () => {
const {container} = render(<SubmitButton state={STATES.LOAD}/>);
expect(container).toMatchSnapshot();
});
});

View File

@ -0,0 +1,51 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<SubmitButton/> Render load 1`] = `
<div>
<button
class="btn btn-primary offset-lg-8 col-lg-3 col-sm-12"
disabled=""
>
<span
aria-hidden="true"
class="spinner-border spinner-border-sm"
role="status"
/>
Load settings
</button>
</div>
`;
exports[`<SubmitButton/> Render ready 1`] = `
<div>
<button
class="btn btn-primary offset-lg-8 col-lg-3 col-sm-12"
>
Save
</button>
</div>
`;
exports[`<SubmitButton/> Render saving 1`] = `
<div>
<button
class="btn btn-primary offset-lg-8 col-lg-3 col-sm-12"
disabled=""
>
<span
aria-hidden="true"
class="spinner-border spinner-border-sm"
role="status"
/>
Updating
</button>
</div>
`;

View File

@ -0,0 +1,115 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
// TODO: rewrite this test
import React from 'react';
import {fireEvent, render, waitForElement} from 'customTestRender';
import mockAxios from 'jest-mock-axios';
import ForisForm from '../components/ForisForm';
import API_URLs from 'common/API';
// It's possible to unittest each hooks via react-hooks-testing-library.
// But it's better and easier to test it by test components which uses this hooks.
const TestForm = ({formData, formErrors, setFormValue}) => {
return <>
<input
data-testid='test-input'
value={formData.field}
onChange={setFormValue(value => ({field: {$set: value}}))}
/>
<p>{formErrors.field}</p>
</>
};
describe('useForm hook.', () => {
let mockValidator;
let mockPrepData;
let mockPrepDataToSubmit;
let mockWebSockets;
let input;
let form;
const Child = jest.fn(props => <TestForm {...props}/>);
beforeEach(async () => {
mockPrepData = jest.fn(() => ({field: 'preparedData'}));
mockPrepDataToSubmit = jest.fn(() => ({field: 'preparedDataToSubmit'}));
mockValidator = jest.fn(data => data.field === 'invalidValue' ? {field: 'Error'} : {});
const {getByTestId, container} = render(
<ForisForm
ws={mockWebSockets}
// Just some module which exists...
forisConfig={{
endpoint: API_URLs.wan,
wsModule: 'wan'
}}
prepData={mockPrepData}
prepDataToSubmit={mockPrepDataToSubmit}
validator={mockValidator}
>
<Child/>
</ForisForm>
);
mockAxios.mockResponse({field: 'fetchedData'});
input = await waitForElement(() =>
getByTestId('test-input')
);
form = container.firstChild
});
it('Validation on changing.', () => {
expect(mockValidator).toHaveBeenCalledTimes(1);
expect(Child).toHaveBeenCalledTimes(1);
expect(Child.mock.calls[0][0].formErrors).toMatchObject({});
fireEvent.change(input, {target: {value: 'invalidValue', type: 'text'}});
expect(Child).toHaveBeenCalledTimes(2);
expect(mockValidator).toHaveBeenCalledTimes(2);
expect(Child.mock.calls[1][0].formErrors).toMatchObject({field: 'Error'});
});
it('Update text value.', () => {
fireEvent.change(input, {target: {value: 'newValue', type: 'text'}})
expect(input.value).toBe('newValue');
});
it('Update text value.', () => {
fireEvent.change(input, {target: {value: 123, type: 'number'}})
expect(input.value).toBe('123');
});
it('Update checkbox value.', () => {
fireEvent.change(input, {target: {checked: true, type: 'checkbox'}})
expect(input.checked).toBe(true);
});
it('Fetch data.', () => {
expect(mockAxios.get).toHaveBeenCalledWith('/api/wan', expect.anything());
expect(mockPrepData).toHaveBeenCalledTimes(1);
expect(Child.mock.calls[0][0].formData).toMatchObject({field: 'preparedData'});
});
it('Submit.', () => {
expect(mockAxios.get).toHaveBeenCalledTimes(1);
expect(mockPrepDataToSubmit).toHaveBeenCalledTimes(0);
fireEvent.submit(form);
expect(mockPrepDataToSubmit).toHaveBeenCalledTimes(1);
expect(mockAxios.post).toHaveBeenCalledTimes(1);
expect(mockAxios.post).toHaveBeenCalledWith(
'/api/wan',
{'field': 'preparedDataToSubmit'},
expect.anything(),
);
});
});

View File

@ -0,0 +1,84 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import {
validateDomain,
validateDUID,
validateIPv4Address,
validateIPv6Address,
validateIPv6Prefix, validateMAC
} from 'validations';
describe('Validation functions', () => {
it('validateIPv4Address valid', () => {
expect(validateIPv4Address('192.168.1.1')).toBe(undefined);
expect(validateIPv4Address('1.1.1.1')).toBe(undefined);
expect(validateIPv4Address('0.0.0.0')).toBe(undefined);
});
it('validateIPv4Address invalid', () => {
expect(validateIPv4Address('invalid')).not.toBe(undefined);
expect(validateIPv4Address('192.256.1.1')).not.toBe(undefined);
expect(validateIPv4Address('192.168.256.1')).not.toBe(undefined);
expect(validateIPv4Address('192.168.1.256')).not.toBe(undefined);
expect(validateIPv4Address('192.168.1.256')).not.toBe(undefined);
});
it('validateIPv6Address valid', () => {
expect(validateIPv6Address('2001:0db8:85a3:0000:0000:8a2e:0370:7334')).toBe(undefined);
expect(validateIPv6Address('0:0:0:0:0:0:0:1')).toBe(undefined);
expect(validateIPv6Address('::1')).toBe(undefined);
expect(validateIPv6Address('::')).toBe(undefined);
});
it('validateIPv6Address invalid', () => {
expect(validateIPv6Address('invalid')).not.toBe(undefined);
expect(validateIPv6Address('1.1.1.1')).not.toBe(undefined);
expect(validateIPv6Address('1200::AB00:1234::2552:7777:1313')).not.toBe(undefined);
expect(validateIPv6Address('1200:0000:AB00:1234:O000:2552:7777:1313')).not.toBe(undefined);
});
it('validateIPv6Prefix valid', () => {
expect(validateIPv6Prefix('2002:0000::/16')).toBe(undefined);
expect(validateIPv6Prefix('0::/0')).toBe(undefined);
});
it('validateIPv6Prefix invalid', () => {
expect(validateIPv6Prefix('2001:0db8:85a3:0000:0000:8a2e:0370:7334')).not.toBe(undefined);
expect(validateIPv6Prefix('::1')).not.toBe(undefined);
expect(validateIPv6Prefix('2002:0000::/999')).not.toBe(undefined);
});
it('validateDomain valid', () => {
expect(validateDomain('example.com')).toBe(undefined);
expect(validateDomain('one.two.three')).toBe(undefined);
});
it('validateDomain invalid', () => {
expect(validateDomain('test/')).not.toBe(undefined);
expect(validateDomain('.')).not.toBe(undefined);
});
it('validateDUID valid', () => {
expect(validateDUID('abcdefAB')).toBe(undefined);
expect(validateDUID('ABCDEF12')).toBe(undefined);
expect(validateDUID('ABCDEF12AB')).toBe(undefined);
});
it('validateDUID invalid', () => {
expect(validateDUID('gggggggg')).not.toBe(undefined);
expect(validateDUID('abcdefABa')).not.toBe(undefined);
});
it('validateMAC valid', () => {
expect(validateMAC('00:D0:56:F2:B5:12')).toBe(undefined);
expect(validateMAC('00:26:DD:14:C4:EE')).toBe(undefined);
expect(validateMAC('06:00:00:00:00:00')).toBe(undefined);
});
it('validateMAC invalid', () => {
expect(validateMAC('00:00:00:00:00:0G')).not.toBe(undefined);
expect(validateMAC('06:00:00:00:00:00:00')).not.toBe(undefined);
});
});