mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-27 21:47:59 +01:00
3590be1429
* match_query: unit test and rewrite for TypeScript * match_query: use new type for parse errors * match_query: avoid exceptional control flow in date parsing
53 lines
2.1 KiB
TypeScript
53 lines
2.1 KiB
TypeScript
import { makeNumberMatcher } from '../number';
|
|
|
|
describe('Number parsing', () => {
|
|
it('should match numbers directly', () => {
|
|
const intMatch = makeNumberMatcher(2067, 0, 'eq');
|
|
|
|
expect(intMatch('2066', 'value', 0)).toBe(false);
|
|
expect(intMatch('2067', 'value', 0)).toBe(true);
|
|
expect(intMatch('2068', 'value', 0)).toBe(false);
|
|
expect(intMatch('20677', 'value', 0)).toBe(false);
|
|
});
|
|
|
|
it('should match number ranges', () => {
|
|
const ltMatch = makeNumberMatcher(2067, 0, 'lt');
|
|
const lteMatch = makeNumberMatcher(2067, 0, 'lte');
|
|
const gtMatch = makeNumberMatcher(2067, 0, 'gt');
|
|
const gteMatch = makeNumberMatcher(2067, 0, 'gte');
|
|
|
|
expect(ltMatch('2066', 'value', 0)).toBe(true);
|
|
expect(ltMatch('2067', 'value', 0)).toBe(false);
|
|
expect(ltMatch('2068', 'value', 0)).toBe(false);
|
|
expect(lteMatch('2066', 'value', 0)).toBe(true);
|
|
expect(lteMatch('2067', 'value', 0)).toBe(true);
|
|
expect(lteMatch('2068', 'value', 0)).toBe(false);
|
|
expect(gtMatch('2066', 'value', 0)).toBe(false);
|
|
expect(gtMatch('2067', 'value', 0)).toBe(false);
|
|
expect(gtMatch('2068', 'value', 0)).toBe(true);
|
|
expect(gteMatch('2066', 'value', 0)).toBe(false);
|
|
expect(gteMatch('2067', 'value', 0)).toBe(true);
|
|
expect(gteMatch('2068', 'value', 0)).toBe(true);
|
|
});
|
|
|
|
it('should not match unparsed values', () => {
|
|
const matcher = makeNumberMatcher(2067, 0, 'eq');
|
|
|
|
expect(matcher('NaN', 'value', 0)).toBe(false);
|
|
expect(matcher('test', 'value', 0)).toBe(false);
|
|
});
|
|
|
|
it('should interpret fuzz as an inclusive range around the value', () => {
|
|
const matcher = makeNumberMatcher(2067, 3, 'eq');
|
|
|
|
expect(matcher('2063', 'value', 0)).toBe(false);
|
|
expect(matcher('2064', 'value', 0)).toBe(true);
|
|
expect(matcher('2065', 'value', 0)).toBe(true);
|
|
expect(matcher('2066', 'value', 0)).toBe(true);
|
|
expect(matcher('2067', 'value', 0)).toBe(true);
|
|
expect(matcher('2068', 'value', 0)).toBe(true);
|
|
expect(matcher('2069', 'value', 0)).toBe(true);
|
|
expect(matcher('2070', 'value', 0)).toBe(true);
|
|
expect(matcher('2071', 'value', 0)).toBe(false);
|
|
});
|
|
});
|