+tests for utils, fix UNAME_RE

pull/10/head
undefined 4 years ago
parent 54a57d3ca9
commit d01034bca8

@ -1,6 +1,6 @@
{
"name": "hydrooj",
"version": "2.12.12",
"version": "2.12.13",
"bin": "bin/hydrooj.js",
"main": "dist/loader.js",
"typings": "dist/loader.d.ts",
@ -70,4 +70,4 @@
"build": "tsc",
"build:watch": "tsc --watch"
}
}
}

@ -3,7 +3,7 @@ import { ValidationError } from '../error';
const RE_UID = /^-?\d+$/i;
const RE_PID = /^[a-zA-Z]+[a-zA-Z0-9]*$/i;
const RE_UNAME = /[^\s\u3000](.{,254}[^\s\u3000])?$/i;
const RE_UNAME = /^.{3,254}$/i;
const RE_ROLE = /^[_0-9A-Za-z]{1,256}$/i;
const RE_MAIL = /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$/i;

@ -152,7 +152,7 @@ export function parseTimeMS(str: string) {
export function parseMemoryMB(str: string) {
const match = MEMORY_RE.exec(str);
if (!match) throw new Error(`${str} error parsing memory`);
return Math.floor(parseFloat(match[1]) * MEMORY_UNITS[match[2]]);
return Math.ceil(parseFloat(match[1]) * MEMORY_UNITS[match[2]]);
}
export function isClass(obj: any, strict = false) {

@ -0,0 +1,103 @@
import 'hydrooj';
import * as validator from 'hydrooj/src/lib/validator';
describe('Validator', () => {
test('uid', () => {
expect(validator.isUid('123')).toBeTruthy();
expect(validator.isUid('123')).toBeTruthy();
expect(validator.isUid('-456')).toBeTruthy();
expect(validator.isUid('')).toBeFalsy();
expect(validator.isUid('1.23')).toBeFalsy();
expect(validator.isUid('xyz')).toBeFalsy();
});
test('uname', () => {
expect(validator.isUname('twd2')).toBeTruthy();
expect(validator.isUname('123twd3')).toBeTruthy();
expect(validator.isUname('$%1234')).toBeTruthy();
expect(validator.isUname('12<><?,.,./,.,.;\'\'[] 3 t ###2$%^&&*%&#^%$@#$^wd3')).toBeTruthy();
expect(validator.isUname('中文测试')).toBeTruthy();
expect(validator.isUname('twd'.repeat(10))).toBeTruthy();
expect(validator.isUname('')).toBeFalsy();
expect(validator.isUname('twd'.repeat(500))).toBeFalsy();
expect(validator.isUname('\ntwd4')).toBeFalsy();
});
test('password', () => {
expect(validator.isPassword('123twd3')).toBeTruthy();
expect(validator.isPassword('12<><?,.,./,.,.;\'\'[]_+)}_+{}{\\%^^%$@#$^wd3')).toBeTruthy();
expect(validator.isPassword('twd'.repeat(10))).toBeTruthy();
expect(validator.isPassword('twd'.repeat(500))).toBeTruthy();
expect(validator.isPassword(' twd4')).toBeTruthy();
expect(validator.isPassword('twd2')).toBeFalsy();
expect(validator.isPassword('')).toBeFalsy();
});
test('mail', () => {
expect(validator.isEmail('ex@example.com')).toBeTruthy();
expect(validator.isEmail('1+e-x@example.com')).toBeTruthy();
expect(validator.isEmail('example.net@example.com')).toBeTruthy();
expect(validator.isEmail('example:net@example.com')).toBeFalsy();
expect(validator.isEmail('ex@examplecom')).toBeFalsy();
expect(validator.isEmail('example.com')).toBeFalsy();
expect(validator.isEmail('examplecom')).toBeFalsy();
expect(validator.isEmail('1+e=x@example.com')).toBeFalsy();
});
/*
test('domainId', () => {
expect(validator.is_domain_id('my_domain_1')).toBeTruthy();
expect(validator.is_domain_id('My_Domain')).toBeTruthy();
expect(validator.is_domain_id('MyDomain')).toBeTruthy();
expect(validator.is_domain_id('myDomain')).toBeTruthy();
expect(validator.is_domain_id('twd2')).toBeTruthy();
expect(validator.is_domain_id('twd' * 10)).toBeTruthy();
expect(validator.is_domain_id('C:\\a.txt')).toBeFalsy();
expect(validator.is_domain_id('/etc/hosts')).toBeFalsy();
expect(validator.is_domain_id('')).toBeFalsy();
expect(validator.is_domain_id(' twd4')).toBeFalsy();
expect(validator.is_domain_id('twd4\u3000')).toBeFalsy();
expect(validator.is_domain_id('\ntwd4')).toBeFalsy();
expect(validator.is_domain_id('22domain')).toBeFalsy();
expect(validator.is_domain_id('22-Domain')).toBeFalsy();
expect(validator.is_domain_id('My-Domain')).toBeFalsy();
expect(validator.is_domain_id('dom')).toBeFalsy();
expect(validator.is_domain_id('twd' * 500)).toBeFalsy();
expect(validator.is_domain_id('twd\r\n2')).toBeFalsy();
expect(validator.is_domain_id('$domain')).toBeFalsy();
expect(validator.is_domain_id('12<><?,.,./,.,.;\'\'[] 3 t ###2$%^&&*%&#^')).toBeFalsy();
expect(validator.is_domain_id('domain.id')).toBeFalsy();
});
*/
test('role', () => {
expect(validator.isRole('my_domain_1')).toBeTruthy();
expect(validator.isRole('My_Domain')).toBeTruthy();
expect(validator.isRole('MyDomain')).toBeTruthy();
expect(validator.isRole('myDomain')).toBeTruthy();
expect(validator.isRole('twd2')).toBeTruthy();
expect(validator.isRole('twd'.repeat(10))).toBeTruthy();
expect(validator.isRole('r0le')).toBeTruthy();
expect(validator.isRole('1role')).toBeTruthy();
expect(validator.isRole('C:\\a.txt')).toBeFalsy();
expect(validator.isRole('/etc/hosts')).toBeFalsy();
expect(validator.isRole('')).toBeFalsy();
expect(validator.isRole(' twd4')).toBeFalsy();
expect(validator.isRole('twd4\u3000')).toBeFalsy();
expect(validator.isRole('\ntwd4')).toBeFalsy();
expect(validator.isRole('My-Role')).toBeFalsy();
expect(validator.isRole('twd'.repeat(90))).toBeFalsy();
expect(validator.isRole('twd\r\n2')).toBeFalsy();
expect(validator.isRole('$role')).toBeFalsy();
expect(validator.isRole('role.admin')).toBeFalsy();
expect(validator.isRole('12<><?,.,./,.,.;\'\'[#2$%^&&*%&#^')).toBeFalsy();
});
test('content', () => {
expect(validator.isContent('dummy_name')).toBeTruthy();
expect(validator.isContent('x'.repeat(300))).toBeTruthy();
expect(validator.isContent('c')).toBeTruthy();
expect(validator.isContent('')).toBeFalsy();
expect(validator.isContent('x'.repeat(700000))).toBeFalsy();
});
});

@ -0,0 +1,80 @@
import 'hydrooj';
import * as utils from 'hydrooj/src/utils';
describe('Utils', () => {
test('Array.isDiff', () => {
expect(Array.isDiff([1], [2])).toBeTruthy();
expect(Array.isDiff([1, 2, 3], [1, 2])).toBeTruthy();
expect(Array.isDiff(['1'], [1])).toBeTruthy();
expect(Array.isDiff(['2'], [])).toBeTruthy();
expect(Array.isDiff([1], [1])).toBeFalsy();
expect(Array.isDiff([1, 2], [2, 1])).toBeFalsy();
});
test('Date.format', () => {
const date = new Date('1926-08-17 00:00:00');
expect(date.format()).toStrictEqual('1926-08-17 00:00:00');
expect(date.format('%Y-%m+%d')).toStrictEqual('1926-08+17');
});
test('Math.sum', () => {
expect(Math.sum(1, 2, 3)).toStrictEqual(6);
expect(Math.sum([1, 2], 3)).toStrictEqual(6);
expect(Math.sum(-1, 2, 3)).toStrictEqual(4);
expect(Math.sum()).toStrictEqual(0);
});
test('Set.isSuperset', () => {
const setA = new Set([1, 2, 3]);
const setB = new Set([1]);
const setC = new Set([2]);
const setD = new Set();
expect(Set.isSuperset(setA, setA)).toBeTruthy();
expect(Set.isSuperset(setA, setB)).toBeTruthy();
expect(Set.isSuperset(setB, setA)).toBeFalsy();
expect(Set.isSuperset(setB, setC)).toBeFalsy();
expect(Set.isSuperset(setA, setD)).toBeTruthy();
});
test('Set.union', () => {
const setA = new Set([1, 2, 3]);
const setB = new Set([2]);
const setC = new Set([4]);
const setD = new Set([1, 2, 3, 4]);
expect(Set.union(setA, setB)).toStrictEqual(setA);
expect(Set.union(setA, setC)).toStrictEqual(setD);
});
test('Set.intersection', () => {
const setA = new Set([1, 2, 3]);
const setB = new Set([2]);
const setC = new Set([4]);
const setD = new Set();
expect(Set.intersection(setA, setB)).toStrictEqual(setB);
expect(Set.intersection(setA, setC)).toStrictEqual(setD);
expect(Set.intersection(setA, setD)).toStrictEqual(setD);
});
test('parseTimeMs', () => {
expect(utils.parseTimeMS('1000ms')).toStrictEqual(1000);
expect(utils.parseTimeMS('1s')).toStrictEqual(1000);
expect(utils.parseTimeMS('1.5s')).toStrictEqual(1500);
expect(utils.parseTimeMS('13000us')).toStrictEqual(13);
});
test('parseMemoryMB', () => {
expect(utils.parseMemoryMB('1mb')).toStrictEqual(1);
expect(utils.parseMemoryMB('10kb')).toStrictEqual(1);
expect(utils.parseMemoryMB('0.2g')).toStrictEqual(205);
});
test('isClass', () => {
const classA = class { };
const classB = function () { };
classB.prototype.get = function () { return 1 };
const funcA = function () { };
expect(utils.isClass(classA)).toBeTruthy();
expect(utils.isClass(classB)).toBeTruthy();
expect(utils.isClass(funcA)).toBeFalsy();
})
});
Loading…
Cancel
Save