UNPKG

zater-verhoeff

Version:

Module for create account zater

136 lines (107 loc) 4.55 kB
var lab = exports.lab = require('lab').script(); var expect = require('code').expect; var describe = lab.describe; var it = lab.it; var before = lab.before; var after = lab.after; var vector = require('../lib/vector'); function wrapDone(fn) { return function (done) { fn(); done(); }; } var internals = {}; internals.vectorString = 'CVSS:3.0/AV:P/AC:H/PR:N/UI:R/S:C/C:L/I:H/A:L'; describe('vector', function () { describe('#normalize', function () { it('ensures all keys in a vector have valid values', wrapDone(function () { var normalized = vector.normalize({ AV: 'Q', AB: 'L' }); expect(normalized.AV).to.equal('P'); expect(normalized.AB).to.not.exist(); })); }); describe('#parse', function () { it('converts a vector string to an object', wrapDone(function () { var parsed = vector.parse(internals.vectorString + '/'); expect(parsed).to.be.an.object(); expect(parsed).to.contain(internals.vectorString.split('/').slice(1).map(function (metric) { return metric.split(':').shift(); })); })); }); describe('#toString', function () { it('serializes it\'s `this` to a CVSS3 vector string', wrapDone(function () { var parsed = vector.parse(internals.vectorString); expect(vector.toString.call(parsed)).to.equal(internals.vectorString); expect(vector.toString.call({ foo: 'bar' })).to.equal(''); })); }); describe('#validate', function () { // Errors it('returns an error if input is neither object nor string', wrapDone(function () { var error = vector.validate(null).error; expect(error).to.be.an.instanceOf(TypeError); expect(error.toString()).to.contain('must be an object or string'); })); it('returns an error if input string is not a valid CVSS3 vector', wrapDone(function () { var error = vector.validate('foo:bar/what:hey').error; expect(error).to.be.an.instanceOf(Error); expect(error.toString()).to.contain('Invalid vector string'); })); it('returns an error if vector is missing required metrics', wrapDone(function () { var error = vector.validate(internals.vectorString.replace(/AV[^\/]+\//, '')).error; expect(error).to.be.an.instanceOf(Error); expect(error.toString()).to.contain('missing required metric (AV)'); })); // Operations it('normalizes object inputs', wrapDone(function () { var vectorObj = vector.parse(internals.vectorString); var oldNormalize = vector.normalize; var calls = []; vector.normalize = function () { calls.push(arguments); return oldNormalize.apply(null, arguments); }; var validated = vector.validate(vectorObj); expect(calls.length).to.equal(1); expect(calls[0][0]).to.equal(vectorObj); expect(validated.hasTemporal).to.equal(false); expect(validated.hasEnvironmental).to.equal(false); vector.normalize = oldNormalize; })); it('parses and normalizes string inputs', wrapDone(function () { var oldNormalize = vector.normalize; var normalizeCalls = []; vector.normalize = function () { normalizeCalls.push(arguments); return oldNormalize.apply(null, arguments); }; var oldParse = vector.parse; var parseCalls = []; vector.parse = function () { parseCalls.push(arguments); return oldParse.apply(null, arguments); }; vector.validate(internals.vectorString); expect(parseCalls.length).to.equal(1); expect(parseCalls[0][0]).to.equal(internals.vectorString); expect(normalizeCalls.length).to.equal(1); vector.normalize = oldNormalize; vector.parse = oldParse; })); it('sets hasTemporal flag to true when temporal metrics are present', wrapDone(function () { var vectorString = internals.vectorString + '/E:F'; var validated = vector.validate(vectorString); expect(validated.hasTemporal).to.equal(true); })); it('sets hasEnvironmental flag to true when environmental metrics are present', wrapDone(function () { var vectorString = internals.vectorString + '/CR:H'; var validated = vector.validate(vectorString); expect(validated.hasEnvironmental).to.equal(true); })); it('adds toString to vector for re-serialization', wrapDone(function () { var validated = vector.validate(internals.vectorString); expect(validated.vector.toString).to.be.a.function(); expect(validated.vector.toString()).to.equal(internals.vectorString); })); }); });