Browse Source

[assertions] Add shotgun

master
Muthu Kumar 6 years ago
parent
commit
3e5a12086f
  1. 54
      lib/createAssertions.js
  2. 4
      lib/units/convertTest.js
  3. 3
      package.json
  4. 12
      shrinkwrap.yaml

54
lib/createAssertions.js

@ -1,55 +1,19 @@
const path = obj => path => const Shotgun = require('shotgun-query');
path.reduce((result, segment) => result && result[segment], obj);
const pickSelector = path => {
const match = path.match(/^(res|unit)(::|$)/)[0];
if (match === 'res::') return 0;
if (match === 'unit::') return 1;
return -1;
};
const parsePath = obj => pathString => { module.exports = (expectable, expect, docs) => {
const unitExpects = [];
const paths = []; if (expectable.checks) {
const normalised = pathString unitExpects.push(expect(expectable.checks).isArray());
.trim()
.replace(/^(res|unit)::/, '')
.split('::');
if (normalised[normalised.length - 1] === '&*') { expectable.checks.forEach(check =>
const push = path(obj)(normalised.slice(0, normalised.length - 1));
if (Array.isArray(push)) Array.prototype.push.apply(paths, push);
else return Promise.reject(
`${push} is not an array. Cannot run '&*' operator!`);
} else {
paths.push(path(obj)(normalised));
}
return paths; unitExpects.push(
new Shotgun(check).eval(docs).call(expect))
}; );
const obj = {
doc: {
a:
{ b: [5, 10] }
}
};
module.exports = (expectable, expect, docs) => {
const unitExpects = [];
if (expectable.checks) {
unitExpects.push(expect(expectable.checks).isArray());
expectable.checks.forEach(check => {
const [ pathToCheck, method, ...args ] = check;
const selector = pickSelector(pathToCheck);
const toChecks = parsePath(docs[selector])(pathToCheck);
toChecks.forEach(toCheck =>
unitExpects.push(
expect(toCheck)[method](...args)));
});
} }
return Promise.all(unitExpects); return Promise.all(unitExpects);

4
lib/units/convertTest.js

@ -20,7 +20,7 @@ module.exports = instance => test => {
await createAssertions( await createAssertions(
ex, ex,
expect, expect,
[ responseData ], { res: responseData },
)); ));
else if (ex.type === 'db') { else if (ex.type === 'db') {
let data = await processUnit(ex, state); let data = await processUnit(ex, state);
@ -30,7 +30,7 @@ module.exports = instance => test => {
await createAssertions( await createAssertions(
ex, ex,
expect, expect,
[ responseData, { doc: data } ] { res: responseData, unit: { doc: data } },
)); ));
} else } else
return Promise.reject( return Promise.reject(

3
package.json

@ -27,6 +27,7 @@
"@klenty/gunner": "^0.6.7", "@klenty/gunner": "^0.6.7",
"chai": "^4.1.2", "chai": "^4.1.2",
"chai-http": "^4.0.0", "chai-http": "^4.0.0",
"mongoose": "^5.2.6" "mongoose": "^5.2.6",
"shotgun-query": "^0.1.0"
} }
} }

12
shrinkwrap.yaml

@ -3,6 +3,7 @@ dependencies:
chai: 4.1.2 chai: 4.1.2
chai-http: 4.0.0 chai-http: 4.0.0
mongoose: 5.2.6 mongoose: 5.2.6
shotgun-query: 0.1.0
packages: packages:
/@babel/code-frame/7.0.0: /@babel/code-frame/7.0.0:
dependencies: dependencies:
@ -196,6 +197,10 @@ packages:
dev: false dev: false
resolution: resolution:
integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
/bracket-split/1.1.4:
dev: false
resolution:
integrity: sha512-O0FV/j4y/1Rzp/FlUZNy+AdNVfvPpBNRHe+8bpN5T4n7vm5N286TaT9Jvgvp0oEvNHTFU9dZIEpjvT/K7fKrqw==
/bson/1.0.9: /bson/1.0.9:
dev: false dev: false
engines: engines:
@ -1324,6 +1329,12 @@ packages:
node: '>=0.10.0' node: '>=0.10.0'
resolution: resolution:
integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
/shotgun-query/0.1.0:
dependencies:
bracket-split: 1.1.4
dev: false
resolution:
integrity: sha512-lKr0K5jG/d2L6500vvNNuN5qH82p7A1T6N2ySPXU4d6Qqjz4zj1K/pwIPg0psqOFmnPSl6+5q241C2Uuu/ACAQ==
/signal-exit/3.0.2: /signal-exit/3.0.2:
dev: false dev: false
resolution: resolution:
@ -1509,3 +1520,4 @@ specifiers:
chai: ^4.1.2 chai: ^4.1.2
chai-http: ^4.0.0 chai-http: ^4.0.0
mongoose: ^5.2.6 mongoose: ^5.2.6
shotgun-query: ^0.1.0

Loading…
Cancel
Save