fix(tests): begin testing rules
This commit is contained in:
parent
5160eaa93d
commit
013b1d7dfb
|
@ -35,16 +35,19 @@
|
||||||
"@istanbuljs/nyc-config-typescript": "0.1.3",
|
"@istanbuljs/nyc-config-typescript": "0.1.3",
|
||||||
"@types/bunyan": "1.8.6",
|
"@types/bunyan": "1.8.6",
|
||||||
"@types/chai": "4.2.4",
|
"@types/chai": "4.2.4",
|
||||||
|
"@types/chai-as-promised": "^7.1.2",
|
||||||
"@types/deep-diff": "1.0.0",
|
"@types/deep-diff": "1.0.0",
|
||||||
"@types/js-yaml": "3.12.1",
|
"@types/js-yaml": "3.12.1",
|
||||||
"@types/lodash": "4.14.144",
|
"@types/lodash": "4.14.144",
|
||||||
"@types/mocha": "5.2.7",
|
"@types/mocha": "5.2.7",
|
||||||
"@types/sinon": "7.5.0",
|
"@types/sinon": "7.5.0",
|
||||||
|
"@types/sinon-chai": "^3.2.3",
|
||||||
"@types/source-map-support": "0.5.0",
|
"@types/source-map-support": "0.5.0",
|
||||||
"@types/yargs": "13.0.3",
|
"@types/yargs": "13.0.3",
|
||||||
"ajv": "6.10.2",
|
"ajv": "6.10.2",
|
||||||
"bunyan": "1.8.12",
|
"bunyan": "1.8.12",
|
||||||
"chai": "4.2.0",
|
"chai": "4.2.0",
|
||||||
|
"chai-as-promised": "^7.1.1",
|
||||||
"deep-diff": "1.0.2",
|
"deep-diff": "1.0.2",
|
||||||
"js-yaml": "3.13.1",
|
"js-yaml": "3.13.1",
|
||||||
"jsonpath-plus": "1.1.0",
|
"jsonpath-plus": "1.1.0",
|
||||||
|
@ -61,6 +64,7 @@
|
||||||
"rollup-plugin-tslint": "0.2.2",
|
"rollup-plugin-tslint": "0.2.2",
|
||||||
"rollup-plugin-typescript2": "0.24.3",
|
"rollup-plugin-typescript2": "0.24.3",
|
||||||
"sinon": "7.5.0",
|
"sinon": "7.5.0",
|
||||||
|
"sinon-chai": "^3.3.0",
|
||||||
"source-map-support": "0.5.15",
|
"source-map-support": "0.5.15",
|
||||||
"standard-version": "7.0.0",
|
"standard-version": "7.0.0",
|
||||||
"tslint": "5.20.0",
|
"tslint": "5.20.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { expect } from 'chai';
|
import { expect } from 'chai';
|
||||||
import { ConsoleLogger } from 'noicejs';
|
import { ConsoleLogger } from 'noicejs';
|
||||||
import { mock } from 'sinon';
|
import { mock, spy } from 'sinon';
|
||||||
|
|
||||||
import { makeSelector, resolveRules, Rule, visitRules } from '../src/rule';
|
import { makeSelector, resolveRules, Rule, visitRules } from '../src/rule';
|
||||||
import { VisitorContext } from '../src/visitor/VisitorContext';
|
import { VisitorContext } from '../src/visitor/VisitorContext';
|
||||||
|
@ -167,4 +167,65 @@ describeLeaks('rule visitor', async () => {
|
||||||
mockRule.verify();
|
mockRule.verify();
|
||||||
expect(ctx.errors.length).to.equal(0);
|
expect(ctx.errors.length).to.equal(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
itLeaks('should pick items from the scope', async () => {
|
||||||
|
const ctx = new VisitorContext({
|
||||||
|
innerOptions: {
|
||||||
|
coerce: false,
|
||||||
|
defaults: false,
|
||||||
|
mutate: false,
|
||||||
|
},
|
||||||
|
logger: new ConsoleLogger(),
|
||||||
|
});
|
||||||
|
const data = {
|
||||||
|
foo: 3,
|
||||||
|
};
|
||||||
|
const rule = new Rule({
|
||||||
|
check: {},
|
||||||
|
desc: '',
|
||||||
|
level: 'info',
|
||||||
|
name: 'foo',
|
||||||
|
select: '$.foo',
|
||||||
|
tags: [],
|
||||||
|
});
|
||||||
|
const results = await rule.pick(ctx, data);
|
||||||
|
|
||||||
|
expect(results).to.deep.equal([data.foo]);
|
||||||
|
});
|
||||||
|
|
||||||
|
itLeaks('should filter out items', async () => {
|
||||||
|
const ctx = new VisitorContext({
|
||||||
|
innerOptions: {
|
||||||
|
coerce: false,
|
||||||
|
defaults: false,
|
||||||
|
mutate: false,
|
||||||
|
},
|
||||||
|
logger: new ConsoleLogger(),
|
||||||
|
});
|
||||||
|
const errorSpy = spy(ctx, 'error');
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
foo: 3,
|
||||||
|
};
|
||||||
|
const rule = new Rule({
|
||||||
|
check: {},
|
||||||
|
desc: '',
|
||||||
|
filter: {
|
||||||
|
properties: {
|
||||||
|
foo: {
|
||||||
|
type: 'number',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
type: 'object',
|
||||||
|
},
|
||||||
|
level: 'info',
|
||||||
|
name: 'foo',
|
||||||
|
select: '$.foo',
|
||||||
|
tags: [],
|
||||||
|
});
|
||||||
|
|
||||||
|
const results = await rule.visit(ctx, data);
|
||||||
|
expect(results.errors.length).to.equal(0);
|
||||||
|
expect(errorSpy).to.have.callCount(0);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
|
import chai from 'chai';
|
||||||
|
import chaiAsPromised from 'chai-as-promised';
|
||||||
|
import sinonChai from 'sinon-chai';
|
||||||
import sourceMapSupport from 'source-map-support';
|
import sourceMapSupport from 'source-map-support';
|
||||||
|
|
||||||
sourceMapSupport.install();
|
sourceMapSupport.install({
|
||||||
|
environment: 'node',
|
||||||
|
handleUncaughtExceptions: true,
|
||||||
|
hookRequire: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This will break the whole test run if any test leaks an unhandled rejection.
|
||||||
|
*/
|
||||||
|
process.on('unhandledRejection', (reason, promise) => {
|
||||||
|
// tslint:disable-next-line:no-console
|
||||||
|
console.error('unhandled error during tests', reason);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
chai.use(chaiAsPromised);
|
||||||
|
chai.use(sinonChai);
|
||||||
|
|
31
yarn.lock
31
yarn.lock
|
@ -130,7 +130,14 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/chai@4.2.4":
|
"@types/chai-as-promised@^7.1.2":
|
||||||
|
version "7.1.2"
|
||||||
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/@types/chai-as-promised/-/chai-as-promised-7.1.2.tgz#2f564420e81eaf8650169e5a3a6b93e096e5068b"
|
||||||
|
integrity sha512-PO2gcfR3Oxa+u0QvECLe1xKXOqYTzCmWf0FhLhjREoW3fPAVamjihL7v1MOVLJLsnAMdLcjkfrs01yvDMwVK4Q==
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "*"
|
||||||
|
|
||||||
|
"@types/chai@*", "@types/chai@4.2.4":
|
||||||
version "4.2.4"
|
version "4.2.4"
|
||||||
resolved "https://artifacts.apextoaster.com/repository/group-npm/@types/chai/-/chai-4.2.4.tgz#8936cffad3c96ec470a2dc26a38c3ba8b9b6f619"
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/@types/chai/-/chai-4.2.4.tgz#8936cffad3c96ec470a2dc26a38c3ba8b9b6f619"
|
||||||
integrity sha512-7qvf9F9tMTzo0akeswHPGqgUx/gIaJqrOEET/FCD8CFRkSUHlygQiM5yB6OvjrtdxBVLSyw7COJubsFYs0683g==
|
integrity sha512-7qvf9F9tMTzo0akeswHPGqgUx/gIaJqrOEET/FCD8CFRkSUHlygQiM5yB6OvjrtdxBVLSyw7COJubsFYs0683g==
|
||||||
|
@ -172,7 +179,15 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/sinon@7.5.0":
|
"@types/sinon-chai@^3.2.3":
|
||||||
|
version "3.2.3"
|
||||||
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/@types/sinon-chai/-/sinon-chai-3.2.3.tgz#afe392303dda95cc8069685d1e537ff434fa506e"
|
||||||
|
integrity sha512-TOUFS6vqS0PVL1I8NGVSNcFaNJtFoyZPXZ5zur+qlhDfOmQECZZM4H4kKgca6O8L+QceX/ymODZASfUfn+y4yQ==
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "*"
|
||||||
|
"@types/sinon" "*"
|
||||||
|
|
||||||
|
"@types/sinon@*", "@types/sinon@7.5.0":
|
||||||
version "7.5.0"
|
version "7.5.0"
|
||||||
resolved "https://artifacts.apextoaster.com/repository/group-npm/@types/sinon/-/sinon-7.5.0.tgz#f5a10c27175465a0b001b68d8b9f761582967cc6"
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/@types/sinon/-/sinon-7.5.0.tgz#f5a10c27175465a0b001b68d8b9f761582967cc6"
|
||||||
integrity sha512-NyzhuSBy97B/zE58cDw4NyGvByQbAHNP9069KVSgnXt/sc0T6MFRh0InKAeBVHJWdSXG1S3+PxgVIgKo9mTHbw==
|
integrity sha512-NyzhuSBy97B/zE58cDw4NyGvByQbAHNP9069KVSgnXt/sc0T6MFRh0InKAeBVHJWdSXG1S3+PxgVIgKo9mTHbw==
|
||||||
|
@ -380,6 +395,13 @@ camelcase@^5.0.0:
|
||||||
resolved "https://artifacts.apextoaster.com/repository/group-npm/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
||||||
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||||
|
|
||||||
|
chai-as-promised@^7.1.1:
|
||||||
|
version "7.1.1"
|
||||||
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"
|
||||||
|
integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==
|
||||||
|
dependencies:
|
||||||
|
check-error "^1.0.2"
|
||||||
|
|
||||||
chai@4.2.0:
|
chai@4.2.0:
|
||||||
version "4.2.0"
|
version "4.2.0"
|
||||||
resolved "https://artifacts.apextoaster.com/repository/group-npm/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
|
||||||
|
@ -2307,6 +2329,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
|
||||||
resolved "https://artifacts.apextoaster.com/repository/group-npm/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
|
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
|
||||||
|
|
||||||
|
sinon-chai@^3.3.0:
|
||||||
|
version "3.3.0"
|
||||||
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/sinon-chai/-/sinon-chai-3.3.0.tgz#8084ff99451064910fbe2c2cb8ab540c00b740ea"
|
||||||
|
integrity sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA==
|
||||||
|
|
||||||
sinon@7.5.0:
|
sinon@7.5.0:
|
||||||
version "7.5.0"
|
version "7.5.0"
|
||||||
resolved "https://artifacts.apextoaster.com/repository/group-npm/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec"
|
resolved "https://artifacts.apextoaster.com/repository/group-npm/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec"
|
||||||
|
|
Loading…
Reference in New Issue