require('../index'); global.utils = require('../utils'); var assert = require('assert'); global.builders = require('../builders'); var countW = 0; var countS = 0; function test_PageBuilder() { var name = 'Pagination: '; builders.Pagination.addTransform('custom', function(argument1) { assert.ok(argument1 === 1, name + 'addTransform(argument1)'); return this.count; }); var builder = new builders.Pagination(100, 1, 12); assert.ok(builder.isPrev === false, name + 'isPrev (1)'); assert.ok(builder.isNext === true, name + 'isNext (1)'); assert.ok(builder.isFirst === true, name + 'isFirst (1)'); assert.ok(builder.isLast === false, name + 'isLast (1)'); assert.ok(builder.nextPage === 2, name + 'nextPage (1)'); assert.ok(builder.prevPage === 1, name + 'prevPage (1)'); assert.ok(builder.lastPage === 9, name + 'lastPage (1)'); assert.ok(builder.last().page === 9, name + 'last(1)'); var output = builder.render(); output = builder.render(6); builder.refresh(100, 5, 12); assert.ok(builder.isPrev, name + 'isPrev (2)'); assert.ok(builder.isNext, name + 'isNext (2)'); assert.ok(builder.isFirst === false, name + 'isFirst (2)'); assert.ok(builder.isLast === false, name + 'isLast (2)'); assert.ok(builder.nextPage === 6, name + 'nextPage (2)'); assert.ok(builder.prevPage === 4, name + 'prevPage (2)'); assert.ok(builder.lastPage === 9, name + 'lastPage (2)'); assert.ok(builder.last().page === 9, name + 'last(2)'); output = builder.render(5); assert.ok(output[2].selected, name + 'render - max 5 (selected page problem)'); assert.ok(output[4].url === '?page=7', name + 'render - max 5 (url format)'); builder.refresh(1, 1, 12); assert.ok(builder.isFirst === true, name + 'isFirst (3)'); assert.ok(builder.isLast === true, name + 'isLast (3)'); assert.ok(builder.nextPage === 1, name + 'nextPage (3)'); assert.ok(builder.prevPage === 1, name + 'prevPage (3)'); assert.ok(builder.lastPage === 1, name + 'lastPage (3)'); builder.refresh(10, 1, 5); assert.ok(builder.isFirst === true, name + 'isFirst (4)'); assert.ok(builder.isLast === false, name + 'isLast (4)'); assert.ok(builder.transform('custom', 1) === 2, name + 'transform()'); assert.ok(builder.nextPage === 2, name + 'nextPage (4)'); assert.ok(builder.prevPage === 1, name + 'prevPage (4)'); assert.ok(builder.lastPage === 2, name + 'lastPage (4)'); builders.Pagination.setDefaultTransform('custom'); var builder = new builders.Pagination(100, 1, 10); assert.ok(builder.render(1) === 10, name + 'default transform()'); } function test_UrlBuilder() { var name = 'UrlBuilder: '; var builder = new builders.UrlBuilder(); builder.add('A', '1'); builder.add('B', '2'); builder.add('C', ' 3 '); assert.ok(builder.read('C') === ' 3 ', name + 'read'); builder.remove('B'); assert.ok(builder.read('B') === null, name + 'remove'); builder.add('A', '5'); assert.ok(builder.read('A') === '5', name + 'update'); assert.ok(builder.toString() === 'A=5&C=%203%20', name + 'toString()'); builder.add('C', '3'); assert.ok(builder.toOne(['A', 'B', 'C'], 'X') === '5XX3', name + 'toOne()'); builder.clear(); assert.ok(builder.read('A') === null, name + 'clear()'); assert.ok(builder.hasValue(['A', 'B']) === false, name + 'hasValue(empty)'); builder.add('A', '1'); builder.add('B', '2'); assert.ok(builder.hasValue(['A', 'B']) === true, name + 'hasValue()'); } function test_Schema() { var name = 'Schema: '; builders.schema('tbl_user', { Id: Number, Name: String, date: Date }, function(name) { if (name === 'date') return 'OK'; }); //assert.ok(builders.schema('default').get('tbl_user').schema.Id instanceof Function, name + 'schema write & read'); //assert.ok(JSON.stringify(builders.defaults('tbl_user')) === '{"date":"OK","Name":"","Id":0}', name + 'schema defaults'); //assert.ok(JSON.stringify(builders.create('tbl_user')) === '{"date":"OK","Name":"","Id":0}', name + 'schema create'); builders.schema('test', { Id: Number, Name: String, Male: Boolean, Dt: Date, Price: 'decimal' }); var model = { Name: 23, Male: '1', Dt: 'ADASD', Price: 1.13 }; var output = builders.prepare('test', model); name = 'Schema.prepare: '; assert.ok(output.Price === 1.13, name + 'decimal'); assert.ok(output.Name === '23', name + 'string'); assert.ok(output.Male, name + 'boolean = true'); //assert.ok(output.Dt === null, name + 'date (invalid)'); assert.ok(builders.prepare('tbl_user', {}).date === 'OK', name + 'defaults'); model = { Dt: '2012-12-12', Male: false }; output = builders.prepare('test', model); assert.ok(output.Dt.getDate() === 12 && output.Dt.getMonth() === 11 && output.Dt.getFullYear() === 2012, name + 'date'); assert.ok(!output.Male, name + 'boolean = false'); output = builders.defaults('test'); assert.ok(output.Id === 0, name + 'defaults (int)'); assert.ok(output.Name === '', name + 'defaults (String)'); assert.ok(output.Male === false, name + 'defaults (Boolean)'); builders.schema('1', { name: 'string', join: '[2]' }); builders.schema('default').get('1').define('nums', '[number]'); builders.schema('2', { age: Number }, function(name) { if (name === 'age') return -1; }); builders.schema('default').get('2').addTransform('xml', function(err, model, helper, next) { next('OK'); }).addWorkflow('send', function(err, model, helper, next) { countW++; next('workflow'); }).addOperation('test', function(err, model, helper, next) { assert.ok(!model, 'schema - operation 1'); assert.ok(helper === true, 'schema - operation 2'); next(false); }).setGet(function(error, model, helper, next) { assert.ok(error.hasError() === false, 'schema - setGet'); model.age = 99; next(); }).setSave(function(error, model, helper, next) { countS++; assert.ok(error.hasError() === false, 'schema - setSave'); next(true); }).setRemove(function(error, helper, next) { assert.ok(error.hasError() === false, 'schema - setRemove'); next(true); }).setQuery(function(error, helper, next) { assert.ok(error.hasError() === false, 'schema - setQuery'); next([]); }); //console.log(builders.defaults('1', { name: 'Peter', age: 30, join: { name: 20 }})); output = builders.prepare('1', { name: 'Peter', join: [{ name: 'TEST' }, { age: 20, test: 'KUNDA' }], nums: ['1', 'asdas', 2.3] }); assert.ok(output.join[0].age === -1 && output.join[1].age === 20, name + 'schema - joining models'); assert.ok(output.nums[2] === 2.3 && output.nums[1] === 0, name + 'schema - parse plain array'); builders.schema('default').get('2').transform('xml', output, function(err, output) { assert.ok(output === 'OK', 'Builders.transform()'); }); builders.schema('default').get('2').workflow('send', output, function(err, output) { assert.ok(output === 'workflow', 'Builders.workflow()'); }).get(null, function(err, result) { assert.ok(result.age === 99, 'schema - get'); }).save(output, function(err, result) { assert.ok(result === true, 'schema - save'); }).remove(output, function(err, result) { assert.ok(result === true, 'schema - remove'); }).query(output, function(err, result) { assert.ok(result.length === 0, 'schema - query'); }).operation(true, function(err, result) { assert.ok(!result, 'schema - operation - result'); }); SCHEMA('default', '2').addOperation('test2', function(error, model, helper, next) { assert.ok(model === 1 || model === undefined, 'schema - operation problem with model'); assert.ok(helper === 2 || helper === undefined, 'schema - operation problem with helper'); next(3); }).operation('test2', 1, 2, function(err, value) { assert.ok(value === 3, 'schema - operation advanced 1'); }).operation('test2', 2, function(err, value) { assert.ok(value === 3, 'schema - operation advanced 2'); }).operation('test2', function(err, value) { assert.ok(value === 3, 'schema - operation advanced 3'); }).constant('test', true); assert.ok(SCHEMA('default', '2').constant('test') === true, 'schema - constant'); builders.schema('validator', { name: 'string', age: 'number', isTerms: 'boolean' }, null, function(name, value, path, schema) { assert.ok(name !== 'validator', 'schema validator - problem with schema name in utils.validate()'); switch (name) { case 'name': return value.length > 0; case 'age': return value > 10; case 'isTerms': return value === true; } }); var builder = builders.validate('validator', { name: 'Peter' }); assert.ok(builder.hasError(), name + 'schema validator (error)'); builder = builders.validate('validator', { name: 'Peter', age: 34, isTerms: true }); assert.ok(!builder.hasError(), name + 'schema validator (no error)'); var obj = SCHEMA('default', '2').create(); var b = obj.$clone(); assert.ok(obj.age === b.age, 'schema $clone 1'); b.age = 10; assert.ok(obj.age !== b.age, 'schema $clone 2'); obj.$async(function(err, result) { assert.ok(err === null && countW === 2 && countS === 2 && result.length === 2, 'schema $async'); }).$save().$workflow('send'); var q = SCHEMA('test').create('q'); var x = SCHEMA('test').create('x'); q.define('name', String, true); q.define('arr', '[x]', true); q.define('ref', x); q.define('created', Date); x.define('age', Number, true); x.define('note', String, true); q.setValidate(function(name, value) { assert.ok((name === 'name' && value.length === 0) || (name === 'arr' && value.length === 2), 'SchemaBuilderEntity.validation() 1'); }); x.setValidate(function(name, value, path, model) { if (!path.startsWith('x.')) assert.ok((name === 'age' && value > 22) || (name === 'note' && value.length > 3), 'SchemaBuilderEntity.validation() 2'); }); var qi = q.create(); assert.ok(qi.created.format('yyyyMMddHHmmss') === new Date().format('yyyyMMddHHmmss'), 'A problem with problem a default value of date'); var xi = x.create(); xi.age = 30; xi.note = 'Peter'; qi.arr.push(xi); xi = x.create(); xi.age = 23; xi.note = 'Jano'; qi.arr.push(xi); qi.$validate(); // Relations test qi = q.make({ ref: xi, arr:[xi,xi] }); xi.note = 'Ivan'; assert.ok(qi.ref.note === 'Ivan', 'schema relations'); var Cat = SCHEMA('test').create('Cat'); Cat.define('id', Number); Cat.define('name', String); Cat.define('age', Number); // Performance test var instanceCount = 80000; var cats = []; //var memwatch = require('memwatch-next'); //var hd = new memwatch.HeapDiff(); var __start = (new Date()).getTime(); for (var i=0; i' + obj[key] + ''; }); return xml; }, true); assert.ok(TransformBuilder.transform('xml', { name: 'Peter' }, true) === 'Peter', 'TransformBuilder problem'); assert.ok(TransformBuilder.transform({ name: 'Peter' }) === 'Peter', 'TransformBuilder problem (default)'); } test_PageBuilder(); test_UrlBuilder(); test_Schema(); test_ErrorBuilder(); test_TransformBuilder(); console.log('================================================'); console.log('success - OK'); console.log('================================================'); console.log(''); setTimeout(function() {}, 1000);