Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / log4js / test / slackAppender-test.js
1 "use strict";
2 var vows = require('vows');
3 var assert = require('assert');
4 var log4js = require('../lib/log4js');
5 var sandbox = require('sandboxed-module');
6
7 function setupLogging(category, options) {
8     var msgs = [];
9
10     var slackCredentials = {
11         token: options.token,
12         channel_id: options.channel_id,
13         username: options.username,
14         format: options.format,
15         icon_url: options.icon_url
16     };
17     var fakeSlack = (function (key) {
18         function constructor() {
19             return {
20                 options: key,
21                 api: function (action, data, callback) {
22                     msgs.push(data);
23                     callback(false, {status: "sent"});
24                 }
25             };
26         }
27
28         return constructor(key);
29     });
30
31     var fakeLayouts = {
32         layout: function (type, config) {
33             this.type = type;
34             this.config = config;
35             return log4js.layouts.messagePassThroughLayout;
36         },
37         basicLayout: log4js.layouts.basicLayout,
38         coloredLayout: log4js.layouts.coloredLayout,
39         messagePassThroughLayout: log4js.layouts.messagePassThroughLayout
40     };
41
42     var fakeConsole = {
43         errors: [],
44         logs: [],
45         error: function (msg, value) {
46             this.errors.push({msg: msg, value: value});
47         },
48         log: function (msg, value) {
49             this.logs.push({msg: msg, value: value});
50         }
51     };
52
53
54     var slackModule = sandbox.require('../lib/appenders/slack', {
55         requires: {
56             'slack-node': fakeSlack,
57             '../layouts': fakeLayouts
58         },
59         globals: {
60             console: fakeConsole
61         }
62     });
63
64
65     log4js.addAppender(slackModule.configure(options), category);
66
67     return {
68         logger: log4js.getLogger(category),
69         mailer: fakeSlack,
70         layouts: fakeLayouts,
71         console: fakeConsole,
72         messages: msgs,
73         credentials: slackCredentials
74     };
75 }
76
77 function checkMessages(result) {
78     for (var i = 0; i < result.messages.length; ++i) {
79         assert.equal(result.messages[i].channel, '#CHANNEL');
80         assert.equal(result.messages[i].username, 'USERNAME');
81         assert.ok(new RegExp('.+Log event #' + (i + 1)).test(result.messages[i].text));
82     }
83 }
84
85 log4js.clearAppenders();
86
87 vows.describe('log4js slackAppender').addBatch({
88     'slack setup': {
89         topic: setupLogging('slack setup', {
90                 token: 'TOKEN',
91                 channel_id: "#CHANNEL",
92                 username: "USERNAME",
93                 format: "FORMAT",
94                 icon_url: "ICON_URL"
95         }),
96         'slack credentials should match': function (result) {
97             assert.equal(result.credentials.token, 'TOKEN');
98             assert.equal(result.credentials.channel_id, '#CHANNEL');
99             assert.equal(result.credentials.username, 'USERNAME');
100             assert.equal(result.credentials.format, 'FORMAT');
101             assert.equal(result.credentials.icon_url, 'ICON_URL');
102         }
103     },
104
105     'basic usage': {
106         topic: function () {
107             var setup = setupLogging('basic usage', {
108                 token: 'TOKEN',
109                 channel_id: "#CHANNEL",
110                 username: "USERNAME",
111                 format: "FORMAT",
112                 icon_url: "ICON_URL",
113             });
114
115             setup.logger.info("Log event #1");
116             return setup;
117         },
118         'there should be one message only': function (result) {
119             assert.equal(result.messages.length, 1);
120         },
121         'message should contain proper data': function (result) {
122             checkMessages(result);
123         }
124     },
125     'config with layout': {
126         topic: function () {
127             var setup = setupLogging('config with layout', {
128                 layout: {
129                     type: "tester"
130                 }
131             });
132             return setup;
133         },
134         'should configure layout': function (result) {
135             assert.equal(result.layouts.type, 'tester');
136         }
137     },
138     'separate notification for each event': {
139         topic: function () {
140             var self = this;
141             var setup = setupLogging('separate notification for each event', {
142                 token: 'TOKEN',
143                 channel_id: "#CHANNEL",
144                 username: "USERNAME",
145                 format: "FORMAT",
146                 icon_url: "ICON_URL",
147             });
148             setTimeout(function () {
149                 setup.logger.info('Log event #1');
150             }, 0);
151             setTimeout(function () {
152                 setup.logger.info('Log event #2');
153             }, 500);
154             setTimeout(function () {
155                 setup.logger.info('Log event #3');
156             }, 1100);
157             setTimeout(function () {
158                 self.callback(null, setup);
159             }, 3000);
160         },
161         'there should be three messages': function (result) {
162             assert.equal(result.messages.length, 3);
163         },
164         'messages should contain proper data': function (result) {
165             checkMessages(result);
166         }
167     }
168 }).export(module);