Skip to content

Commit

Permalink
Tests for client side validation
Browse files Browse the repository at this point in the history
  • Loading branch information
xificurk committed Mar 8, 2020
1 parent 55fea2a commit f623bcb
Show file tree
Hide file tree
Showing 15 changed files with 303 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@ module.exports = {
'env': {
'browser': true,
'es6': true,
'jest/globals': true,
},
'parserOptions': {
'ecmaVersion': 2018,
'sourceType': 'module',
},
'plugins': [
'import',
'jest',
],
'extends': [
'@nepada',
'plugin:jest/recommended',
],
};
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ jobs:
install:
- travis_retry npm install
script:
- npm run lint
- npm run build
- npm run test
- stage: Code Standard Checker
php: 7.4
Expand Down
12 changes: 12 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
'presets': [
[
'@babel/preset-env',
{
'targets': {
'node': 'current',
},
},
],
],
};
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
"@rollup/plugin-node-resolve": "^6.0.0",
"eslint": "^6.8.0",
"eslint-plugin-import": "^2.19.1",
"eslint-plugin-jest": "^23.8.2",
"jest": "^24.9.0",
"rollup": "^1.27.14",
"rollup-plugin-babel": "^4.3.3",
"rollup-plugin-node-builtins": "^2.1.2",
Expand All @@ -46,8 +48,8 @@
"dist"
],
"scripts": {
"lint": "eslint src/assets build",
"test": "npm run lint",
"lint": "eslint src/assets build tests/*.js tests/assets",
"test": "jest --config tests/jest.config.js tests/assets/**.test.js",
"clean": "rm -rf ./dist/*",
"build:cjs": "rollup --config build/rollup.config.cjs.js",
"build:umd": "rollup --config build/rollup.config.umd.js",
Expand Down
33 changes: 33 additions & 0 deletions tests/assets/binding.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import {testInstances} from './bootstrap';

describe.each(testInstances)('%s', (name1, Nette1) => {
describe.each(testInstances)('%s', (name2, Nette2) => {
if (name1 === name2) {
return;
}

test('getPhoneNumber', () => {
expect(Nette1.getPhoneNumber).toBeDefined();
expect(Nette1.getPhoneNumber)
.not.toBe(Nette2.getPhoneNumber);
});

test('validatePhoneNumber', () => {
expect(Nette1.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber).toBeDefined();
expect(Nette1.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber)
.not.toBe(Nette2.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber);
});

test('validatePhoneNumberStrict', () => {
expect(Nette1.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict).toBeDefined();
expect(Nette1.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict)
.not.toBe(Nette2.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict);
});

test('validatePhoneNumberRegion', () => {
expect(Nette1.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion).toBeDefined();
expect(Nette1.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion)
.not.toBe(Nette2.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion);
});
});
});
8 changes: 8 additions & 0 deletions tests/assets/bootstrap.cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import metadata from 'libphonenumber-js/metadata.full';
import init from '../../dist/commonjs/index.cjs';
import NetteFactory from './netteFactory';

const Nette = NetteFactory();
init(Nette, metadata);

export default Nette;
8 changes: 8 additions & 0 deletions tests/assets/bootstrap.esm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import metadata from 'libphonenumber-js/metadata.full';
import init from '../../src/assets/index.esm';
import NetteFactory from './netteFactory';

const Nette = NetteFactory();
init(Nette, metadata);

export default Nette;
11 changes: 11 additions & 0 deletions tests/assets/bootstrap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import NetteCjs from './bootstrap.cjs';
import NetteEsm from './bootstrap.esm';
import NetteUmd from './bootstrap.umd';

const testInstances = [
['src/assets/index.esm.js', NetteEsm],
['dist/commonjs/index.cjs.js', NetteCjs],
['dist/phone-number-input.js', NetteUmd],
];

export {testInstances};
4 changes: 4 additions & 0 deletions tests/assets/bootstrap.umd.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import '../../dist/phone-number-input';
import NetteFactory from './netteFactory';

export default NetteFactory();
60 changes: 60 additions & 0 deletions tests/assets/getPhoneNumber.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import {testInstances} from './bootstrap';

describe.each(testInstances)('%s', (name, Nette) => {
test('no default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone"></form>';
const form = document.forms[0];
const input = form.elements[0];
let phoneNumber;

phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber).toBeNull();

input.value = 'abcdef';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber).toBeNull();

input.value = '800 12 34 56';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber).toBeNull();

input.value = '+420 800 12 34 56';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber.country).toBe('CZ');
expect(phoneNumber.number).toBe('+420800123456');

input.value = '+421 800 12 34 56';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber.country).toBe('SK');
expect(phoneNumber.number).toBe('+421800123456');
});

test('CZ default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone" data-default-region-code="CZ"></form>';
const form = document.forms[0];
const input = form.elements[0];
let phoneNumber;

phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber).toBeNull();

input.value = 'abcdef';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber).toBeNull();

input.value = '800 12 34 56';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber.country).toBe('CZ');
expect(phoneNumber.number).toBe('+420800123456');

input.value = '+420 800 12 34 56';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber.country).toBe('CZ');
expect(phoneNumber.number).toBe('+420800123456');

input.value = '+421 800 12 34 56';
phoneNumber = Nette.getPhoneNumber(input);
expect(phoneNumber.country).toBe('SK');
expect(phoneNumber.number).toBe('+421800123456');
});
});
7 changes: 7 additions & 0 deletions tests/assets/netteFactory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Nette from 'nette-forms';

export default () => {
const clone = Object.assign({}, Nette);
clone.validators = Object.assign({}, clone.validators);
return clone;
};
49 changes: 49 additions & 0 deletions tests/assets/validatePhoneNumer.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import {testInstances} from './bootstrap';

describe.each(testInstances)('%s', (name, Nette) => {
test('no default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone"></form>';
const form = document.forms[0];
const input = form.elements[0];

expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(false);

input.value = 'abcdef';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(false);

input.value = '+42012';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(false);

input.value = '212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(false);

input.value = '+420 212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(true);

input.value = '+420111111111';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(true);
});

test('CZ default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone" data-default-region-code="CZ"></form>';
const form = document.forms[0];
const input = form.elements[0];

expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(false);

input.value = 'abcdef';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(false);

input.value = '+42012';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(false);

input.value = '212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(true);

input.value = '+420 212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(true);

input.value = '+420111111111';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumber(input)).toBe(true);
});
});
49 changes: 49 additions & 0 deletions tests/assets/validatePhoneNumerRegion.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import {testInstances} from './bootstrap';

describe.each(testInstances)('%s', (name, Nette) => {
test('no default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone"></form>';
const form = document.forms[0];
const input = form.elements[0];

expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(false);

input.value = 'abcdef';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(false);

input.value = '212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'CZ'])).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'SK')).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'SK'])).toBe(false);

input.value = '+421111111111';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'CZ'])).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'SK')).toBe(true);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'SK'])).toBe(true);
});

test('CZ default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone" data-default-region-code="CZ"></form>';
const form = document.forms[0];
const input = form.elements[0];

expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(false);

input.value = 'abcdef';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(false);

input.value = '212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(true);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'CZ'])).toBe(true);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'SK')).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'SK'])).toBe(false);

input.value = '+421111111111';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'CZ')).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'CZ'])).toBe(false);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, 'SK')).toBe(true);
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberRegion(input, ['US', 'SK'])).toBe(true);
});
});
49 changes: 49 additions & 0 deletions tests/assets/validatePhoneNumerStrict.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import {testInstances} from './bootstrap';

describe.each(testInstances)('%s', (name, Nette) => {
test('no default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone"></form>';
const form = document.forms[0];
const input = form.elements[0];

expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);

input.value = 'abcdef';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);

input.value = '+42012';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);

input.value = '212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);

input.value = '+420 212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(true);

input.value = '+420111111111';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);
});

test('CZ default region', () => {
document.body.innerHTML = '<form><input type="tel" name="phone" data-default-region-code="CZ"></form>';
const form = document.forms[0];
const input = form.elements[0];

expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);

input.value = 'abcdef';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);

input.value = '+42012';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);

input.value = '212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(true);

input.value = '+420 212 345 678';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(true);

input.value = '+420111111111';
expect(Nette.validators.NepadaPhoneNumberInputValidator_validatePhoneNumberStrict(input)).toBe(false);
});
});
4 changes: 4 additions & 0 deletions tests/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/* eslint-disable no-undef */
module.exports = {
transformIgnorePatterns: [],
};

0 comments on commit f623bcb

Please sign in to comment.