Skip to content

Commit 559bbd5

Browse files
committed
Fixes scores validation
(failed) Result Property Requirements (Data 2.4.5) Retest only these requirements (failed) A "score" Object's "raw" property is a decimal number between min and max, if present and otherwise unrestricted, inclusive (Data 2.4.5.1.s2.table1.row2) (failed) A "score" Object's "min" property is a decimal number less than the "max" property, if it is present. (Data 2.4.5.1.s2.table1.row3) (failed) A "score" Object's "max" property is a Decimal accurate to seven significant decimal figures (Data 2.4.5.1.s2.table1.row4)
1 parent 65fc9c2 commit 559bbd5

File tree

15 files changed

+209
-29
lines changed

15 files changed

+209
-29
lines changed

dist/schemaRules/result.js

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,38 @@
22
Object.defineProperty(exports, "__esModule", { value: true });
33
var rulr_1 = require("rulr");
44
var factory_1 = require("../factory");
5-
var score = rulr_1.restrictToSchema({
6-
scaled: rulr_1.optional(factory_1.scaledValue),
7-
raw: rulr_1.optional(factory_1.numberValue),
8-
min: rulr_1.optional(factory_1.numberValue),
9-
max: rulr_1.optional(factory_1.numberValue),
10-
});
5+
var RawLessThanMinWarning_1 = require("../warnings/RawLessThanMinWarning");
6+
var RawMoreThanMaxWarning_1 = require("../warnings/RawMoreThanMaxWarning");
7+
var MinMoreThanMaxWarning_1 = require("../warnings/MinMoreThanMaxWarning");
8+
var checkRawMoreThanMin = function (data, path) {
9+
if (data.raw !== undefined && data.min !== undefined && data.raw < data.min) {
10+
return [new RawLessThanMinWarning_1.default(data, path, data.raw, data.min)];
11+
}
12+
return [];
13+
};
14+
var checkRawLessThanMax = function (data, path) {
15+
if (data.raw !== undefined && data.max !== undefined && data.raw > data.max) {
16+
return [new RawMoreThanMaxWarning_1.default(data, path, data.raw, data.max)];
17+
}
18+
return [];
19+
};
20+
var checkMinLessThanMax = function (data, path) {
21+
if (data.min !== undefined && data.max !== undefined && data.min > data.max) {
22+
return [new MinMoreThanMaxWarning_1.default(data, path, data.min, data.max)];
23+
}
24+
return [];
25+
};
26+
var score = rulr_1.composeRules([
27+
rulr_1.restrictToSchema({
28+
scaled: rulr_1.optional(factory_1.scaledValue),
29+
raw: rulr_1.optional(factory_1.numberValue),
30+
min: rulr_1.optional(factory_1.numberValue),
31+
max: rulr_1.optional(factory_1.numberValue),
32+
}),
33+
checkRawMoreThanMin,
34+
checkRawLessThanMax,
35+
checkMinLessThanMax,
36+
]);
1137
exports.default = rulr_1.restrictToSchema({
1238
score: rulr_1.optional(score),
1339
success: rulr_1.optional(factory_1.booleanValue),

dist/tests/schemaRules/score.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
33
var describeOptionalProp_1 = require("../describeOptionalProp");
44
var itsInvalid_1 = require("../itsInvalid");
55
var factory_1 = require("../factory");
6-
var validData = {
7-
scaled: 0,
8-
raw: 0,
9-
min: 0,
10-
max: 0,
11-
};
6+
var validData = {};
127
exports.default = function (test) {
138
itsInvalid_1.default(10, 'not an object', test);
9+
itsInvalid_1.default({
10+
min: 1,
11+
raw: 0,
12+
}, 'raw less than min', test);
13+
itsInvalid_1.default({
14+
max: 0,
15+
raw: 1,
16+
}, 'raw more than max', test);
17+
itsInvalid_1.default({
18+
max: 0,
19+
min: 1,
20+
}, 'min more than max', test);
1421
describeOptionalProp_1.default('scaled', factory_1.scaledValue, validData, test);
1522
describeOptionalProp_1.default('raw', factory_1.numberValue, validData, test);
1623
describeOptionalProp_1.default('min', factory_1.numberValue, validData, test);

dist/tests/values/number.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var itsInvalid_1 = require("../itsInvalid");
44
var itsValid_1 = require("../itsValid");
55
exports.default = function (test) {
66
itsInvalid_1.default('', 'not a Number', test);
7-
itsValid_1.default(-1.1, test);
7+
itsValid_1.default(-1.12345678, test);
88
itsValid_1.default(0, test);
9-
itsValid_1.default(1.1, test);
9+
itsValid_1.default(1.12345678, test);
1010
};
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { Path, Warning } from 'rulr';
2+
export default class MinMoreThanMaxWarning extends Warning {
3+
min: number;
4+
max: number;
5+
constructor(data: any, path: Path, min: number, max: number);
6+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"use strict";
2+
var __extends = (this && this.__extends) || (function () {
3+
var extendStatics = Object.setPrototypeOf ||
4+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6+
return function (d, b) {
7+
extendStatics(d, b);
8+
function __() { this.constructor = d; }
9+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10+
};
11+
})();
12+
Object.defineProperty(exports, "__esModule", { value: true });
13+
var rulr_1 = require("rulr");
14+
var MinMoreThanMaxWarning = (function (_super) {
15+
__extends(MinMoreThanMaxWarning, _super);
16+
function MinMoreThanMaxWarning(data, path, min, max) {
17+
var _this = _super.call(this, data, path) || this;
18+
_this.min = min;
19+
_this.max = max;
20+
return _this;
21+
}
22+
return MinMoreThanMaxWarning;
23+
}(rulr_1.Warning));
24+
exports.default = MinMoreThanMaxWarning;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { Path, Warning } from 'rulr';
2+
export default class RawLessThanMinWarning extends Warning {
3+
raw: number;
4+
min: number;
5+
constructor(data: any, path: Path, raw: number, min: number);
6+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"use strict";
2+
var __extends = (this && this.__extends) || (function () {
3+
var extendStatics = Object.setPrototypeOf ||
4+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6+
return function (d, b) {
7+
extendStatics(d, b);
8+
function __() { this.constructor = d; }
9+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10+
};
11+
})();
12+
Object.defineProperty(exports, "__esModule", { value: true });
13+
var rulr_1 = require("rulr");
14+
var RawLessThanMinWarning = (function (_super) {
15+
__extends(RawLessThanMinWarning, _super);
16+
function RawLessThanMinWarning(data, path, raw, min) {
17+
var _this = _super.call(this, data, path) || this;
18+
_this.raw = raw;
19+
_this.min = min;
20+
return _this;
21+
}
22+
return RawLessThanMinWarning;
23+
}(rulr_1.Warning));
24+
exports.default = RawLessThanMinWarning;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { Path, Warning } from 'rulr';
2+
export default class RawMoreThanMaxWarning extends Warning {
3+
raw: number;
4+
max: number;
5+
constructor(data: any, path: Path, raw: number, max: number);
6+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"use strict";
2+
var __extends = (this && this.__extends) || (function () {
3+
var extendStatics = Object.setPrototypeOf ||
4+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6+
return function (d, b) {
7+
extendStatics(d, b);
8+
function __() { this.constructor = d; }
9+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10+
};
11+
})();
12+
Object.defineProperty(exports, "__esModule", { value: true });
13+
var rulr_1 = require("rulr");
14+
var RawMoreThanMaxWarning = (function (_super) {
15+
__extends(RawMoreThanMaxWarning, _super);
16+
function RawMoreThanMaxWarning(data, path, raw, max) {
17+
var _this = _super.call(this, data, path) || this;
18+
_this.raw = raw;
19+
_this.max = max;
20+
return _this;
21+
}
22+
return RawMoreThanMaxWarning;
23+
}(rulr_1.Warning));
24+
exports.default = RawMoreThanMaxWarning;

src/schemaRules/result.ts

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { restrictToSchema, optional, Rule } from 'rulr';
1+
import { restrictToSchema, optional, Rule, composeRules, Warning } from 'rulr';
22
import {
33
scaledValue,
44
numberValue,
@@ -7,13 +7,42 @@ import {
77
duration,
88
extensions,
99
} from '../factory';
10+
import RawLessThanMinWarning from '../warnings/RawLessThanMinWarning';
11+
import RawMoreThanMaxWarning from '../warnings/RawMoreThanMaxWarning';
12+
import MinMoreThanMaxWarning from '../warnings/MinMoreThanMaxWarning';
1013

11-
const score = restrictToSchema({
12-
scaled: optional(scaledValue),
13-
raw: optional(numberValue),
14-
min: optional(numberValue),
15-
max: optional(numberValue),
16-
});
14+
const checkRawMoreThanMin = (data: any, path: string[]): Warning[] => {
15+
if (data.raw !== undefined && data.min !== undefined && data.raw < data.min) {
16+
return [new RawLessThanMinWarning(data, path, data.raw, data.min)];
17+
}
18+
return [];
19+
};
20+
21+
const checkRawLessThanMax = (data: any, path: string[]): Warning[] => {
22+
if (data.raw !== undefined && data.max !== undefined && data.raw > data.max) {
23+
return [new RawMoreThanMaxWarning(data, path, data.raw, data.max)];
24+
}
25+
return [];
26+
};
27+
28+
const checkMinLessThanMax = (data: any, path: string[]): Warning[] => {
29+
if (data.min !== undefined && data.max !== undefined && data.min > data.max) {
30+
return [new MinMoreThanMaxWarning(data, path, data.min, data.max)];
31+
}
32+
return [];
33+
};
34+
35+
const score = composeRules([
36+
restrictToSchema({
37+
scaled: optional(scaledValue),
38+
raw: optional(numberValue),
39+
min: optional(numberValue),
40+
max: optional(numberValue),
41+
}),
42+
checkRawMoreThanMin,
43+
checkRawLessThanMax,
44+
checkMinLessThanMax,
45+
]);
1746

1847
export default restrictToSchema({
1948
score: optional(score),

0 commit comments

Comments
 (0)