mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-25 14:42:47 +00:00
351 lines
14 KiB
JavaScript
351 lines
14 KiB
JavaScript
var should = require('should');
|
|
var assert = require('assert');
|
|
var muk = require('muk');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
|
|
global.APP_PATH = path.normalize(__dirname + '/../../../App');
|
|
global.RESOURCE_PATH = path.normalize(__dirname + '/../../../www')
|
|
process.execArgv.push('--no-app');
|
|
require(path.normalize(__dirname + '/../../../../index.js'));
|
|
|
|
var Http = thinkRequire('Http');
|
|
var http = require('http');
|
|
var req = new http.IncomingMessage();
|
|
req.headers = {
|
|
'x-real-ip': '127.0.0.1',
|
|
'x-forwarded-for': '127.0.0.1',
|
|
'host': 'meinv.ueapp.com',
|
|
'x-nginx-proxy': 'true',
|
|
'connection': 'close',
|
|
'cache-control': 'max-age=0',
|
|
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
|
|
'accept-encoding': 'gzip,deflate,sdch',
|
|
'accept-language': 'zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4,nl;q=0.2,zh-TW;q=0.2',
|
|
'cookie': 'Hm_lvt_c4ee723718ec2e065e4cb1fb8d84bea1=1380544681,1381634417,1381637116,1381660395; bdshare_firstime=1398851688467; visit_count=5; thinkjs=qSK6dvvHE1nDqzeMBOnIiw4LlbPdYGMB; Hm_lvt_3a35dfea7bd1bb657c1ecd619a3c6cdd=1404201763,1404205823,1404219513,1404342531; Hm_lpvt_3a35dfea7bd1bb657c1ecd619a3c6cdd=1404357406'
|
|
};
|
|
req.method = 'GET';
|
|
req.httpVersion = '1.1';
|
|
req.url = '/user';
|
|
var res = new http.ServerResponse(req);
|
|
res.write = function(){
|
|
return true;
|
|
}
|
|
var instance = Http(req, res).run();
|
|
|
|
|
|
var RestController;
|
|
var MysqlSocket;
|
|
var MysqlDb;
|
|
|
|
|
|
describe('before', function(){
|
|
it('before', function(done){
|
|
RestController = thinkRequire('RestController');
|
|
MysqlSocket = thinkRequire('MysqlSocket');
|
|
MysqlDb = thinkRequire('MysqlDb')
|
|
|
|
|
|
muk(RestController.prototype, 'success', function(data){
|
|
return data;
|
|
})
|
|
muk(RestController.prototype, 'error', function(data){
|
|
return getPromise(data, true);
|
|
});
|
|
muk(MysqlSocket.prototype, 'query', function(sql){
|
|
if(sql.indexOf('SHOW COLUMNS ') > -1){
|
|
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":""},{"Field":"md5","Type":"varchar(255)","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"width","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"height","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"pic_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"view_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"content","Type":"text","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"date","Type":"int(11)","Null":"NO","Key":"MUL","Default":null,"Extra":""},{"Field":"is_hide","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"0","Extra":""},{"Field":"is_safe","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"1","Extra":""}];
|
|
return getPromise(data);
|
|
}else if (sql.indexOf('SELECT ') > -1) {
|
|
var data = [{"id":7565,"title":"米兰达·可儿干练服装写真大片","cate_id":1,"cate_no":0,"md5":"27e562c50195153d89c52072bd4c8d5a","width":936,"height":1177,"pic_nums":11,"view_nums":1965,"content":"","date":20140526,"is_hide":0,"is_safe":0},{"id":7564,"title":"[Beautyleg]2014.05.21 No.977 Cindy","cate_id":2,"cate_no":977,"md5":"e31b3202f3cefe9944fb0e086064694f","width":1600,"height":2400,"pic_nums":30,"view_nums":1558,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7563,"title":"[DISI第四印象]2014.05.21 NO.281","cate_id":7,"cate_no":281,"md5":"ea455be2cab6813964543662b462a550","width":960,"height":640,"pic_nums":30,"view_nums":2335,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7562,"title":"[PANS写真]2014-05-20 NO.242 小倩 套图","cate_id":6,"cate_no":242,"md5":"de775e0785c379ad853b2a299e4736cd","width":1600,"height":2397,"pic_nums":30,"view_nums":2013,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7561,"title":"[ROSI写真]2014.05.20 NO.896","cate_id":3,"cate_no":896,"md5":"65e4a012a123190184a07d87c21e9dec","width":1600,"height":1067,"pic_nums":30,"view_nums":1425,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7560,"title":"[ROSI写真]2014.05.21 NO.897","cate_id":3,"cate_no":897,"md5":"51477ddac8a1d67d30f83da66e0b9ff5","width":1600,"height":1067,"pic_nums":22,"view_nums":1433,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7559,"title":"[ROSI写真]2014.05.22 NO.898","cate_id":3,"cate_no":898,"md5":"a74d4a187ae126b1446503da309b56c9","width":796,"height":531,"pic_nums":30,"view_nums":1994,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7558,"title":"[ru1mm写真] 2014-05-20 NO.151","cate_id":17,"cate_no":151,"md5":"4818e310b0c983e17ae87414a808879d","width":1200,"height":1800,"pic_nums":30,"view_nums":2035,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7557,"title":"[ru1mm写真] 2014-05-22 NO.152","cate_id":17,"cate_no":152,"md5":"af8b033373b1526bd8a28053f065359f","width":1600,"height":1067,"pic_nums":30,"view_nums":1118,"content":"","date":20140524,"is_hide":0,"is_safe":0}]
|
|
return getPromise(data);
|
|
}else if(sql.indexOf('INSERT INTO ') > -1){
|
|
return getPromise({insertId: 100, affectedRows: 1});
|
|
}else if (sql.indexOf('DELETE ') > -1) {
|
|
return getPromise({affectedRows: 1});
|
|
}else if(sql.indexOf('UPDATE ') > -1){
|
|
return getPromise({affectedRows: 1});
|
|
}else{
|
|
return getPromise([]);
|
|
}
|
|
})
|
|
done();
|
|
})
|
|
})
|
|
|
|
|
|
describe('Restful', function(){
|
|
var httpInstance;
|
|
function getTestPromise(obj){
|
|
C('url_route_rules', [
|
|
[/^(\w+)(?:\/(\d+))?/, 'RESTFUL'],
|
|
]);
|
|
return instance.then(function(http){
|
|
for(var name in obj){
|
|
http[name] = obj[name];
|
|
}
|
|
httpInstance = http;
|
|
return B('CheckRoute', http);
|
|
}).then(function(){
|
|
return thinkRequire('RestController')(httpInstance);
|
|
})
|
|
}
|
|
it('Restful get list success', function(done){
|
|
getTestPromise({
|
|
pathname: 'user',
|
|
method: 'GET'
|
|
}).then(function(instance){
|
|
assert.equal(instance.resource, 'user');
|
|
return instance.getAction();
|
|
}).then(function(data){
|
|
assert.equal(data.length, 9);
|
|
done();
|
|
}).catch(function(err){
|
|
console.log(err.stack);
|
|
})
|
|
})
|
|
it('Restful get list fail', function(done){
|
|
getTestPromise({
|
|
pathname: 'user',
|
|
method: 'GET'
|
|
}).then(function(instance){
|
|
assert.equal(instance.resource, 'user');
|
|
fn = MysqlDb.prototype.query;
|
|
MysqlDb.prototype.query = function(sql){
|
|
return getPromise(new Error('getListError'), true);
|
|
}
|
|
return instance.getAction();
|
|
}).catch(function(err){
|
|
assert.equal(err, 'getListError');
|
|
MysqlDb.prototype.query = fn;
|
|
done();
|
|
})
|
|
})
|
|
it('Restful get item success', function(done){
|
|
getTestPromise({
|
|
pathname: 'user/1111',
|
|
method: 'GET'
|
|
}).then(function(instance){
|
|
assert.equal(instance.resource, 'user');
|
|
assert.equal(instance.id, 1111);
|
|
return instance.getAction();
|
|
}).then(function(data){
|
|
assert.equal(data.id, 7565);
|
|
done();
|
|
}).catch(function(err){
|
|
console.log(err);
|
|
})
|
|
})
|
|
it('Restful get item fail', function(done){
|
|
getTestPromise({
|
|
pathname: 'user/1111',
|
|
method: 'GET'
|
|
}).then(function(instance){
|
|
assert.equal(instance.resource, 'user');
|
|
assert.equal(instance.id, 1111);
|
|
fn = MysqlDb.prototype.query;
|
|
MysqlDb.prototype.query = function(sql){
|
|
return getPromise(new Error('getListError'), true);
|
|
}
|
|
return instance.getAction();
|
|
}).catch(function(err){
|
|
assert.equal(err, 'getListError');
|
|
MysqlDb.prototype.query = fn;
|
|
done();
|
|
})
|
|
})
|
|
var controllerInstance;
|
|
it('Restful post item success', function(done){
|
|
getTestPromise({
|
|
pathname: 'user',
|
|
method: 'POST',
|
|
post: {
|
|
title: 'welefentest'
|
|
}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.deepEqual(httpInstance.post, {title: 'welefentest'})
|
|
return instance.postAction();
|
|
}).then(function(data){
|
|
var sql = controllerInstance.model.getLastSql();
|
|
assert.equal(sql, "INSERT INTO `think_user` (`title`) VALUES('welefentest')");
|
|
//assert.equal(data.id, 7565);
|
|
done();
|
|
}).catch(function(err){
|
|
console.log(err);
|
|
})
|
|
})
|
|
it('Restful post item success 1', function(done){
|
|
getTestPromise({
|
|
pathname: 'user',
|
|
method: 'POST',
|
|
post: {
|
|
title: 'welefentest',
|
|
test: 'xxxx'
|
|
}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.deepEqual(httpInstance.post, {title: 'welefentest', test: 'xxxx'})
|
|
return instance.postAction();
|
|
}).then(function(data){
|
|
var sql = controllerInstance.model.getLastSql();
|
|
assert.equal(sql, "INSERT INTO `think_user` (`title`) VALUES('welefentest')");
|
|
assert.equal(data.id, 100);
|
|
done();
|
|
}).catch(function(err){
|
|
console.log(err);
|
|
})
|
|
})
|
|
it('Restful post data empty', function(done){
|
|
getTestPromise({
|
|
pathname: 'user',
|
|
method: 'POST',
|
|
post: {}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.deepEqual(httpInstance.post, {})
|
|
return instance.postAction();
|
|
}).catch(function(err){
|
|
assert.equal(err, 'data is empty')
|
|
done();
|
|
})
|
|
})
|
|
it('Restful delete action params error', function(done){
|
|
getTestPromise({
|
|
pathname: 'user',
|
|
method: 'DELETE',
|
|
post: {},
|
|
get: {}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.deepEqual(httpInstance.post, {})
|
|
return instance.deleteAction();
|
|
}).catch(function(err){
|
|
assert.equal(err, 'params error')
|
|
done();
|
|
})
|
|
})
|
|
it('Restful delete action', function(done){
|
|
getTestPromise({
|
|
pathname: 'user/1111',
|
|
method: 'DELETE',
|
|
post: {}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.equal(instance.id, 1111);
|
|
assert.deepEqual(httpInstance.post, {})
|
|
return instance.deleteAction();
|
|
}).then(function(data){
|
|
var sql = controllerInstance.model.getLastSql();
|
|
assert.equal(sql, "DELETE FROM `think_user` WHERE ( `id` = 1111 )");
|
|
assert.deepEqual(data, {affectedRows: 1})
|
|
done();
|
|
}).catch(function(err){
|
|
console.log(err)
|
|
done();
|
|
})
|
|
})
|
|
it('Restful delete error', function(done){
|
|
getTestPromise({
|
|
pathname: 'user/1111',
|
|
method: 'DELETE'
|
|
}).then(function(instance){
|
|
assert.equal(instance.resource, 'user');
|
|
assert.equal(instance.id, 1111);
|
|
fn = MysqlDb.prototype.execute;
|
|
MysqlDb.prototype.execute = function(sql){
|
|
return getPromise(new Error('getListError'), true);
|
|
}
|
|
return instance.deleteAction();
|
|
}).catch(function(err){
|
|
assert.equal(err, 'getListError');
|
|
MysqlDb.prototype.execute = fn;
|
|
done();
|
|
})
|
|
})
|
|
it('Restful put action params error', function(done){
|
|
getTestPromise({
|
|
pathname: 'user',
|
|
method: 'PUT',
|
|
post: {},
|
|
get: {}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.deepEqual(httpInstance.post, {})
|
|
return instance.putAction();
|
|
}).catch(function(err){
|
|
assert.equal(err, 'params error')
|
|
done();
|
|
})
|
|
})
|
|
it('Restful put action data empty', function(done){
|
|
getTestPromise({
|
|
pathname: 'user/1111',
|
|
method: 'PUT',
|
|
post: {},
|
|
get: {}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.equal(instance.id, 1111);
|
|
assert.deepEqual(httpInstance.post, {})
|
|
return instance.putAction();
|
|
}).catch(function(err){
|
|
assert.equal(err, 'data is empty')
|
|
done();
|
|
})
|
|
})
|
|
it('Restful put action', function(done){
|
|
getTestPromise({
|
|
pathname: 'user/1111',
|
|
method: 'PUT',
|
|
post: {title: 'welefen'},
|
|
get: {}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.equal(instance.id, 1111);
|
|
assert.deepEqual(httpInstance.post, {title: 'welefen'})
|
|
return instance.putAction();
|
|
}).then(function(data){
|
|
var sql = controllerInstance.model.getLastSql();
|
|
assert.equal(sql, "UPDATE `think_user` SET `title`='welefen' WHERE ( `id` = 1111 )");
|
|
assert.deepEqual(data, {affectedRows: 1})
|
|
done();
|
|
})
|
|
})
|
|
it('Restful xxxx method', function(done){
|
|
getTestPromise({
|
|
pathname: 'user/1111',
|
|
method: 'XXXX',
|
|
post: {title: 'welefen'},
|
|
get: {}
|
|
}).then(function(instance){
|
|
controllerInstance = instance;
|
|
assert.equal(instance.resource, 'user');
|
|
assert.equal(instance.id, 1111);
|
|
assert.deepEqual(httpInstance.post, {title: 'welefen'})
|
|
return instance.__call('xxxx');
|
|
}).catch(function(err){
|
|
assert.equal(err, "action `xxxx` is not allowed");
|
|
done();
|
|
})
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
describe('after', function(){
|
|
it('after', function(){
|
|
C('url_route_rules', []);
|
|
muk.restore();
|
|
})
|
|
}) |