mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-18 14:26:56 +00:00
485 lines
13 KiB
JavaScript
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();
|
|
})
|
|
})
|
|
}) |