2016-01-02 15:11:43 +08:00

485 lines
13 KiB
JavaScript

'use strict';
var assert = require('assert');
var path = require('path');
var fs = require('fs');
var muk = require('muk');
var Index = require('../../../lib/index.js');
var instance = new Index();
instance.load();
think.APP_PATH = path.dirname(__dirname) + think.sep + 'testApp';
var Base = think.safeRequire(path.resolve(__dirname, '../../../lib/adapter/db/base.js'));
describe('adapter/db/base.js', function(){
it('get instance', function(){
var instance = new Base();
assert.equal(instance.sql, '');
assert.equal(instance.lastInsertId, 0);
assert.equal(instance._socket, null);
assert.equal(instance.transTimes, 0);
})
it('socket is function', function(){
var instance = new Base();
var socket = instance.socket();
assert.equal(think.isFunction(instance.socket), true);
assert.equal(socket, undefined);
})
it('add data', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.add({
name: 'welefen',
title: 'suredy',
key: 1111
}, {
table: 'think_user',
}).then(function(data){
assert.equal(data, "INSERT INTO think_user (name,title,key) VALUES ('welefen','suredy',1111)")
done();
})
})
it('replace data', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.add({
name: 'welefen',
title: 'suredy',
key: 1111
}, {
table: 'think_user',
}, true).then(function(data){
assert.equal(data, "REPLACE INTO think_user (name,title,key) VALUES ('welefen','suredy',1111)")
done();
})
})
it('replace data, ignore some data', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.add({
name: 'welefen',
title: 'suredy',
key: 1111,
test: ['suredy']
}, {
table: 'think_user',
}, true).then(function(data){
assert.equal(data, "REPLACE INTO think_user (name,title,key) VALUES ('welefen','suredy',1111)")
done();
})
})
it('add many', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.addMany([{
name: 'welefen',
title: 'suredy',
key: 1111
},{
name: 'welefen2',
title: 'suredy2',
key: 222
}], {
table: 'think_user',
}).then(function(data){
assert.equal(data, "INSERT INTO think_user(name,title,key) VALUES ('welefen','suredy',1111),('welefen2','suredy2',222)")
done();
})
})
it('add many, replace', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.addMany([{
name: 'welefen',
title: 'suredy',
key: 1111
},{
name: 'welefen2',
title: 'suredy2',
key: 222
}], {
table: 'think_user',
}, true).then(function(data){
assert.equal(data, "REPLACE INTO think_user(name,title,key) VALUES ('welefen','suredy',1111),('welefen2','suredy2',222)")
done();
})
})
it('add many, ignore some data', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.addMany([{
name: 'welefen',
title: 'suredy',
key: 1111
},{
name: 'welefen2',
title: 'suredy2',
key: 222,
test: ['suredy']
}], {
table: 'think_user',
}, true).then(function(data){
assert.equal(data, "REPLACE INTO think_user(name,title,key) VALUES ('welefen','suredy',1111),('welefen2','suredy2',222)")
done();
})
})
it('select add', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.selectAdd('name,title', 'suredy', {
table: 'think_other',
where: {name: 'welefen'},
limit: 30
}).then(function(data){
assert.equal(data, "INSERT INTO suredy (name,title) SELECT * FROM think_other WHERE ( name = 'welefen' ) LIMIT 30")
done();
})
})
it('select add, fields is array', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.selectAdd(['name', 'title'], 'suredy', {
table: 'think_other',
where: {name: 'welefen'},
limit: 30
}).then(function(data){
assert.equal(data, "INSERT INTO suredy (name,title) SELECT * FROM think_other WHERE ( name = 'welefen' ) LIMIT 30")
done();
})
})
it('select add, options is empty', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.selectAdd(['name', 'title'], 'suredy').then(function(data){
assert.equal(data, "INSERT INTO suredy (name,title) SELECT * FROM ")
done();
})
})
it('delete', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.delete({
table: 'think_user',
where: {name: 'welefen'},
comment: 'welefen'
}).then(function(data){
assert.equal(data, "DELETE FROM think_user WHERE ( name = 'welefen' ) /*welefen*/")
done();
})
})
it('update', function(done){
var instance = new Base();
instance.execute = function(sql){
return Promise.resolve(sql);
}
instance.update({
name: 'welefen',
title: 'title'
},{
table: 'think_user',
where: {name: 'welefen'},
comment: 'welefen'
}).then(function(data){
assert.equal(data, "UPDATE think_user SET name='welefen',title='title' WHERE ( name = 'welefen' ) /*welefen*/")
done();
})
})
it('select', function(done){
var instance = new Base();
instance.query = function(sql){
return Promise.resolve(sql);
}
instance.select({
table: 'think_user',
where: {name: 'welefen'},
comment: 'welefen'
}).then(function(data){
assert.equal(data, "SELECT * FROM think_user WHERE ( name = 'welefen' ) /*welefen*/")
done();
})
})
it('select, cache', function(done){
var instance = new Base({
cache: {
on: true
}
});
instance.query = function(sql){
return Promise.resolve(sql);
}
muk(think, 'cache', function(key, callback){
assert.equal(key, '2b61c1d39430dede45ee9f514bdaa2a9')
return callback && callback();
})
instance.select({
table: 'think_user',
where: {name: 'welefen'},
comment: 'welefen',
cache: {
timeout: 3600
}
}).then(function(data){
assert.equal(data, "SELECT * FROM think_user WHERE ( name = 'welefen' ) /*welefen*/");
muk.restore();
done();
})
})
it('select, cache, with key', function(done){
var instance = new Base({
cache: {
on: true
}
});
instance.query = function(sql){
return Promise.resolve(sql);
}
muk(think, 'cache', function(key, callback){
assert.equal(key, 'test')
return callback && callback();
})
instance.select({
table: 'think_user',
where: {name: 'welefen'},
comment: 'welefen',
cache: {
timeout: 3600,
key: 'test'
}
}).then(function(data){
assert.equal(data, "SELECT * FROM think_user WHERE ( name = 'welefen' ) /*welefen*/");
muk.restore();
done();
})
})
it('select, string', function(done){
var instance = new Base();
instance.query = function(sql){
return Promise.resolve(sql);
}
instance.select("SELECT * FROM think_user WHERE ( name = 'welefen' ) /*welefen*/").then(function(data){
assert.equal(data, "SELECT * FROM think_user WHERE ( name = 'welefen' ) /*welefen*/")
done();
})
})
it('escapeString, empty', function(){
var instance = new Base();
var data = instance.escapeString();
assert.equal(data, '')
})
it('escapeString, \\n', function(){
var instance = new Base();
var data = instance.escapeString('\n');
assert.equal(data, '\\n')
})
it('escapeString, \\0', function(){
var instance = new Base();
var data = instance.escapeString('\0');
assert.equal(data, '\\0')
})
it('escapeString, \\r', function(){
var instance = new Base();
var data = instance.escapeString('\r');
assert.equal(data, '\\r')
})
it('escapeString, \\b', function(){
var instance = new Base();
var data = instance.escapeString('\b');
assert.equal(data, '\\b')
})
it('escapeString, \\t', function(){
var instance = new Base();
var data = instance.escapeString('\t');
assert.equal(data, '\\t')
})
it('escapeString, \\Z', function(){
var instance = new Base();
var data = instance.escapeString('\u001a');
assert.equal(data, '\\Z')
})
it('escapeString, \\"', function(){
var instance = new Base();
var data = instance.escapeString('"');
assert.equal(data, '\\"')
})
it('query', function(done){
var instance = new Base();
instance.socket = function(){
return {
query: function(sql){
return Promise.resolve(sql);
}
}
}
instance.query('SELECT * FROM think_user').then(function(data){
assert.equal(data, 'SELECT * FROM think_user');
assert.equal(instance.getLastSql(), 'SELECT * FROM think_user')
done();
})
})
it('execute', function(done){
var instance = new Base();
instance.socket = function(){
return {
execute: function(sql){
return Promise.resolve({
insertId: 1000,
affectedRows: 10
});
}
}
}
instance.execute('DELETE FROM think_user').then(function(data){
assert.equal(data, 10);
assert.equal(instance.getLastInsertId(), 1000)
done();
})
})
it('execute, empty return', function(done){
var instance = new Base();
instance.socket = function(){
return {
execute: function(sql){
return Promise.resolve({
});
}
}
}
instance.execute('DELETE FROM think_user').then(function(data){
assert.equal(data, 0);
assert.equal(instance.getLastInsertId(), 0)
done();
})
})
it('bufferToString', function(){
var instance = new Base({buffer_tostring: true});
var data = instance.bufferToString([{name: new Buffer('welefen'), title: 'sss'}]);
assert.deepEqual(data, [{name: 'welefen', title: 'sss'}])
})
it('close', function(){
var instance = new Base({buffer_tostring: true});
var flag = false;
instance._socket = {
close: function(){
flag = true;
}
}
instance.close();
assert.equal(flag, true);
})
it('close', function(){
var instance = new Base({buffer_tostring: true});
var flag = false;
instance.close();
assert.equal(flag, false);
})
it('startTrans', function(done){
var instance = new Base();
var flag = false;
instance.execute = function(sql){
assert.equal(sql, 'START TRANSACTION');
flag = true;
return Promise.resolve();
}
instance.startTrans().then(function(data){
assert.equal(flag, true);
instance.transTimes = 1;
done();
})
})
it('startTrans, is started', function(done){
var instance = new Base();
instance.transTimes = 1;
var flag = false;
instance.execute = function(sql){
assert.equal(sql, 'START TRANSACTION');
flag = true;
return Promise.resolve();
}
instance.startTrans().then(function(data){
assert.equal(flag, false);
instance.transTimes = 1;
done();
})
})
it('commit, not start', function(done){
var instance = new Base();
var flag = false;
instance.execute = function(sql){
assert.equal(sql, 'ROLLBACK');
flag = true;
return Promise.resolve();
}
instance.commit().then(function(data){
assert.equal(flag, false);
instance.transTimes = 0;
done();
})
})
it('commit', function(done){
var instance = new Base();
instance.transTimes = 1;
var flag = false;
instance.execute = function(sql){
assert.equal(sql, 'COMMIT');
flag = true;
return Promise.resolve();
}
instance.commit().then(function(data){
assert.equal(flag, true);
instance.transTimes = 0;
done();
})
})
it('rollback, not start', function(done){
var instance = new Base();
var flag = false;
instance.execute = function(sql){
assert.equal(sql, 'ROLLBACK');
flag = true;
return Promise.resolve();
}
instance.rollback().then(function(data){
assert.equal(flag, false);
instance.transTimes = 0;
done();
})
})
it('rollback', function(done){
var instance = new Base();
instance.transTimes = 1;
var flag = false;
instance.execute = function(sql){
assert.equal(sql, 'ROLLBACK');
flag = true;
return Promise.resolve();
}
instance.rollback().then(function(data){
assert.equal(flag, true);
instance.transTimes = 0;
done();
})
})
})