mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-04-24 03:35:59 +08:00
test coverage report
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
||||
/node_modules
|
||||
/coverage-reporter.html
|
||||
|
||||
/.vagrant
|
||||
/package.box
|
||||
|
||||
9
.travis.yml
Normal file
9
.travis.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
language: node_js
|
||||
|
||||
node_js:
|
||||
- "0.11"
|
||||
- "0.10"
|
||||
|
||||
services:
|
||||
- mongodb
|
||||
- redis-server
|
||||
@@ -16,8 +16,8 @@ RootPanel 是一个高度插件化的,基于 Linux 的虚拟服务销售平台
|
||||
|
||||
## 安装和使用
|
||||
|
||||
* 稳定版本:`git clone -b stable https://github.com/jysperm/RootPanel.git`
|
||||
* 开发版本:`git clone https://github.com/jysperm/RootPanel.git`
|
||||
* 稳定版本:`git clone -b stable https://github.com/jysperm/RootPanel.git` [](https://travis-ci.org/jysperm/RootPanel)
|
||||
* 开发版本:`git clone https://github.com/jysperm/RootPanel.git` [](https://travis-ci.org/jysperm/RootPanel)
|
||||
* Vagrant: <https://vagrantcloud.com/jysperm/boxes/rootpanel>
|
||||
|
||||
详细安装说明:[INSTALL.md](https://github.com/jysperm/RootPanel/blob/master/INSTALL.md)
|
||||
|
||||
77
app.coffee
77
app.coffee
@@ -7,17 +7,30 @@ app.libs =
|
||||
async: require 'async'
|
||||
bodyParser: require 'body-parser'
|
||||
cookieParser: require 'cookie-parser'
|
||||
crypto: require 'crypto'
|
||||
depd: require 'depd'
|
||||
express: require 'express'
|
||||
fs: require 'fs'
|
||||
harp: require 'harp'
|
||||
middlewareInjector: require 'middleware-injector'
|
||||
mongoose: require 'mongoose'
|
||||
morgan: require 'morgan'
|
||||
nodemailer: require 'nodemailer'
|
||||
path: require 'path'
|
||||
redis: require 'redis'
|
||||
redisStore: require 'connect-redis'
|
||||
expressSession: require 'express-session'
|
||||
|
||||
{cookieParser, bodyParser, depd, express, fs, nodemailer, path} = exports.libs
|
||||
{cookieParser, crypto, bodyParser, depd, express, fs, harp, middlewareInjector, mongoose} = exports.libs
|
||||
{morgan, nodemailer, path, redis, redisStore, expressSession} = exports.libs
|
||||
|
||||
RedisStore = redisStore expressSession
|
||||
|
||||
app.logger = do ->
|
||||
unless process.env.NODE_ENV == 'test'
|
||||
return console.log
|
||||
|
||||
return ->
|
||||
|
||||
app.package = require './package'
|
||||
app.deprecate = depd 'rootpanel'
|
||||
@@ -26,9 +39,14 @@ do ->
|
||||
config_path = path.join __dirname, 'config.coffee'
|
||||
|
||||
unless fs.existsSync config_path
|
||||
default_config_path = path.join __dirname, './sample/core.config.coffee'
|
||||
fs.writeFileSync config_file_path, fs.readFileSync default_config_path
|
||||
app.deprecate 'config.coffee not found, copy sample config to ./config.coffee'
|
||||
unless process.env.TRAVIS == 'true'
|
||||
app.deprecate 'config.coffee not found, copy sample config to ./config.coffee'
|
||||
|
||||
default_config = 'core'
|
||||
else
|
||||
default_config = 'travis-ci'
|
||||
|
||||
fs.writeFileSync config_path, fs.readFileSync path.join __dirname, "./sample/#{default_config}.config.coffee"
|
||||
|
||||
fs.chmodSync config_path, 0o750
|
||||
|
||||
@@ -42,6 +60,7 @@ do ->
|
||||
|
||||
unless fs.existsSync session_key_path
|
||||
fs.writeFileSync session_key_path, crypto.randomBytes(48).toString('hex')
|
||||
fs.chmodSync session_key_path, 0o750
|
||||
|
||||
app.config = config
|
||||
app.db = require './core/db'
|
||||
@@ -73,20 +92,20 @@ app.models =
|
||||
SecurityLog: require './core/model/security_log'
|
||||
Ticket: require './core/model/ticket'
|
||||
|
||||
app.use bodyParser.json()
|
||||
app.use morgan 'dev'
|
||||
app.use cookieParser()
|
||||
app.use middlewareInjector
|
||||
app.express.use bodyParser.json()
|
||||
app.express.use morgan 'dev'
|
||||
app.express.use cookieParser()
|
||||
app.express.use middlewareInjector
|
||||
|
||||
app.use session
|
||||
app.express.use expressSession
|
||||
store: new RedisStore
|
||||
client: app.redis
|
||||
|
||||
resave: true
|
||||
saveUninitialized: true
|
||||
resave: false
|
||||
saveUninitialized: false
|
||||
secret: fs.readFileSync(path.join __dirname, 'session.key').toString()
|
||||
|
||||
app.use (req, res, next) ->
|
||||
app.express.use (req, res, next) ->
|
||||
unless req.session.csrf_secret
|
||||
csrf.secret (err, secret) ->
|
||||
req.session.csrf_secret = secret
|
||||
@@ -95,7 +114,7 @@ app.use (req, res, next) ->
|
||||
|
||||
next()
|
||||
|
||||
app.use (req, res, next) ->
|
||||
app.express.use (req, res, next) ->
|
||||
unless req.method == 'GET'
|
||||
unless csrf.verify req.session.csrf_secret, req.body.csrf_token
|
||||
return res.status(403).send
|
||||
@@ -103,7 +122,7 @@ app.use (req, res, next) ->
|
||||
|
||||
next()
|
||||
|
||||
app.use (req, res, next) ->
|
||||
app.express.use (req, res, next) ->
|
||||
req.res = res
|
||||
|
||||
res.language = req.cookies.language ? config.i18n.default_language
|
||||
@@ -130,29 +149,29 @@ app.use (req, res, next) ->
|
||||
|
||||
next()
|
||||
|
||||
app.use app.middleware.accountInfo
|
||||
app.express.use app.middleware.accountInfo
|
||||
|
||||
app.set 'views', path.join(__dirname, 'core/view')
|
||||
app.set 'view engine', 'jade'
|
||||
app.express.set 'views', path.join(__dirname, 'core/view')
|
||||
app.express.set 'view engine', 'jade'
|
||||
|
||||
app.get '/locale/:language?', app.i18n.downloadLocales
|
||||
app.express.get '/locale/:language?', app.i18n.downloadLocales
|
||||
|
||||
app.use '/account', require './core/router/account'
|
||||
app.use '/billing', require './core/router/billing'
|
||||
app.use '/ticket', require './core/router/ticket'
|
||||
app.use '/admin', require './core/router/admin'
|
||||
app.use '/panel', require './core/router/panel'
|
||||
app.express.use '/account', require './core/router/account'
|
||||
app.express.use '/billing', require './core/router/billing'
|
||||
app.express.use '/ticket', require './core/router/ticket'
|
||||
app.express.use '/admin', require './core/router/admin'
|
||||
app.express.use '/panel', require './core/router/panel'
|
||||
|
||||
app.pluggable.initializePlugins()
|
||||
|
||||
app.get '/', (req, res) ->
|
||||
app.express.get '/', (req, res) ->
|
||||
unless res.headerSent
|
||||
res.redirect '/panel/'
|
||||
|
||||
app.use harp.mount './core/static'
|
||||
app.express.use harp.mount './core/static'
|
||||
|
||||
app.billing.run()
|
||||
app.express.listen config.web.listen, ->
|
||||
if fs.existsSync config.web.listen
|
||||
fs.chmodSync config.web.listen, 0o770
|
||||
|
||||
app.listen config.web.listen, ->
|
||||
fs.chmodSync config.web.listen, 0o770
|
||||
console.log "RootPanel start at #{config.web.listen}"
|
||||
app.logger "RootPanel start at #{config.web.listen}"
|
||||
|
||||
4
core/test/app.coffee
Normal file
4
core/test/app.coffee
Normal file
@@ -0,0 +1,4 @@
|
||||
describe 'app', ->
|
||||
it 'should can startup', ->
|
||||
@timeout 20000
|
||||
require '../../app'
|
||||
@@ -16,8 +16,10 @@
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"start": "coffee app.coffee",
|
||||
"test": "./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/support/env core/test plugin/*/test"
|
||||
"start": "./node_modules/.bin/coffee app.coffee",
|
||||
"test": "COV_TEST=true ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/support/env --reporter test/support/reporter-cov-summary.js -- core/test plugin/*/test",
|
||||
"test-only": "./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/support/env -- core/test plugin/*/test",
|
||||
"test-cov-html": "COV_TEST=true ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/support/env --reporter html-cov -- core/test plugin/*/test > coverage-reporter.html"
|
||||
},
|
||||
"bin": {
|
||||
"rp-fix-permissions": "./bin/rp-fix-permissions.coffee",
|
||||
@@ -56,6 +58,6 @@
|
||||
"devDependencies": {
|
||||
"mocha": "^1.21.5",
|
||||
"chai": "^1.9.2",
|
||||
"deepmerge": "^0.2.7"
|
||||
"coffee-coverage": "^0.4.2"
|
||||
}
|
||||
}
|
||||
|
||||
0
plugin/linux/test/.gitkeep
Normal file
0
plugin/linux/test/.gitkeep
Normal file
69
sample/travis-ci.config.coffee
Normal file
69
sample/travis-ci.config.coffee
Normal file
@@ -0,0 +1,69 @@
|
||||
module.exports =
|
||||
web:
|
||||
t_name: 'plugins.rpvhost.site_name'
|
||||
url: 'http://rp.rpvhost.net'
|
||||
listen: 3000
|
||||
google_analytics_id: ''
|
||||
|
||||
account:
|
||||
cookie_time: 30 * 24 * 3600 * 1000
|
||||
|
||||
i18n:
|
||||
available_language: ['zh_CN', 'en']
|
||||
default_language: 'zh_CN'
|
||||
default_timezone: 'Asia/Shanghai'
|
||||
|
||||
plugin:
|
||||
available_extensions: []
|
||||
available_services: []
|
||||
|
||||
billing:
|
||||
currency: 'CNY'
|
||||
|
||||
force_freeze:
|
||||
when_balance_below: 0
|
||||
when_arrears_above: 0
|
||||
|
||||
billing_cycle: 10 * 60 * 1000
|
||||
|
||||
plans:
|
||||
sample:
|
||||
t_name: 'plans.sample.name'
|
||||
t_description: 'plans.sample.name.description'
|
||||
|
||||
billing_by_time:
|
||||
unit: 24 * 3600 * 1000
|
||||
price: 10 / 30
|
||||
|
||||
services: []
|
||||
resources: {}
|
||||
|
||||
test:
|
||||
t_name: 'plans.test.name'
|
||||
t_description: 'plans.test.name.description'
|
||||
|
||||
billing_by_usage:
|
||||
auto_leave: 7 * 24 * 3600 * 1000
|
||||
|
||||
services: []
|
||||
resources: {}
|
||||
|
||||
mongodb:
|
||||
host: 'localhost'
|
||||
name: 'RootPanel'
|
||||
|
||||
redis:
|
||||
host: '127.0.0.1'
|
||||
port: 6379
|
||||
prefix: 'RP'
|
||||
|
||||
email:
|
||||
send_from: 'robot@rpvhost.net'
|
||||
|
||||
account:
|
||||
service: 'Postmark'
|
||||
auth:
|
||||
user: 'postmark-api-token'
|
||||
pass: 'postmark-api-token'
|
||||
|
||||
plugins: {}
|
||||
@@ -1,3 +1,10 @@
|
||||
process.env.NODE_ENV = 'test'
|
||||
|
||||
require("chai").should()
|
||||
|
||||
if process.env.COV_TEST == 'true'
|
||||
require('coffee-coverage').register
|
||||
path: 'relative'
|
||||
basePath: "#{__dirname}/../.."
|
||||
exclude: ['test', 'node_modules', '.git', 'sample', 'core/static']
|
||||
initAll: true
|
||||
|
||||
38
test/support/reporter-cov-summary.js
Normal file
38
test/support/reporter-cov-summary.js
Normal file
@@ -0,0 +1,38 @@
|
||||
var fs = require('fs');
|
||||
var util = require ('util');
|
||||
|
||||
var Spec = require('mocha/lib/reporters/spec');
|
||||
|
||||
exports = module.exports = CovSummary;
|
||||
|
||||
function CovSummary(runner) {
|
||||
Spec.call(this, runner);
|
||||
|
||||
runner.on('end', report);
|
||||
}
|
||||
|
||||
function report() {
|
||||
var cov = global._$jscoverage || {};
|
||||
var files = Object.keys(cov);
|
||||
|
||||
var covered_lines = 0;
|
||||
var total_lines = 0;
|
||||
|
||||
files.forEach(function(file) {
|
||||
cov[file].forEach(function(line) {
|
||||
if(line !== undefined) {
|
||||
total_lines ++;
|
||||
|
||||
if (line !== 0) {
|
||||
covered_lines ++;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var covered = (covered_lines / total_lines * 100).toFixed(1);
|
||||
|
||||
console.log(util.format('Coverage Summary: %s lines of %s lines, %s% covered \n', covered_lines, total_lines, covered));
|
||||
}
|
||||
|
||||
CovSummary.prototype.__proto__ = Spec.prototype;
|
||||
Reference in New Issue
Block a user