konditions
Version:
A simple and customizable JSON-based condition engine in TypeScript (e.g. GreaterThan, StringLike, Every, Some)
61 lines • 3.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const engine_default_1 = require("../engine.default");
const Pass_1 = require("./Pass");
const engine = new engine_default_1.DefaultEngine({
NumberEquals: {
resolver: Pass_1.Resolver,
validator: Pass_1.Validator,
},
});
test(`Likelihood of one (or undefined) should ALWAYS pass`, async () => {
for (let i = 0; i < 20; i++) {
expect((await Pass_1.Resolver({ likelihood: 1 }, engine)).passed).toStrictEqual(true);
expect((await Pass_1.Resolver({ likelihood: 1.0 }, engine)).passed).toStrictEqual(true);
expect((await Pass_1.Resolver({ likelihood: +1 }, engine)).passed).toStrictEqual(true);
}
expect((await Pass_1.Resolver({}, engine)).passed).toStrictEqual(true);
expect((await Pass_1.Resolver({}, engine)).passed).toStrictEqual(true);
expect((await Pass_1.Resolver({}, engine)).passed).toStrictEqual(true);
});
test(`Likelihood of zero should NEVER pass`, async () => {
for (let i = 0; i < 20; i++) {
expect((await Pass_1.Resolver({ likelihood: 0 }, engine)).passed).toStrictEqual(false);
expect((await Pass_1.Resolver({ likelihood: -0 }, engine)).passed).toStrictEqual(false);
expect((await Pass_1.Resolver({ likelihood: +0 }, engine)).passed).toStrictEqual(false);
}
});
test(`Should accept any floating number between 0 and 1`, async () => {
expect(typeof (await Pass_1.Resolver({ likelihood: 0.0010101 }, engine)).passed).toEqual(`boolean`);
expect(typeof (await Pass_1.Resolver({ likelihood: 0.1 }, engine)).passed).toEqual(`boolean`);
expect(typeof (await Pass_1.Resolver({ likelihood: 0.332523465342 }, engine)).passed).toEqual(`boolean`);
expect(typeof (await Pass_1.Resolver({ likelihood: 0.6 }, engine)).passed).toEqual(`boolean`);
expect(typeof (await Pass_1.Resolver({ likelihood: 0.9999999 }, engine)).passed).toEqual(`boolean`);
expect(typeof (await Pass_1.Resolver({ likelihood: 0.0 }, engine)).passed).toEqual(`boolean`);
expect(typeof (await Pass_1.Resolver({ likelihood: 1.0 }, engine)).passed).toEqual(`boolean`);
});
describe(`Should fail validation`, () => {
const cases = [
`{ likelihood: 0.5 }`,
{ likelihood: null },
{ likelihood: -1 },
{ likelihood: Number.NEGATIVE_INFINITY },
{ likelihood: Number.POSITIVE_INFINITY },
{ likelihood: 1.00000000000001 },
[123, 23],
null,
{ a: `1` },
{ likelihood: `1` },
{ a: `1`, b: false, c: `bah` },
[false, ` `],
[``, 0],
];
test.each(cases)(`given %p, it should not pass and return a ValidationError`, async (document) => {
const resolution = await Pass_1.Validator(document, engine);
expect(resolution.passed).toStrictEqual(false);
expect(resolution.error).toBeDefined();
expect(resolution.error.type).toEqual(`ValidationError`);
expect(resolution.error.reasons.length).toBeGreaterThan(0);
});
});
//# sourceMappingURL=Pass.test.js.map