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:
26
src/form/__tests__/SubmitButton.test.js
Normal file
26
src/form/__tests__/SubmitButton.test.js
Normal 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();
|
||||
});
|
||||
});
|
51
src/form/__tests__/__snapshots__/SubmitButton.test.js.snap
Normal file
51
src/form/__tests__/__snapshots__/SubmitButton.test.js.snap
Normal 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>
|
||||
`;
|
115
src/form/__tests__/hooks.test.js
Normal file
115
src/form/__tests__/hooks.test.js
Normal 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(),
|
||||
);
|
||||
});
|
||||
});
|
84
src/form/__tests__/validation.test.js
Normal file
84
src/form/__tests__/validation.test.js
Normal 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);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user