thinkjs/test/model/base.js
2015-08-05 16:20:59 +08:00

734 lines
30 KiB
JavaScript

'use strict';
var assert = require('assert');
var path = require('path');
var fs = require('fs');
var muk = require('muk');
for(var filepath in require.cache){
delete require.cache[filepath];
}
var Index = require('../../lib/index.js');
var instance = new Index();
instance.load();
think.APP_PATH = path.dirname(__dirname) + '/testApp';
var Base = require('../../lib/model/base.js');
var mysqlSocket = think.adapter('socket', 'mysql');
describe('model/base.js', function(){
var instance = null;
before(function(){
instance = new Base('user', think.config('db'));
var tagCacheKeyNum = 0;
muk(mysqlSocket.prototype, 'query', function(sql){
if (sql === 'SHOW COLUMNS FROM `think_friend`') {
var data = [
{"Field":"id","Type":"int(11) unsigned","Null":"NO","Key":"PRI","Default":null,"Extra":"auto_increment"},
{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},
{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},
{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},
];
return Promise.resolve(data);
}else if (sql === 'SHOW COLUMNS FROM `think_cate`') {
var data = [
{"Field":"id","Type":"int(11) unsigned","Null":"NO","Key":"","Default":null,"Extra":""},
{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},
{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},
{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},
];
return Promise.resolve(data);
}else if (sql === 'SHOW COLUMNS FROM `think_tag`') {
var data = [
{"Field":"wid","Type":"int(11) unsigned","Null":"NO","Key":"PRI","Default":null,"Extra":"auto_increment"},
{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},
{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},
{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},
];
return Promise.resolve(data);
}else if (sql === 'SHOW COLUMNS FROM `think_user`') {
var data = [
{"Field":"wid","Type":"int(11) unsigned","Null":"NO","Key":"","Default":null,"Extra":""},
{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},
{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},
{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},
];
return Promise.resolve(data);
}else if (sql === 'SHOW COLUMNS FROM `think_type`') {
var data = [
{"Field":"wid","Type":"int(11) unsigned","Null":"NO","Key":"","Default":null,"Extra":""},
{"Field":"flo","Type":"float(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},
{"Field":"is_show","Type":"bool","Null":"NO","Key":"MUL","Default":"1","Extra":""},
{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},
];
return Promise.resolve(data);
}else if(sql.indexOf('SHOW COLUMNS ') > -1){
var data = [
{"Field":"wid","Type":"int(11) unsigned","Null":"NO","Key":"PRI","Default":null,"Extra":""},
{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},
{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},
{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},
];
return Promise.resolve(data);
}else if (sql.indexOf("SELECT * FROM `think_type` WHERE ( `flo` = 0 ) LIMIT 1") > -1) {
return Promise.resolve([]);
}else if (sql.indexOf('SELECT COUNT(think_tag.wid) AS thinkjs_count FROM `think_tag` LIMIT 1') > -1) {
return Promise.resolve([{
thinkjs_count: 100
}])
}else if (sql.indexOf("SELECT `wid` FROM `think_group` LIMIT 2")> -1) {
return Promise.resolve([
{"id":7565,"title":"title1","cate_id":1,"cate_no":0},
{"id":7564,"title":"title2","cate_id":2,"cate_no":977}
])
}else if(sql.trim() === 'SELECT * FROM `think_cache_tbl`'){
++tagCacheKeyNum;
return Promise.resolve(['cache1', 'cache2', tagCacheKeyNum]);
}else if(sql.trim() === "INSERT INTO `think_user` (`title`) VALUES ('test')"){
return Promise.resolve({
insertId: 100
});
}else if(sql.trim() === "REPLACE INTO `think_user` (`title`) VALUES ('test')"){
return Promise.resolve({
insertId: 1000
});
}else if(sql.trim() === "SELECT * FROM `think_user` WHERE ( `id` = 897 )"){
return Promise.resolve([]);
}else if(sql.trim() === "SELECT * FROM `think_user` WHERE ( `id` = 898 )"){
return Promise.resolve([{
id: 898
}]);
}else if(sql.trim() === "INSERT INTO `think_user`(`title`) VALUES ('title1'),('title2')"){
return Promise.resolve({
insertId: 565
})
}else if(sql.trim() === "REPLACE INTO `think_user`(`title`) VALUES ('title1'),('title2')"){
return Promise.resolve({
insertId: 343
})
}else if(sql.trim() === "DELETE FROM `think_user` WHERE ( `id` = 1 )"){
return Promise.resolve({
affectedRows: 3
})
}else if(sql.trim() === "UPDATE `think_user` SET `title`='title1' WHERE ( `id` = 100 )"){
return Promise.resolve({
affectedRows: 1
})
}else if(sql.trim() === "UPDATE `think_user` SET `title`='title2' WHERE ( `id` = 101 )"){
return Promise.resolve({
affectedRows: 3
})
}else if(sql.trim() === "UPDATE `think_user` SET `title`=title+10"){
return Promise.resolve({
affectedRows: 1
})
}else if(sql.trim() === "UPDATE `think_user` SET `title`=title+1"){
return Promise.resolve({
affectedRows: 1
})
}else if(sql.trim() === "UPDATE `think_user` SET `title`=title-10"){
return Promise.resolve({
affectedRows: 1
})
}else if(sql.trim() === "UPDATE `think_user` SET `title`=title-1"){
return Promise.resolve({
affectedRows: 1
})
}else if(sql.trim() === "SELECT * FROM `think_user` WHERE ( `id` = 100 )"){
return Promise.resolve([{"id":7565,"title":"title1","cate_id":1,"cate_no":0}])
}else if(sql.trim() === "SELECT * FROM `think_user` WHERE ( `id` = 100 ) LIMIT 1"){
return Promise.resolve([{"id":7565,"title":"title1","cate_id":1,"cate_no":0}])
}else if(sql.trim() === "INSERT INTO `think_user` (`wid`,`title`,`cate_id`,`cate_no`) SELECT * FROM `think_tag` WHERE ( `name` = 'test' )"){
return Promise.resolve({
insertId: 100
});
}else if(sql.trim() === "SELECT COUNT(think_user.id) AS think_count FROM `think_user` WHERE ( `name` = 'test' ) LIMIT 1"){
return Promise.resolve([{
think_count: 399
}])
}else if(sql.trim() === "SELECT `title` FROM `think_user` WHERE ( `name` = 'welefen' )"){
return Promise.resolve([{
title: 'title1'
}, {
title: 'title2'
}])
}else if(sql.trim() === "SELECT `title` FROM `think_user` WHERE ( `name` = 'welefen' ) LIMIT 1"){
return Promise.resolve([{
title: 'title1'
}])
}else if(sql.trim() === "SELECT `title`,`cate_no` FROM `think_user` WHERE ( `name` = 'welefen' ) LIMIT 1"){
return Promise.resolve([{
title: 'title1',
cate_no: 1000
}])
}else if(sql.trim() === "SELECT `title`,`cate_no` FROM `think_user` WHERE ( `name` = 'welefen' ) LIMIT 3"){
return Promise.resolve([{
title: 'title1',
cate_no: 1000
},{
title: 'title2',
cate_no: 1001
},{
title: 'title3',
cate_no: 1002
}])
}else if(sql.trim() === "SELECT COUNT(id) AS think_count FROM `think_user` LIMIT 1"){
return Promise.resolve([{
think_count: 40000
}])
}else if(sql.trim() === "SELECT SUM(id) AS think_sum FROM `think_user` LIMIT 1"){
return Promise.resolve([{
think_sum: 1000
}])
}else if(sql.trim() === "SELECT MIN(id) AS think_min FROM `think_user` LIMIT 1"){
return Promise.resolve([{
think_min: 1000
}])
}else if(sql.trim() === "SELECT MAX(id) AS think_max FROM `think_user` LIMIT 1"){
return Promise.resolve([{
think_max: 1000
}])
}else if(sql.trim() === "SELECT AVG(id) AS think_avg FROM `think_user` LIMIT 1"){
return Promise.resolve([{
think_avg: 1000
}])
}
//console.log(sql)
var data = [
{"id":7565,"title":"title1","cate_id":1,"cate_no":0},
{"id":7564,"title":"title2","cate_id":2,"cate_no":977},
{"id":7563,"title":"title3","cate_id":7,"cate_no":281},
{"id":7562,"title":"title4","cate_id":6,"cate_no":242},
{"id":7561,"title":"title5","cate_id":3,"cate_no":896},
{"id":7560,"title":"title6","cate_id":3,"cate_no":897},
{"id":7559,"title":"title7","cate_id":3,"cate_no":898},
{"id":7558,"title":"title8","cate_id":17,"cate_no":151},
{"id":7557,"title":"title9","cate_id":17,"cate_no":152}
]
return Promise.resolve(data);
})
})
it('getTableFields', function(done){
instance.getTableFields().then(function(data){
assert.deepEqual(data, { wid:{name: 'wid',type: 'int(11) unsigned',required: false,default: null, primary: false, unique: false, auto_increment: false }, title: { name: 'title', type: 'varchar(255)', required: false, default: null, primary: false, unique: true, auto_increment: false }, cate_id: { name: 'cate_id', type: 'tinyint(255)', required: false, default: '1', primary: false, unique: false, auto_increment: false }, cate_no: { name: 'cate_no', type: 'int(11)', required: false, default: null, primary: false, unique: false, auto_increment: false } })
done();
})
})
it('getTableFields, exist', function(done){
instance.getTableFields().then(function(){
return instance.getTableFields();
}).then(function(data){
assert.deepEqual(data, { wid:{name: 'wid',type: 'int(11) unsigned',required: false, default: null, primary: false, unique: false, auto_increment: false }, title: { name: 'title', type: 'varchar(255)', required: false, default: null, primary: false, unique: true, auto_increment: false }, cate_id: { name: 'cate_id', type: 'tinyint(255)', required: false, default: '1', primary: false, unique: false, auto_increment: false }, cate_no: { name: 'cate_no', type: 'int(11)', required: false, default: null, primary: false, unique: false, auto_increment: false } })
done();
})
})
it('getTableFields, type', function(done){
return instance.getTableFields('think_type').then(function(data){
assert.deepEqual(data, { wid: { name: 'wid', type: 'int(11) unsigned', required: false, default: null, primary: false, unique: false, auto_increment: false }, flo: { name: 'flo', type: 'float(255)', required: false, default: null, primary: false, unique: true, auto_increment: false }, is_show: { name: 'is_show', type: 'bool', required: false, default: '1', primary: false, unique: false, auto_increment: false }, cate_no: { name: 'cate_no', type: 'int(11)', required: false, default: null, primary: false, unique: false, auto_increment: false } })
assert.equal(instance.getLastSql(), 'SHOW COLUMNS FROM `think_type`');
done();
})
})
it('getTableFields, change pk', function(done){
var instance = new Base('tag', think.config('db'))
return instance.getTableFields('think_tag').then(function(data){
assert.equal(instance.getLastSql(), 'SHOW COLUMNS FROM `think_tag`');
assert.equal(instance.pk, 'wid');
done();
})
})
it('getTableFields, change pk, getPk', function(done){
var instance = new Base('tag', think.config('db'))
return instance.getTableFields('think_tag').then(function(data){
return instance.getPk();
}).then(function(pk){
assert.equal(instance.getLastSql(), 'SHOW COLUMNS FROM `think_tag`');
assert.equal(pk, 'wid');
done();
})
})
it('getUniqueField', function(done){
var instance = new Base('tag', think.config('db'))
return instance.getUniqueField().then(function(data){
assert.equal(data, 'title');
done();
})
})
it('getUniqueField, with data', function(done){
var instance = new Base('tag', think.config('db'))
return instance.getUniqueField({
title: 'welefen'
}).then(function(data){
assert.equal(data, 'title');
done();
})
})
it('build sql', function(done){
instance.where('id=1').field('name,title').group('name').limit(10).buildSql().then(function(sql){
assert.equal(sql, '( SELECT `name`,`title` FROM `think_user` WHERE ( id=1 ) GROUP BY `name` LIMIT 10 )')
done();
})
})
it('parseOptions', function(done){
instance.parseOptions().then(function(options){
assert.deepEqual(options, { table: 'think_user', tablePrefix: 'think_', model: 'user' })
done();
})
})
it('parseOptions, has oriOpts', function(done){
instance.parseOptions({
where: {
name: 'welefen'
}
}).then(function(options){
assert.deepEqual(options, { where: { name: 'welefen' },table: 'think_user',tablePrefix: 'think_',model: 'user' })
done();
})
})
it('parseOptions, has oriOpts', function(done){
instance.parseOptions(1000).then(function(options){
assert.deepEqual(options, { table: 'think_user', tablePrefix: 'think_', model: 'user', where: { id: '1000' } })
done();
})
})
it('parseOptions, has alias', function(done){
instance.alias('a').parseOptions(1000).then(function(options){
assert.deepEqual(options, { alias: 'a', table: 'think_user AS a', tablePrefix: 'think_', model: 'user', where: { id: '1000' } })
done();
})
})
it('parseOptions, field reverse', function(done){
instance.alias('a').field('title', true).parseOptions(1000).then(function(options){
assert.deepEqual(options, { alias: 'a', field: [ 'wid', 'cate_id', 'cate_no' ], fieldReverse: false, table: 'think_user AS a', tablePrefix: 'think_', model: 'user', where: { id: '1000' } })
done();
})
})
it('parseOptions, key is not valid', function(done){
instance.alias('a').where({
'fasdf$www': 'welefen'
}).parseOptions(1000).catch(function(err){
done();
})
})
it('parseWhereOptions', function(){
var options = instance.parseWhereOptions('10,20');
assert.deepEqual(options, { where: { id: { IN: '10,20' } } })
})
it('add data, empty', function(done){
instance.add().catch(function(err){
assert.deepEqual(instance._data, {});
done();
})
})
it('add data, has data', function(done){
instance.add({
name: 'welefen',
title: 'test'
}).then(function(insertId){
assert.equal(insertId, 100);
var sql = instance.getLastSql();
assert.equal(sql, "INSERT INTO `think_user` (`title`) VALUES ('test')");
done();
})
})
it('replace data, has data', function(done){
instance.add({
name: 'welefen',
title: 'test'
}, true).then(function(insertId){
assert.equal(insertId, 1000);
var sql = instance.getLastSql();
assert.equal(sql, "REPLACE INTO `think_user` (`title`) VALUES ('test')");
done();
})
})
it('thenAdd, not exist', function(done){
instance.where({id: 897}).thenAdd({
name: 'welefen',
title: 'test'
}).then(function(data){
assert.deepEqual(data, { id: 100, type: 'add' })
done();
})
})
it('thenAdd, exist', function(done){
instance.where({id: 898}).thenAdd({
name: 'welefen',
title: 'test'
}).then(function(data){
assert.deepEqual(data, { id: 898, type: 'exist' })
done();
})
})
it('add many', function(done){
instance.addMany([{
name: 'name1',
title: 'title1'
}, {
name: 'name2',
title: 'title2'
}]).then(function(data){
assert.deepEqual(data, [ 564, 565 ]);
var sql = instance.getLastSql();
assert.equal(sql, "INSERT INTO `think_user`(`title`) VALUES ('title1'),('title2')");
done();
})
})
it('add many, replace', function(done){
instance.addMany([{
name: 'name1',
title: 'title1'
}, {
name: 'name2',
title: 'title2'
}], true).then(function(data){
assert.deepEqual(data, [ 342, 343 ]);
var sql = instance.getLastSql();
assert.equal(sql, "REPLACE INTO `think_user`(`title`) VALUES ('title1'),('title2')");
done();
})
})
it('add many, not array', function(done){
instance.addMany().catch(function(err){
done();
})
})
it('delete data', function(done){
instance.where({id: 1}).delete().then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "DELETE FROM `think_user` WHERE ( `id` = 1 )");
assert.equal(data, 3);
done();
})
})
it('update, empty', function(done){
instance.where({id: 100}).update().catch(function(err){
done();
})
})
it('update', function(done){
instance.where({id: 100}).update({
name: 'name1',
title: 'title1'
}).then(function(rows){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`='title1' WHERE ( `id` = 100 )")
assert.equal(rows, 1);
done();
})
})
it('update, where condition from data', function(done){
instance.update({
id: 100,
name: 'name1',
title: 'title1'
}).then(function(rows){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`='title1' WHERE ( `id` = 100 )")
assert.equal(rows, 1);
done();
})
})
it('update many, empty', function(done){
instance.where({id: 100}).updateMany().catch(function(err){
done();
})
})
it('update many', function(done){
instance.updateMany([{
id: 100,
name: 'name1',
title: 'title1'
}]).then(function(rows){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`='title1' WHERE ( `id` = 100 )")
assert.equal(rows, 1);
done();
})
})
it('update many', function(done){
instance.updateMany([{
id: 100,
name: 'name1',
title: 'title1'
},{
id: 101,
name: 'name2',
title: 'title2'
}]).then(function(rows){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`='title2' WHERE ( `id` = 101 )")
assert.equal(rows, 4);
done();
})
})
it('increment', function(done){
instance.increment('title', 10).then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`=title+10");
assert.equal(data, 1)
done();
})
})
it('increment, default step', function(done){
instance.increment('title').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`=title+1");
assert.equal(data, 1)
done();
})
})
it('decrement', function(done){
instance.decrement('title', 10).then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`=title-10");
assert.equal(data, 1)
done();
})
})
it('decrement, default step', function(done){
instance.decrement('title').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_user` SET `title`=title-1");
assert.equal(data, 1)
done();
})
})
it('find', function(done){
instance.where({id: 100}).find().then(function(data){
assert.equal(instance.getLastSql(), "SELECT * FROM `think_user` WHERE ( `id` = 100 )");
assert.deepEqual(data, { id: 7565, title: 'title1', cate_id: 1, cate_no: 0 })
done();
})
})
it('select', function(done){
instance.where({id: 100}).limit(1).select().then(function(data){
assert.equal(instance.getLastSql(), "SELECT * FROM `think_user` WHERE ( `id` = 100 ) LIMIT 1");
assert.deepEqual(data, [{ id: 7565, title: 'title1', cate_id: 1, cate_no: 0 }])
done();
})
})
it('select add', function(done){
instance.selectAdd({
table: 'think_tag',
where: {name: 'test'}
}).then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "INSERT INTO `think_user` (`wid`,`title`,`cate_id`,`cate_no`) SELECT * FROM `think_tag` WHERE ( `name` = 'test' )")
done();
})
})
it('select add, instance', function(done){
var instance1 = new Base('tag', think.config('db'));
instance1.where({name: 'test'});
instance.selectAdd(instance1).then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "INSERT INTO `think_user` (`wid`,`title`,`cate_id`,`cate_no`) SELECT * FROM `think_tag` WHERE ( `name` = 'test' )")
done();
})
})
it('count select', function(done){
instance.where({name: 'test'}).page(3).countSelect().then(function(data){
assert.deepEqual(data, {"count":399,"totalPages":40,"currentPage":3,"numsPerPage":10,"data":[{"id":7565,"title":"title1","cate_id":1,"cate_no":0},{"id":7564,"title":"title2","cate_id":2,"cate_no":977},{"id":7563,"title":"title3","cate_id":7,"cate_no":281},{"id":7562,"title":"title4","cate_id":6,"cate_no":242},{"id":7561,"title":"title5","cate_id":3,"cate_no":896},{"id":7560,"title":"title6","cate_id":3,"cate_no":897},{"id":7559,"title":"title7","cate_id":3,"cate_no":898},{"id":7558,"title":"title8","cate_id":17,"cate_no":151},{"id":7557,"title":"title9","cate_id":17,"cate_no":152}]})
done();
})
})
it('count select, pageFlag: true', function(done){
instance.where({name: 'test'}).page(3).countSelect(true).then(function(data){
assert.deepEqual(data, {"count":399,"totalPages":40,"currentPage":3,"numsPerPage":10,"data":[{"id":7565,"title":"title1","cate_id":1,"cate_no":0},{"id":7564,"title":"title2","cate_id":2,"cate_no":977},{"id":7563,"title":"title3","cate_id":7,"cate_no":281},{"id":7562,"title":"title4","cate_id":6,"cate_no":242},{"id":7561,"title":"title5","cate_id":3,"cate_no":896},{"id":7560,"title":"title6","cate_id":3,"cate_no":897},{"id":7559,"title":"title7","cate_id":3,"cate_no":898},{"id":7558,"title":"title8","cate_id":17,"cate_no":151},{"id":7557,"title":"title9","cate_id":17,"cate_no":152}]})
done();
})
})
it('count select, with count', function(done){
instance.where({name: 'test'}).page(3).countSelect(399).then(function(data){
assert.deepEqual(data, {"count":399,"totalPages":40,"currentPage":3,"numsPerPage":10,"data":[{"id":7565,"title":"title1","cate_id":1,"cate_no":0},{"id":7564,"title":"title2","cate_id":2,"cate_no":977},{"id":7563,"title":"title3","cate_id":7,"cate_no":281},{"id":7562,"title":"title4","cate_id":6,"cate_no":242},{"id":7561,"title":"title5","cate_id":3,"cate_no":896},{"id":7560,"title":"title6","cate_id":3,"cate_no":897},{"id":7559,"title":"title7","cate_id":3,"cate_no":898},{"id":7558,"title":"title8","cate_id":17,"cate_no":151},{"id":7557,"title":"title9","cate_id":17,"cate_no":152}]})
done();
})
})
it('count select, with count, beyond pages', function(done){
instance.where({name: 'test'}).page(300).countSelect(true).then(function(data){
assert.deepEqual(data, {"count":399,"totalPages":40,"currentPage":1,"numsPerPage":10,"data":[{"id":7565,"title":"title1","cate_id":1,"cate_no":0},{"id":7564,"title":"title2","cate_id":2,"cate_no":977},{"id":7563,"title":"title3","cate_id":7,"cate_no":281},{"id":7562,"title":"title4","cate_id":6,"cate_no":242},{"id":7561,"title":"title5","cate_id":3,"cate_no":896},{"id":7560,"title":"title6","cate_id":3,"cate_no":897},{"id":7559,"title":"title7","cate_id":3,"cate_no":898},{"id":7558,"title":"title8","cate_id":17,"cate_no":151},{"id":7557,"title":"title9","cate_id":17,"cate_no":152}]})
done();
})
})
it('count select, with count, beyond pages', function(done){
instance.where({name: 'test'}).page(300).countSelect(false).then(function(data){
assert.deepEqual(data, {"count":399,"totalPages":40,"currentPage":40,"numsPerPage":10,"data":[{"id":7565,"title":"title1","cate_id":1,"cate_no":0},{"id":7564,"title":"title2","cate_id":2,"cate_no":977},{"id":7563,"title":"title3","cate_id":7,"cate_no":281},{"id":7562,"title":"title4","cate_id":6,"cate_no":242},{"id":7561,"title":"title5","cate_id":3,"cate_no":896},{"id":7560,"title":"title6","cate_id":3,"cate_no":897},{"id":7559,"title":"title7","cate_id":3,"cate_no":898},{"id":7558,"title":"title8","cate_id":17,"cate_no":151},{"id":7557,"title":"title9","cate_id":17,"cate_no":152}]})
done();
})
})
it('get field', function(done){
instance.where({name: 'welefen'}).getField('title').then(function(data){
assert.deepEqual(data, [ 'title1', 'title2' ]);
done();
})
})
it('get field, with limit', function(done){
instance.where({name: 'welefen'}).getField('title', 1).then(function(data){
assert.deepEqual(data, [ 'title1' ]);
done();
})
})
it('get field, with true', function(done){
instance.where({name: 'welefen'}).getField('title', true).then(function(data){
assert.deepEqual(data, 'title1');
done();
})
})
it('get field, with mutil', function(done){
instance.where({name: 'welefen'}).getField('title,cate_no', true).then(function(data){
assert.deepEqual(data, { title: 'title1', cate_no: 1000 });
done();
})
})
it('get field, with mutil 1', function(done){
instance.where({name: 'welefen'}).getField('title,cate_no', 3).then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT `title`,`cate_no` FROM `think_user` WHERE ( `name` = 'welefen' ) LIMIT 3");
assert.deepEqual(data, { title: [ 'title1', 'title2', 'title3' ], cate_no: [ 1000, 1001, 1002 ] });
done();
})
})
it('count', function(done){
instance.count().then(function(data){
assert.equal(data, 40000);
done();
})
})
it('sum', function(done){
instance.sum().then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT SUM(id) AS think_sum FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('sum, with field', function(done){
instance.sum('id').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT SUM(id) AS think_sum FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('min', function(done){
instance.min().then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT MIN(id) AS think_min FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('min, with field', function(done){
instance.min('id').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT MIN(id) AS think_min FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('max', function(done){
instance.max().then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT MAX(id) AS think_max FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('max, with field', function(done){
instance.max('id').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT MAX(id) AS think_max FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('avg', function(done){
instance.avg().then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT AVG(id) AS think_avg FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('avg, with field', function(done){
instance.avg('id').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT AVG(id) AS think_avg FROM `think_user` LIMIT 1");
assert.equal(data, 1000);
done();
})
})
it('query', function(done){
instance.query('SELECT * FROM __TABLE__ ').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT * FROM `think_user` ")
done();
})
})
it('query, tag', function(done){
instance.query('SELECT * FROM __TAG__ ').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "SELECT * FROM `think_tag` ")
done();
})
})
it('execute, tag', function(done){
instance.execute('UPDATE __TAG__ set name=1 where name=2').then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, "UPDATE `think_tag` set name=1 where name=2")
done();
})
})
it('startTrans', function(done){
instance.startTrans().then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, 'START TRANSACTION');
done();
})
})
it('commit', function(done){
instance.startTrans().then(function(){
return instance.commit();
}).then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, 'COMMIT');
done();
})
})
it('rollback', function(done){
instance.startTrans().then(function(){
return instance.rollback();
}).then(function(data){
var sql = instance.getLastSql();
assert.equal(sql, 'ROLLBACK');
done();
})
})
it('transaction, commit', function(done){
instance.transaction(function(){
return instance.add({
name: 'welefen',
title: 'wwww'
})
}).then(function(){
var sql = instance.getLastSql();
assert.equal(sql, 'COMMIT');
done();
})
})
it('transaction, rollback', function(done){
instance.transaction(function(){
return Promise.reject(new Error('error'))
}).then(function(){
var sql = instance.getLastSql();
assert.equal(sql, 'ROLLBACK');
done();
})
})
after(function(){
muk.restore();
})
})