thinkjs/test/core/app.js
2015-11-10 11:54:25 +08:00

339 lines
9.6 KiB
JavaScript

var assert = require('assert');
var path = require('path');
var fs = require('fs');
var muk = require('muk');
var _http = require('../_http.js');
var thinkjs = require('../../lib/index.js');
var tjs = new thinkjs();
tjs.load();
var App = require('../../lib/core/app.js');
describe('core/app.js', function(){
it('init', function(){
var instance = new App({});
assert.equal(think.isFunction(instance.run), true)
})
it('execLogic, cls not exist', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
muk(think, 'require', function(){
return null;
})
instance.execLogic().then(function(data){
assert.equal(data, undefined);
muk.restore();
done();
})
})
it('execLogic, cls & action exist', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
muk(think, 'require', function(){
return think.Class({
listAction: function(){
return 111;
}
});
})
instance.execLogic().then(function(data){
assert.equal(data, 111)
muk.restore();
done();
})
})
it('execLogic, cls has __call', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
muk(think, 'require', function(){
return think.Class({
__call: function(){
return 222;
}
});
})
instance.execLogic().then(function(data){
assert.equal(data, 222)
muk.restore();
done();
})
})
it('execLogic, cls has __before', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
muk(think, 'require', function(){
return think.Class({
__before: function(){
return Promise.resolve(333);
}
});
})
instance.execLogic().then(function(data){
assert.equal(data, 333)
muk.restore();
done();
})
})
it('execLogic, cls no method', function(){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
muk(think, 'require', function(){
return think.Class();
})
instance.execLogic();
muk.restore();
})
it('execController, controller exist', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
muk(think, 'require', function(){
return think.Class({});
})
instance.execAction = function(ins){
assert.equal(think.isObject(ins), true)
return Promise.resolve();
}
instance.execController().then(function(){
muk.restore();
done();
})
})
it('execController, controller not exist', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
muk(think, 'require', function(){
return null;
})
muk(think, 'statusAction', function(status, http){
assert.equal(status, 404);
assert.equal(think.isError(http.error), true);
return Promise.resolve();
})
instance.execController().then(function(){
muk.restore();
done();
})
})
it('execAction, _isRest', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list',method: 'get'});
var controller = {
_isRest: true,
getAction: function(){}
}
instance.action = function(controller, action){
assert.equal(action, 'get');
return Promise.resolve();
}
instance.execAction(controller).then(function(){
muk.restore();
done();
})
})
it('execAction, _isRest, _method', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list',method: 'get', _get: {_method: 'user_add'}});
var controller = {
_isRest: true,
_method: '_method',
get: function(){
return 'user_add'
},
userAddAction: function(){}
}
instance.action = function(controller, action){
assert.equal(action, 'userAdd');
return Promise.resolve();
}
instance.execAction(controller).then(function(){
muk.restore();
done();
})
})
it('execAction, action exist', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list'});
var controller = {
listAction: function(){}
}
instance.action = function(controller, action){
assert.equal(action, 'list');
return Promise.resolve();
}
instance.execAction(controller).then(function(){
muk.restore();
done();
})
})
it('execAction, action exist 1', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add'});
var controller = {
listAddAction: function(){}
}
instance.action = function(controller, action){
assert.equal(action, 'listAdd');
return Promise.resolve();
}
instance.execAction(controller).then(function(){
muk.restore();
done();
})
})
it('execAction, __call exist', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add1'});
var controller = {
__call: function(){}
}
instance.action = function(controller, action){
assert.equal(action, '__call');
return Promise.resolve();
}
instance.execAction(controller).then(function(){
muk.restore();
done();
})
})
it('execAction, action not exist', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add2'});
var controller = {
}
muk(think, 'statusAction', function(status, http){
assert.equal(status, 404);
assert.equal(think.isError(http.error), true);
return Promise.resolve();
})
instance.execAction(controller).then(function(){
muk.restore();
done();
})
})
it('exec', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add3'});
instance.execLogic = function(){
return Promise.resolve();
}
instance.hook = function(){}
instance.execController = function(){
return Promise.resolve();
}
instance.exec().then(function(){
muk.restore();
done();
})
})
it('exec, is end', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add4'});
instance.execLogic = function(){
return Promise.resolve();
}
instance.http._isEnd = true;
instance.execController = function(){
return Promise.resolve();
}
instance.hook = function(){}
instance.exec().catch(function(err){
assert.equal(think.isPrevent(err), true)
muk.restore();
done();
})
})
it('run, service off', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add5', header: function(){}});
think.config('service_on', false);
muk(think, 'statusAction', function(status, http, log){
assert.equal(status, 503);
assert.equal(log, undefined);
return Promise.resolve();
})
instance.run().then(function(){
think.config('service_on', true);
muk.restore();
done();
})
})
it('run, proxy on', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add6', hostname: '127.0.0.1', header: function(){}});
think.config('proxy_on', true);
muk(think, 'statusAction', function(status, http, log){
assert.equal(status, 403);
assert.equal(log, undefined);
return Promise.resolve();
})
instance.run().then(function(){
think.config('proxy_on', false);
muk.restore();
done();
})
})
it('run, domain error', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add7', hostname: '127.0.0.1', header: function(){}});
var flag = false;
muk(think, 'statusAction', function(status, http, log){
assert.equal(status, 500);
assert.equal(log, true);
flag = true;
return Promise.resolve();
})
var domain = require('domain');
muk(domain, 'create', function(){
return {
on: function(type, callback){
callback && callback(new Error());
},
run: function(){
}
}
})
instance.run();
muk.restore();
assert.equal(flag, true)
done();
})
it('run, normal', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add8', hostname: '127.0.0.1', header: function(){}});
var domain = require('domain');
var flag = false;
instance.exec = function(){
flag = true;
}
muk(domain, 'create', function(){
return {
on: function(type, callback){
//callback && callback(new Error());
},
run: function(callback){
callback && callback();
}
}
})
instance.run();
muk.restore();
assert.equal(flag, true)
done();
})
it('run, error', function(done){
var instance = new App({module: 'home', controller: 'test', action: 'list_add9', hostname: '127.0.0.1', header: function(){}});
var domain = require('domain');
var flag = false;
muk(think, 'statusAction', function(status, http, log){
assert.equal(status, 500);
assert.equal(log, true);
flag = true;
return Promise.resolve();
})
instance.exec = function(){
throw new Error();
}
muk(domain, 'create', function(){
return {
on: function(type, callback){
//callback && callback(new Error());
},
run: function(callback){
callback && callback();
}
}
})
instance.run();
muk.restore();
assert.equal(flag, true)
done();
})
})