random-fixture-data
Version:
Random fixture data generator cloned from boo1ean/casual by Egor Gumenyuk to provide mixed-case methods that pass jshint tests where camelcase is set to true...
356 lines (296 loc) • 6.83 kB
JavaScript
var casual = require('../');
describe('API', function() {
var max_times = 10;
var test = function(name) {
it('casual.' + name + ' should be ok', function(done) {
if (typeof casual[name] === 'function') {
var pivot = casual[name]();
} else {
var pivot = casual[name];
}
for (var i = 0; i < max_times; i++) {
if (typeof casual[name] === 'function') {
var result = casual[name]();
} else {
var result = casual[name];
}
if (result != pivot) {
return done();
}
}
done('Fail');
});
};
var address = [
'zip',
'city',
'street',
'address',
'address1',
'address2',
'state',
'state_abbr',
'latitude',
'longitude',
'country',
'building_number'
];
var text = [
'sentence',
'sentences',
'title',
'text',
'description',
'short_description',
'string',
'word',
'words',
'array_of_words',
'letter'
];
var internet = [
'ip',
'domain',
'url',
'email'
];
var person = [
'name',
'username',
'first_name',
'last_name',
'full_name',
'password',
'name_prefix',
'name_suffix',
'company_name',
'catch_phrase',
'phone'
];
var number = [
'integer',
'double',
'digit',
'array_of_digits',
'array_of_integers',
'array_of_doubles'
];
var date = [
'unix_time',
'moment',
'date',
'time',
'century',
'am_pm',
'day_of_year',
'day_of_month',
'day_of_week',
'month_number',
'month_name',
'year',
'timezone'
];
var payment = [
'card_type',
'card_number',
'card_exp',
'card_data'
];
var misc = [
'country_code',
'language_code',
'locale',
'mime_type',
'file_extension'
];
var color = [
'color_name',
'safe_color_name',
'rgb_hex',
'rgb_array'
];
var providers = [
address,
text,
internet,
person,
number,
date,
payment,
misc,
color
];
describe('Embedded generators', function() {
describe('Address address provider', function() {
address.forEach(test);
});
describe('Text provider', function() {
text.forEach(test);
});
describe('Internet provider', function() {
internet.forEach(test);
});
describe('Person provider', function() {
person.forEach(test);
});
describe('Number generator', function() {
number.forEach(test);
});
describe('Date provider', function() {
date.forEach(test);
});
describe('Payment provider', function() {
payment.forEach(test);
});
describe('Misc provider', function() {
misc.forEach(test);
});
describe('Color provider', function() {
color.forEach(test);
});
});
describe('Casual helpers', function() {
describe('define', function() {
it('Should create new casual property if getter doesn\'t have arguments', function() {
casual.define('wow', function() {
return 'wow wow';
});
casual.wow.should.be.equal('wow wow');
});
it('Should create new casual method if getter does have arguments', function() {
casual.define('x2', function(x) {
x = x || 2;
return x * 2;
});
casual.x2(3).should.be.equal(6);
});
});
describe('random_element', function() {
it('Should pick random element from array', function(done) {
var array = [1,2,3,4,5,23,6,7,8,95,43];
var pivot = casual.random_element(array);
for (var i = 0; i < max_times; ++i) {
if (pivot != casual.random_element(array)) {
return done();
}
}
done('Fail');
});
});
describe('random_key', function() {
it('Should return random object key', function(done) {
var key = casual.random_key({ a: 1, b: 2});
if (key === 'a' || key === 'b') {
return done();
}
done('Fail');
});
});
describe('random_value', function() {
it('Should return random object value', function(done) {
var key = casual.random_value({ a: 1, b: 2});
if (key === 1 || key === 2) {
return done();
}
done('Fail');
});
});
describe('extend', function() {
it('Should extend object', function() {
var result = casual.extend({}, {a: 42});
result.should.have.property('a', 42);
});
});
describe('numerify', function() {
it('Should replace every # in string with digit', function() {
var format = '####';
var numbers = casual.numerify(format);
parseInt(numbers).should.be.within(0, 9999);
});
});
describe('letterify',function(){
it('should replace every X in a string with a letter',function() {
var re = /^[a-zA-Z]+$/;
var result = casual.letterify('XXXX');
re.test(result).should.be.true;
result = casual.letterify('1234');
re.test(result).should.be.false;
result = casual.letterify('X123X');
re.test(result).should.be.false;
});
})
describe('register_provider', function() {
it('Should define generators', function() {
casual.register_provider({
really_custom_generator: function() { return 'custom' }
});
casual.really_custom_generator.should.be.equal('custom');
});
});
describe('join', function() {
it('Should join strings with spaces like a boss', function() {
casual.join('wow', 'such', 'sentence').should.be.equal('wow such sentence');
})
});
});
describe('Generator seeding', function() {
var create_data_set = function() {
return [
casual.description,
casual.text,
casual.random,
casual.integer,
casual.card_number,
casual.phone,
casual.unix_time,
casual.day_of_year,
casual.date,
casual.time
];
};
it('Should repeat random sequence on same seed', function() {
var seed = 123;
casual.seed(seed);
var set1 = create_data_set();
casual.seed(seed);
var set2 = create_data_set();
for (var i in set1) {
set1[i].should.be.equal(set2[i]);
}
})
});
var verify_generator = function(generator) {
var function_name = '_' + generator;
casual[function_name].should.be.a.Function;
var seed = 123;
casual.seed(seed);
var val = casual[generator];
val = typeof val === 'function' ? val() : val;
casual.seed(seed);
var function_val = casual[function_name]();
val.should.be.eql(function_val);
};
var check_getters = function(generators) {
generators.forEach(verify_generator);
};
describe('Pure getters', function() {
it('Should have getter function at _{name}', function() {
providers.forEach(check_getters);
});
it('Should return only funtions interface', function() {
var functions = casual.functions();
for (var name in functions) {
if (name === 'seed' || casual.locales.indexOf(name) !== -1 || name.indexOf('_') < 0) {
continue;
}
var generator = functions[name];
var seed = 546;
casual.seed(seed);
var first = casual['_' + name]();
casual.seed(seed);
var second = generator();
first.should.be.eql(second);
}
});
});
});