From 5ac9ab1a7a00d7ecfeb39abce1c1e92de3709b12 Mon Sep 17 00:00:00 2001 From: rcatoio Date: Fri, 21 Oct 2016 09:20:57 +0200 Subject: [PATCH] add a way to download other format reports --- lib/handlers.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/lib/handlers.js b/lib/handlers.js index 4492207..2116ab7 100644 --- a/lib/handlers.js +++ b/lib/handlers.js @@ -6,6 +6,7 @@ var path = require('path'), fs = require('fs'), core = require('./core'), istanbul = require('istanbul'), + FileWriter = istanbul.FileWriter, bodyParser = require('body-parser'), ASSETS_DIR = istanbul.assetsDir, existsSync = fs.existsSync || path.existsSync, @@ -114,6 +115,51 @@ function createHandler(opts) { writer.done(); }); + app.get('/downloadFormat', function (req, res) { + var + availlableFormat = ['json', 'cobertura', 'clover', 'json-summary', 'lcovonly'], + writer = new FileWriter({sync: true}), + coverageObject = core.getCoverageObject() || {}, + collector = new Collector(), + baseDir = opts.tmpDir || process.cwd(), + format = req.query.format || 'json', + file, + report; + if(availlableFormat.indexOf(format) === -1){ + res.statusCode = '403'; + return res.send(); + } + report = Report.create(format, + { + writer: writer, + dir: baseDir + }); + + utils.removeDerivedInfo(coverageObject); + collector.add(coverageObject); + + res.statusCode = 200; + res.setHeader('Content-type', 'application/octet-stream'); + report.writeReport(collector); + + if(report.file){ + file = report.file; + } else if (report.opts && report.opts.file){ + file = report.opts.file; + } + if(!file){ + res.statusCode = '403'; + return res.send(); + } + var filePath = path.join(baseDir, file); + var stat = fs.statSync(filePath); + res.setHeader('Content-Disposition', 'attachment; filename='+file); + res.setHeader('Content-Length', stat.size); + fs.createReadStream(filePath).pipe(res).on('finish', function(){ + fs.unlink(filePath); + }); + }); + //merge client coverage posted from browser app.post('/client', function (req, res) { var body = req.body;