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) {
|
||||
if (!value.endsWith('%')) {
|
||||
return NaN;
|
||||
}
|
||||
let val = value.substring(0, value.length - 1);
|
||||
if (isNaN(+val)) {
|
||||
return NaN;
|
||||
}
|
||||
const index = value.indexOf('.');
|
||||
if (index === -1) {
|
||||
return parseFloat(value) / 100;
|
||||
|
@ -7,6 +7,7 @@ export class BaseValueParser {
|
||||
constructor(field: any, ctx: any) {
|
||||
this.field = field;
|
||||
this.ctx = ctx;
|
||||
this.value = null;
|
||||
}
|
||||
|
||||
toString() {
|
||||
|
@ -5,19 +5,25 @@ export class NumberValueParser extends BaseValueParser {
|
||||
async setValue(value: any) {
|
||||
if (value === null || value === undefined || typeof value === 'number') {
|
||||
this.value = value;
|
||||
}
|
||||
if (typeof value === 'string') {
|
||||
} else if (typeof value === 'string') {
|
||||
if (!value) {
|
||||
this.value = null;
|
||||
} else if (['n/a', '-'].includes(value.toLowerCase())) {
|
||||
this.value = null;
|
||||
} else if (value.endsWith('%')) {
|
||||
this.value = percent2float(value);
|
||||
console.log(value, this.value);
|
||||
} else {
|
||||
const val = +value;
|
||||
this.value = isNaN(val) ? null : val;
|
||||
if (value.endsWith('%')) {
|
||||
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