feat: add test cases (#1463)
This commit is contained in:
parent
9535ec57d0
commit
a0e85cda22
14
packages/core/database/src/__tests__/percent2float.test.ts
Normal file
14
packages/core/database/src/__tests__/percent2float.test.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { percent2float } from '../utils';
|
||||||
|
|
||||||
|
describe('percent2float', () => {
|
||||||
|
it('should be NaN', () => {
|
||||||
|
expect(percent2float('123')).toBe(NaN);
|
||||||
|
expect(percent2float('3a')).toBe(NaN);
|
||||||
|
expect(percent2float('3a%')).toBe(NaN);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be a floating point number', () => {
|
||||||
|
expect(percent2float('123%')).toBe(1.23);
|
||||||
|
expect(percent2float('22.5507%')).toBe(0.225507); // not 0.22550699999999999
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,46 @@
|
|||||||
|
import { NumberValueParser } from '../../value-parsers';
|
||||||
|
|
||||||
|
describe('number value parser', () => {
|
||||||
|
let parser: NumberValueParser;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
parser = new NumberValueParser({}, {});
|
||||||
|
});
|
||||||
|
|
||||||
|
const expectValue = (value) => {
|
||||||
|
parser = new NumberValueParser({}, {});
|
||||||
|
parser.setValue(value);
|
||||||
|
return expect(parser.getValue());
|
||||||
|
};
|
||||||
|
|
||||||
|
it('should be number', () => {
|
||||||
|
expectValue(123).toBe(123);
|
||||||
|
expect(parser.errors.length === 0).toBeTruthy();
|
||||||
|
expectValue('123').toBe(123);
|
||||||
|
expect(parser.errors.length === 0).toBeTruthy();
|
||||||
|
expectValue('123%').toBe(1.23);
|
||||||
|
expect(parser.errors.length === 0).toBeTruthy();
|
||||||
|
expectValue('22.5507%').toBe(0.225507);
|
||||||
|
expect(parser.errors.length === 0).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be null', () => {
|
||||||
|
expectValue('').toBe(null);
|
||||||
|
expect(parser.errors.length === 0).toBeTruthy();
|
||||||
|
expectValue('n/a').toBe(null);
|
||||||
|
expect(parser.errors.length === 0).toBeTruthy();
|
||||||
|
expectValue('-').toBe(null);
|
||||||
|
expect(parser.errors.length === 0).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be errors', () => {
|
||||||
|
expectValue({}).toBe(null);
|
||||||
|
expect(parser.errors.length > 0).toBeTruthy();
|
||||||
|
expectValue('123a').toBe(null);
|
||||||
|
expect(parser.errors.length > 0).toBeTruthy();
|
||||||
|
expectValue('123a%').toBe(null);
|
||||||
|
expect(parser.errors.length > 0).toBeTruthy();
|
||||||
|
expectValue('aaa').toBe(null);
|
||||||
|
expect(parser.errors.length > 0).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -117,6 +117,13 @@ export function patchSequelizeQueryInterface(db: Database) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function percent2float(value: string) {
|
export function percent2float(value: string) {
|
||||||
|
if (!value.endsWith('%')) {
|
||||||
|
return NaN;
|
||||||
|
}
|
||||||
|
let val = value.substring(0, value.length - 1);
|
||||||
|
if (isNaN(+val)) {
|
||||||
|
return NaN;
|
||||||
|
}
|
||||||
const index = value.indexOf('.');
|
const index = value.indexOf('.');
|
||||||
if (index === -1) {
|
if (index === -1) {
|
||||||
return parseFloat(value) / 100;
|
return parseFloat(value) / 100;
|
||||||
|
@ -7,6 +7,7 @@ export class BaseValueParser {
|
|||||||
constructor(field: any, ctx: any) {
|
constructor(field: any, ctx: any) {
|
||||||
this.field = field;
|
this.field = field;
|
||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
|
this.value = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
toString() {
|
toString() {
|
||||||
|
@ -5,19 +5,25 @@ export class NumberValueParser extends BaseValueParser {
|
|||||||
async setValue(value: any) {
|
async setValue(value: any) {
|
||||||
if (value === null || value === undefined || typeof value === 'number') {
|
if (value === null || value === undefined || typeof value === 'number') {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
} else if (typeof value === 'string') {
|
||||||
if (typeof value === 'string') {
|
|
||||||
if (!value) {
|
if (!value) {
|
||||||
this.value = null;
|
this.value = null;
|
||||||
} else if (['n/a', '-'].includes(value.toLowerCase())) {
|
} else if (['n/a', '-'].includes(value.toLowerCase())) {
|
||||||
this.value = null;
|
this.value = null;
|
||||||
} else if (value.endsWith('%')) {
|
|
||||||
this.value = percent2float(value);
|
|
||||||
console.log(value, this.value);
|
|
||||||
} else {
|
} else {
|
||||||
const val = +value;
|
if (value.endsWith('%')) {
|
||||||
this.value = isNaN(val) ? null : val;
|
value = percent2float(value);
|
||||||
|
} else {
|
||||||
|
value = +value;
|
||||||
|
}
|
||||||
|
if (isNaN(value)) {
|
||||||
|
this.errors.push(`Value invalid - "${value}"`);
|
||||||
|
} else {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.errors.push(`Value invalid - ${JSON.stringify(value)}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user