n4s
Version:
typed schema validation version of enforce
41 lines (34 loc) • 1.65 kB
text/typescript
import { describe, expect, it } from 'vitest';
import { enforce } from '../../../n4s';
describe('numberRules', () => {
it('pass when all number predicates pass', () => {
expect(
enforce.isNumber().greaterThan(3).lessThanOrEquals(5).run(4).pass,
).toBe(true);
expect(enforce.isNumber().isBetween(1, 10).isEven().run(4).pass).toBe(true);
expect(enforce.isNumber().isNotBetween(100, 200).run(4).pass).toBe(true);
expect(enforce.isNumber().isPositive().run(1).pass).toBe(true);
});
it('fails when any number predicate fails', () => {
expect(enforce.isNumber().greaterThan(3).run(3).pass).toBe(false);
expect(enforce.isNumber().isBetween(1, 2).run(3).pass).toBe(false);
expect(enforce.isNumber().isNotBetween(0, 4).run(4).pass).toBe(false);
expect(enforce.isNumber().isOdd().run(4).pass).toBe(false);
});
it('rejects non-number inputs at the root', () => {
// Type test: testing runtime behavior
// @ts-expect-error - testing invalid input type
expect(enforce.isNumber().run('4').pass).toBe(false);
});
it('numberEquals / numberNotEquals', () => {
expect(enforce.isNumber().numberEquals(4).run(4).pass).toBe(true);
// Type test: runtime path: string is not a number entry
expect(enforce.isNumber().numberEquals('4').run(4).pass).toBe(true);
expect(enforce.isNumber().numberNotEquals(5).run(4).pass).toBe(true);
expect(enforce.isNumber().numberNotEquals(4).run(4).pass).toBe(false);
});
it('isNegative', () => {
expect(enforce.isNumber().isNegative().run(-1).pass).toBe(true);
expect(enforce.isNumber().isPositive().run(-1).pass).toBe(false);
});
});