123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- var util = require('util');
- var assert = require('assert');
- var _ = require('@sailshq/lodash');
- var rttc = require('../');
- describe('.sample()', function() {
- it('should generate a type that matches', function() {
- // Top-level
- assertAllSampledValuesMatchType('string');
- assertAllSampledValuesMatchType('number');
- assertAllSampledValuesMatchType('boolean');
- assertAllSampledValuesMatchType({});
- assertAllSampledValuesMatchType([]);
- assertAllSampledValuesMatchType('lamda');
- assertAllSampledValuesMatchType('json');
- assertAllSampledValuesMatchType('ref');
- // Facted dictionary
- assertAllSampledValuesMatchType({x:'string'});
- assertAllSampledValuesMatchType({x:'number'});
- assertAllSampledValuesMatchType({x:'boolean'});
- assertAllSampledValuesMatchType({x:{}});
- assertAllSampledValuesMatchType({x:[]});
- assertAllSampledValuesMatchType({x:'lamda'});
- assertAllSampledValuesMatchType({x:'json'});
- assertAllSampledValuesMatchType({x:'ref'});
- // Patterned array
- assertAllSampledValuesMatchType(['string']);
- assertAllSampledValuesMatchType(['number']);
- assertAllSampledValuesMatchType(['boolean']);
- assertAllSampledValuesMatchType([{}]);
- assertAllSampledValuesMatchType([[]]);
- assertAllSampledValuesMatchType(['lamda']);
- assertAllSampledValuesMatchType(['json']);
- assertAllSampledValuesMatchType(['ref']);
- // Patterned array in faceted dictionary
- assertAllSampledValuesMatchType({x:['string']});
- assertAllSampledValuesMatchType({x:['number']});
- assertAllSampledValuesMatchType({x:['boolean']});
- assertAllSampledValuesMatchType({x:[{}]});
- assertAllSampledValuesMatchType({x:[[]]});
- assertAllSampledValuesMatchType({x:['lamda']});
- assertAllSampledValuesMatchType({x:['json']});
- assertAllSampledValuesMatchType({x:['ref']});
- // Faceted dictionary in patterned array
- assertAllSampledValuesMatchType([{x:['string']}]);
- assertAllSampledValuesMatchType([{x:['number']}]);
- assertAllSampledValuesMatchType([{x:['boolean']}]);
- assertAllSampledValuesMatchType([{x:[{}]}]);
- assertAllSampledValuesMatchType([{x:[[]]}]);
- assertAllSampledValuesMatchType([{x:['lamda']}]);
- assertAllSampledValuesMatchType([{x:['json']}]);
- assertAllSampledValuesMatchType([{x:['ref']}]);
- });
- });
- /**
- * Helper method to check that values samples for a specific type indeed match that type.
- * @param {[type]} expectedTypeSchema [description]
- * @return {[type]} [description]
- */
- function assertAllSampledValuesMatchType(expectedTypeSchema){
- var n = 25;
- var samples = rttc.sample(expectedTypeSchema, n);
- _.each(samples, function (sample) {
- assert.doesNotThrow(function (){
- rttc.validateStrict(expectedTypeSchema, sample);
- });
- });
- // Ensure NO MORE THAN `n` (not guaranteed to have exactly `n` samples)
- assert(samples.length <= n);
- // Ensure uniqueness of generated samples
- assert.equal(_.uniq(samples).length, samples.length, 'Expected samples to be unique ('+_.uniq(samples)+') but they weren\'t: '+samples);
- }
|