2 var vows = require('vows'),
3 assert = require('assert'),
4 log4js = require('../lib/log4js'),
5 sandbox = require('sandboxed-module');
7 function setupLogging(category, options) {
10 var fakeRequest = function(args, level){
11 lastRequest.notifier = this;
12 lastRequest.body = args[0];
13 lastRequest.callback = args[1];
14 lastRequest.level = level;
17 var fakeHipchatNotifier = {
18 'make': function(room, token, from, host, notify){
23 'host': host || 'api.hipchat.com',
24 'notify': notify || false,
25 'setRoom': function(val){ this.room = val; },
26 'setFrom': function(val){ this.from = val; },
27 'setHost': function(val){ this.host = val; },
28 'setNotify': function(val){ this.notify = val; },
29 'info': function(){ fakeRequest.call(this, arguments, 'info'); },
30 'warning': function(){ fakeRequest.call(this, arguments, 'warning'); },
31 'failure': function(){ fakeRequest.call(this, arguments, 'failure'); },
32 'success': function(){ fakeRequest.call(this, arguments, 'success'); }
37 var hipchatModule = sandbox.require('../lib/appenders/hipchat', {
39 'hipchat-notifier': fakeHipchatNotifier
42 log4js.clearAppenders();
43 log4js.addAppender(hipchatModule.configure(options), category);
46 logger: log4js.getLogger(category),
47 lastRequest: lastRequest
51 vows.describe('HipChat appender').addBatch({
52 'when logging to HipChat v2 API': {
54 var customCallback = function(err, res, body){ return 'works'; };
56 var setup = setupLogging('myCategory', {
58 "hipchat_token": "User_Token_With_Notification_Privs",
59 "hipchat_room": "Room_ID_Or_Name",
60 "hipchat_from": "Log4js_Test",
61 "hipchat_notify": true,
62 "hipchat_host": "hipchat.your-company.tld",
63 "hipchat_response_callback": customCallback
65 setup.logger.warn('Log event #1');
68 'a request to hipchat_host should be sent': function (topic) {
69 assert.equal(topic.lastRequest.notifier.host, "hipchat.your-company.tld");
70 assert.equal(topic.lastRequest.notifier.notify, true);
71 assert.equal(topic.lastRequest.body, 'Log event #1');
72 assert.equal(topic.lastRequest.level, 'warning');
74 'a custom callback to the HipChat response is supported': function(topic) {
75 assert.equal(topic.lastRequest.callback(), 'works');
78 'when missing options': {
80 var setup = setupLogging('myLogger', {
83 setup.logger.error('Log event #2');
86 'it sets some defaults': function (topic) {
87 assert.equal(topic.lastRequest.notifier.host, "api.hipchat.com");
88 assert.equal(topic.lastRequest.notifier.notify, false);
89 assert.equal(topic.lastRequest.body, 'Log event #2');
90 assert.equal(topic.lastRequest.level, 'failure');
93 'when basicLayout is provided': {
95 var setup = setupLogging('myLogger', {
97 "layout": log4js.layouts.basicLayout
99 setup.logger.debug('Log event #3');
102 'it should include the timestamp': function (topic) {
104 // basicLayout adds [TIMESTAMP] [LEVEL] category - message
105 // e.g. [2016-06-10 11:50:53.819] [DEBUG] myLogger - Log event #23
107 assert.match(topic.lastRequest.body, /^\[[^\]]+\] \[[^\]]+\].*Log event \#3$/);
108 assert.equal(topic.lastRequest.level, 'info');