From 48cf0cc008f14dc29e78971a6f529d781b23a705 Mon Sep 17 00:00:00 2001 From: Thaddee Tyl Date: Sat, 18 Jan 2014 17:49:52 +0100 Subject: [PATCH] Tests and coverage analysis. --- ass-stubs/cli-test.js | 1 + ass-stubs/server-test.js | 3 ++ package.json | 8 +++ server.js | 30 ++++++++++- test.js | 107 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 ass-stubs/cli-test.js create mode 100644 ass-stubs/server-test.js create mode 100644 test.js diff --git a/ass-stubs/cli-test.js b/ass-stubs/cli-test.js new file mode 100644 index 0000000..7c4e760 --- /dev/null +++ b/ass-stubs/cli-test.js @@ -0,0 +1 @@ +require('ass'); require('../gh-badge.js'); diff --git a/ass-stubs/server-test.js b/ass-stubs/server-test.js new file mode 100644 index 0000000..8cd9c88 --- /dev/null +++ b/ass-stubs/server-test.js @@ -0,0 +1,3 @@ +require('ass'); require('../server.js'); +console.log('done'); +process.on('SIGTERM', function() { process.exit(0); }); diff --git a/package.json b/package.json index 73da11f..bc2fa10 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,14 @@ "es6-promise": "~0.1.1", "camp": "~13.11.9" }, + "devDependencies": { + "ass": "~0.0.4", + "should": "~3.0.0", + "mocha": "~1.14.0" + }, + "scripts": { + "test": "mocha -R spec test.js" + }, "bin": { "badge": "./gh-badge.js" }, "engines": { "node": "0.10.x" } } diff --git a/server.js b/server.js index d663af0..d19feec 100644 --- a/server.js +++ b/server.js @@ -1,5 +1,5 @@ var camp = require('camp').start({ - port: process.env.PORT||+process.argv[2]||80 + port: +process.env.PORT||+process.argv[2]||80 }); var https = require('https'); var http = require('http'); @@ -327,6 +327,34 @@ function(data, match, end, ask) { } }); +// Any badge, old version. +camp.route(/^\/([^\/]+)\/(.+).png$/, +function(data, match, end, ask) { + var subject = match[1]; + var status = match[2]; + var color = data.color; + + // Cache management. + var cacheDuration = (3600*24*1)|0; // 1 day. + ask.res.setHeader('Cache-Control', 'public, max-age=' + cacheDuration); + if (+(new Date(ask.req.headers['if-modified-since'])) >= +serverStartTime) { + ask.res.statusCode = 304; + ask.res.end(); // not modified. + return; + } + ask.res.setHeader('Last-Modified', serverStartTime.toGMTString()); + + // Badge creation. + try { + var badgeData = {text: [subject, status]}; + badgeData.colorscheme = color; + badge(badgeData, makeSend('png', ask.res, end)); + } catch(e) { + badge({text: ['error', 'bad badge'], colorscheme: 'red'}, + makeSend('png', ask.res, end)); + } +}); + // Escapes `t` using the format specified in // function escapeFormat(t) { diff --git a/test.js b/test.js new file mode 100644 index 0000000..a7e5ef2 --- /dev/null +++ b/test.js @@ -0,0 +1,107 @@ +var ass = require('ass').enable(); +var should = require('should'); + +var http = require('http'); +var cproc = require('child_process'); +var fs = require('fs'); + +describe('the CLI', function() { + it('should provide a help message', function(done) { + var child = cproc.spawn('node', ['ass-stubs/cli-test.js']); + var buffer = ''; + child.stdout.on('data', function(chunk) { + buffer += ''+chunk; + }); + child.stdout.on('end', function() { + buffer.should.startWith('Usage'); + done(); + }); + }); + it('should produce default badges', function(done) { + var child = cproc.spawn('node', + ['ass-stubs/cli-test.js', 'cactus', 'grown']); + child.stdout.on('data', function(chunk) { + var buffer = ''+chunk; + buffer.should.startWith('