Skip to content

Commit

Permalink
fix(n4s): make sure oneOf correctly validates single case
Browse files Browse the repository at this point in the history
  • Loading branch information
ealush committed Nov 10, 2021
1 parent ec5ceb9 commit d786b34
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 3 deletions.
44 changes: 44 additions & 0 deletions packages/n4s/src/compounds/__tests__/oneOf.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import enforce from 'enforce';
import * as ruleReturn from 'ruleReturn';

describe('enforce.oneOf', () => {
it('Should fail when multiple enforcements are met', () => {
expect(
User.run({
id: 11,
name: {
first: 'John',
last: 'Doe',
},
})
).toEqual(ruleReturn.failing());
});

it('Should pass when only one enforcement is met', () => {
expect(
User.run({
name: {
first: 'John',
last: 'Doe',
},
})
).toEqual(ruleReturn.passing());
expect(User.run({ id: 11 })).toEqual(ruleReturn.passing());
});

it('Should fail when no enforcement is met', () => {
expect(User.run({})).toEqual(ruleReturn.failing());
});
});

const Entity = enforce.loose({
id: enforce.isNumber(),
});

const Person = enforce.loose({
name: enforce.shape({
first: enforce.isString().longerThan(2),
last: enforce.isString().longerThan(2),
}),
});
const User = enforce.oneOf(Entity, Person);
4 changes: 1 addition & 3 deletions packages/n4s/src/compounds/oneOf.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ export default function oneOf(
...rules: TLazy[]
): TRuleDetailedResult {
const passing: TRuleDetailedResult[] = [];

rules.every(rule => {
rules.some(rule => {
if (longerThan(passing, 1)) {
return false;
}
Expand All @@ -20,7 +19,6 @@ export default function oneOf(
if (res.pass) {
passing.push(res);
}
return res.pass;
});

return ruleReturn(lengthEquals(passing, 1));
Expand Down

0 comments on commit d786b34

Please sign in to comment.