diff --git a/coffee/components-manager.coffee b/coffee/components-manager.coffee index c67f853..261d478 100644 --- a/coffee/components-manager.coffee +++ b/coffee/components-manager.coffee @@ -27,7 +27,7 @@ events = require 'events' ### Module call ----------- -Initializes the HTTP listener and its request handler. +Initializes the Components Manager and constructs a new Event Emitter. @param {Object} args ### @@ -72,7 +72,7 @@ containing the HTTP response code and a corresponding message. @param {function} callback ### -exports.processRequest = ( user, oReq, callback ) => +exports.processRequest = ( user, oReq, callback ) -> if not oReq.payload oReq.payload = '{}' try @@ -88,121 +88,88 @@ exports.processRequest = ( user, oReq, callback ) => code: 404 message: 'What do you want from me?' -hasRequiredParams = ( arrParams, oReq ) -> +hasRequiredParams = ( arrParams, oPayload ) -> answ = code: 400 message: "Your request didn't contain all necessary fields! id and params required" - return answ for param in arrParams when not oReq[param] + return answ for param in arrParams when not oPayload[param] answ.code = 200 answ.message = 'All required properties found' answ +getModules = ( user, oPayload, dbMod, callback ) -> + dbMod.getAvailableModuleIds user.username, ( err, arrNames ) -> + oRes = {} + answReq = () -> + callback + code: 200 + message: JSON.stringify oRes + sem = arrNames.length + if sem is 0 + answReq() + else + fGetFunctions = ( id ) => + dbMod.getModule id, ( err, oModule ) => + if oModule + oRes[id] = JSON.parse oModule.functions + if --sem is 0 + answReq() + fGetFunctions id for id in arrNames + +getModuleParams = ( user, oPayload, dbMod, callback ) -> + answ = hasRequiredParams [ 'id' ], oPayload + if answ.code isnt 200 + callback answ + else + dbMod.getModuleParams oPayload.id, ( err, oPayload ) -> + answ.message = oPayload + callback answ + +forgeModule = ( user, oPayload, dbMod, callback ) -> + answ = hasRequiredParams [ 'id', 'params', 'lang', 'data' ], oPayload + if answ.code isnt 200 + callback answ + else + dbMod.getModule oPayload.id, ( err, mod ) => + if mod + answ.code = 409 + answ.message = 'Event Poller module name already existing: ' + oPayload.id + else + src = oPayload.data + cm = dynmod.compileString src, oPayload.id, {}, oPayload.lang + answ = cm.answ + if answ.code is 200 + funcs = [] + funcs.push name for name, id of cm.module + @log.info "CM | Storing new module with functions #{ funcs }" + answ.message = + "Event Poller module successfully stored! Found following function(s): #{ funcs }" + oPayload.functions = JSON.stringify funcs + dbMod.storeModule user.username, oPayload + if oPayload.public is 'true' + dbMod.publish oPayload.id + callback answ + commandFunctions = - forge_event_poller: ( user, oReq, cb ) => - answ = hasRequiredParams [ 'id', 'params', 'lang', 'data' ], oReq - if answ.code isnt 200 - cb answ - else - db.eventPollers.getModule oReq.id, ( err, mod ) => - if mod - answ.code = 409 - answ.message = 'Event Poller module name already existing: ' + oReq.id - else - src = oReq.data - cm = dynmod.compileString src, oReq.id, {}, oReq.lang - answ = cm.answ - if answ.code is 200 - events = [] - events.push name for name, id of cm.module - @log.info "CM | Storing new eventpoller with events #{ events }" - answ.message = - "Event Poller module successfully stored! Found following event(s): #{ events }" - oReq.events = JSON.stringify events - db.eventPollers.storeModule oReq.id, user.username, oReq - if oReq.public is 'true' - db.eventPollers.publish oReq.id - cb answ + get_event_pollers: ( user, oPayload, callback ) -> + getModules user, oPayload, db.eventPollers, callback - get_event_pollers: ( user, oReq, cb ) -> - db.eventPollers.getAvailableModuleIds user.username, ( err, arrNames ) -> - oRes = {} - answReq = () -> - cb - code: 200 - message: oRes - sem = arrNames.length - if sem is 0 - answReq() - else - fGetEvents = ( id ) -> - db.eventPollers.getModule id, ( err, oModule ) -> - oRes[id] = oModule.events - if --sem is 0 - answReq() - fGetEvents id for id in arrNames + get_action_invokers: ( user, oPayload, callback ) -> + getModules user, oPayload, db.actionInvokers, callback - get_event_poller_params: ( user, oReq, cb ) -> - answ = hasRequiredParams [ 'id' ], oReq - if answ.code isnt 200 - cb answ - else - db.eventPollers.getModuleParams oReq.id, ( err, oReq ) -> - answ.message = oReq - cb answ + get_event_poller_params: ( user, oPayload, callback ) -> + getModuleParams user, oPayload, db.eventPollers, callback + + get_action_invoker_params: ( user, oPayload, callback ) -> + getModuleParams user, oPayload, db.actionInvokers, callback + + forge_event_poller: ( user, oPayload, callback ) -> + forgeModule user, oPayload, db.eventPollers, callback + + forge_action_invoker: ( user, oPayload, callback ) -> + forgeModule user, oPayload, db.actionInvokers, callback - get_action_invokers: ( user, oReq, cb ) -> - db.actionInvokers.getAvailableModuleIds user.username, ( err, arrNames ) -> - oRes = {} - answReq = () -> - cb - code: 200 - message: oRes - sem = arrNames.length - if sem is 0 - answReq() - else - fGetActions = ( id ) -> - db.actionInvokers.getModule id, ( err, oModule ) -> - oRes[id] = oModule.actions - if --sem is 0 - answReq() - fGetActions id for id in arrNames - - get_action_invoker_params: ( user, oReq, cb ) -> - answ = hasRequiredParams [ 'id' ], oReq - if answ.code isnt 200 - cb answ - else - db.actionInvokers.getModuleParams oReq.id, ( err, oReq ) -> - answ.message = oReq - cb answ - - forge_action_invoker: ( user, oReq, cb ) => - answ = hasRequiredParams [ 'id', 'params', 'lang', 'data' ], oReq - if answ.code isnt 200 - cb answ - else - db.actionInvokers.getModule oReq.id, ( err, mod ) => - if mod - answ.code = 409 - answ.message = 'Action Invoker module name already existing: ' + oReq.id - else - src = oReq.data - cm = dynmod.compileString src, oReq.id, {}, oReq.lang - answ = cm.answ - if answ.code is 200 - actions = [] - actions.push name for name, id of cm.module - @log.info "CM | Storing new eventpoller with actions #{ actions }" - answ.message = - "Action Invoker module successfully stored! Found following action(s): #{ actions }" - oReq.actions = JSON.stringify actions - db.actionInvokers.storeModule oReq.id, user.username, oReq - if oReq.public is 'true' - db.actionInvokers.publish oReq.id - cb answ - - get_rules: ( user, oReq, cb ) -> + get_rules: ( user, oPayload, callback ) -> console.log 'CM | Implement get_rules' # A rule needs to be in following format: @@ -210,41 +177,32 @@ commandFunctions = # - event # - conditions # - actions - forge_rule: ( user, oReq, cb ) => - console.log oReq - db.getRule oReq.id, ( err, oExisting ) => - if oExisting isnt null - answ = - code: 409 - message: 'Rule name already existing!' - else - if not oReq.id or not oReq.event or - not oReq.conditions or not oReq.actions + forge_rule: ( user, oPayload, callback ) => + answ = hasRequiredParams [ 'id', 'event', 'conditions', 'actions' ], oPayload + if answ.code isnt 200 + callback answ + else + db.getRule oPayload.id, ( err, oExisting ) => + if oExisting isnt null answ = - code: 400 - message: 'Missing properties in rule!' + code: 409 + message: 'Rule name already existing!' else - try - rule = - id: oReq.id - event: oReq.event - conditions: JSON.parse oReq.conditions - actions: JSON.parse oReq.actions - strRule = JSON.stringify rule - db.storeRule rule.id, strRule - db.linkRule rule.id, user.username - db.activateRule rule.id, user.username - if oReq.event_params - db.eventPollers.storeUserParams ep.module, user.username, oReq.event_params - arrParams = JSON.parse oReq.action_params - db.actionInvokers.storeUserParams id, user.username, JSON.stringify params for id, params of arrParams - @ee.emit 'newRule', strRule - answ = - code: 200 - message: 'Rule stored and activated!' - catch err - answ = - code: 400 - message: 'bad bad request...' - console.log err - cb answ \ No newline at end of file + rule = + id: oPayload.id + event: oPayload.event + conditions: oPayload.conditions + actions: oPayload.actions + strRule = JSON.stringify rule + db.storeRule rule.id, strRule + db.linkRule rule.id, user.username + db.activateRule rule.id, user.username + if oPayload.event_params + db.eventPollers.storeUserParams ep.module, user.username, oPayload.event_params + arrParams = oPayload.action_params + db.actionInvokers.storeUserParams id, user.username, JSON.stringify params for id, params of arrParams + @ee.emit 'newRule', strRule + answ = + code: 200 + message: 'Rule stored and activated!' + callback answ \ No newline at end of file diff --git a/coffee/dynamic-modules.coffee b/coffee/dynamic-modules.coffee index 1634b66..3b675fd 100644 --- a/coffee/dynamic-modules.coffee +++ b/coffee/dynamic-modules.coffee @@ -52,7 +52,7 @@ exports.compileString = ( src, id, params, lang ) => err.location.first_line #FIXME not log but debug module is required to provide information to the user sandbox = - id: id + id: id #TODO the ID needs to be a combination of the module id and the user name params: params needle: needle log: console.log diff --git a/coffee/persistence.coffee b/coffee/persistence.coffee index 6ecd26f..cfc843f 100644 --- a/coffee/persistence.coffee +++ b/coffee/persistence.coffee @@ -40,6 +40,7 @@ Initializes the DB connection with the given `db-port` property in the `args` ob exports = module.exports = ( args ) => if not @db #TODO we need to have a secure concept here, private keys per user + #FIXME get rid of crpto if not args[ 'db-port' ] args[ 'db-port' ] = 6379 @log = args.logger @@ -247,18 +248,18 @@ class IndexedModules ### - @private storeModule( *mId, userId, data* ) - @param {String} mId + Stores a module and links it to the user. + @private storeModule( *userId, oModule* ) @param {String} userId - @param {object} data + @param {object} oModule ### - storeModule: ( mId, userId, data ) => - @log.info "DB | (IdxedMods) #{ @setname }.storeModule( #{ mId }, #{ userId }, data )" - @db.sadd "#{ @setname }s", mId, - replyHandler "sadd '#{ mId }' to '#{ @setname }'" - @db.hmset "#{ @setname }:#{ mId }", data, - replyHandler "hmset properties in hash '#{ @setname }:#{ mId }'" - @linkModule mId, userId + storeModule: ( userId, oModule ) => + @log.info "DB | (IdxedMods) #{ @setname }.storeModule( #{ userId }, oModule )" + @db.sadd "#{ @setname }s", oModule.id, + replyHandler "sadd '#{ oModule.id }' to '#{ @setname }'" + @db.hmset "#{ @setname }:#{ oModule.id }", oModule, + replyHandler "hmset properties in hash '#{ @setname }:#{ oModule.id }'" + @linkModule oModule.id, userId #TODO add testing linkModule: ( mId, userId ) => diff --git a/coffee/request-handler.coffee b/coffee/request-handler.coffee index 53ddd82..275a8f6 100644 --- a/coffee/request-handler.coffee +++ b/coffee/request-handler.coffee @@ -65,7 +65,6 @@ objects.* @public handleEvent( *req, resp* ) ### exports.handleEvent = ( req, resp ) -> - console.log 'handleEvent' body = '' req.on 'data', ( data ) -> body += data diff --git a/js-coffee/components-manager.js b/js-coffee/components-manager.js index 6a16e7d..345554e 100644 --- a/js-coffee/components-manager.js +++ b/js-coffee/components-manager.js @@ -10,7 +10,7 @@ Components Manager (function() { - var commandFunctions, db, dynmod, events, exports, fs, hasRequiredParams, path, vm, + var commandFunctions, db, dynmod, events, exports, forgeModule, fs, getModuleParams, getModules, hasRequiredParams, path, vm, _this = this; db = require('./persistence'); @@ -28,7 +28,7 @@ Components Manager /* Module call ----------- - Initializes the HTTP listener and its request handler. + Initializes the Components Manager and constructs a new Event Emitter. @param {Object} args */ @@ -110,7 +110,7 @@ Components Manager } }; - hasRequiredParams = function(arrParams, oReq) { + hasRequiredParams = function(arrParams, oPayload) { var answ, param, _i, _len; answ = { code: 400, @@ -118,7 +118,7 @@ Components Manager }; for (_i = 0, _len = arrParams.length; _i < _len; _i++) { param = arrParams[_i]; - if (!oReq[param]) { + if (!oPayload[param]) { return answ; } } @@ -127,219 +127,155 @@ Components Manager return answ; }; - commandFunctions = { - forge_event_poller: function(user, oReq, cb) { - var answ; - answ = hasRequiredParams(['id', 'params', 'lang', 'data'], oReq); - if (answ.code !== 200) { - return cb(answ); - } else { - return db.eventPollers.getModule(oReq.id, function(err, mod) { - var cm, id, name, src, _ref; - if (mod) { - answ.code = 409; - answ.message = 'Event Poller module name already existing: ' + oReq.id; - } else { - src = oReq.data; - cm = dynmod.compileString(src, oReq.id, {}, oReq.lang); - answ = cm.answ; - if (answ.code === 200) { - events = []; - _ref = cm.module; - for (name in _ref) { - id = _ref[name]; - events.push(name); - } - _this.log.info("CM | Storing new eventpoller with events " + events); - answ.message = "Event Poller module successfully stored! Found following event(s): " + events; - oReq.events = JSON.stringify(events); - db.eventPollers.storeModule(oReq.id, user.username, oReq); - if (oReq["public"] === 'true') { - db.eventPollers.publish(oReq.id); - } - } - } - return cb(answ); + getModules = function(user, oPayload, dbMod, callback) { + return dbMod.getAvailableModuleIds(user.username, function(err, arrNames) { + var answReq, fGetFunctions, id, oRes, sem, _i, _len, _results, + _this = this; + oRes = {}; + answReq = function() { + return callback({ + code: 200, + message: JSON.stringify(oRes) }); - } - }, - get_event_pollers: function(user, oReq, cb) { - return db.eventPollers.getAvailableModuleIds(user.username, function(err, arrNames) { - var answReq, fGetEvents, id, oRes, sem, _i, _len, _results; - oRes = {}; - answReq = function() { - return cb({ - code: 200, - message: oRes + }; + sem = arrNames.length; + if (sem === 0) { + return answReq(); + } else { + fGetFunctions = function(id) { + return dbMod.getModule(id, function(err, oModule) { + if (oModule) { + oRes[id] = JSON.parse(oModule.functions); + } + if (--sem === 0) { + return answReq(); + } }); }; - sem = arrNames.length; - if (sem === 0) { - return answReq(); - } else { - fGetEvents = function(id) { - return db.eventPollers.getModule(id, function(err, oModule) { - oRes[id] = oModule.events; - if (--sem === 0) { - return answReq(); - } - }); - }; - _results = []; - for (_i = 0, _len = arrNames.length; _i < _len; _i++) { - id = arrNames[_i]; - _results.push(fGetEvents(id)); - } - return _results; + _results = []; + for (_i = 0, _len = arrNames.length; _i < _len; _i++) { + id = arrNames[_i]; + _results.push(fGetFunctions(id)); } - }); - }, - get_event_poller_params: function(user, oReq, cb) { - var answ; - answ = hasRequiredParams(['id'], oReq); - if (answ.code !== 200) { - return cb(answ); - } else { - return db.eventPollers.getModuleParams(oReq.id, function(err, oReq) { - answ.message = oReq; - return cb(answ); - }); + return _results; } - }, - get_action_invokers: function(user, oReq, cb) { - return db.actionInvokers.getAvailableModuleIds(user.username, function(err, arrNames) { - var answReq, fGetActions, id, oRes, sem, _i, _len, _results; - oRes = {}; - answReq = function() { - return cb({ - code: 200, - message: oRes - }); - }; - sem = arrNames.length; - if (sem === 0) { - return answReq(); - } else { - fGetActions = function(id) { - return db.actionInvokers.getModule(id, function(err, oModule) { - oRes[id] = oModule.actions; - if (--sem === 0) { - return answReq(); - } - }); - }; - _results = []; - for (_i = 0, _len = arrNames.length; _i < _len; _i++) { - id = arrNames[_i]; - _results.push(fGetActions(id)); - } - return _results; - } - }); - }, - get_action_invoker_params: function(user, oReq, cb) { - var answ; - answ = hasRequiredParams(['id'], oReq); - if (answ.code !== 200) { - return cb(answ); - } else { - return db.actionInvokers.getModuleParams(oReq.id, function(err, oReq) { - answ.message = oReq; - return cb(answ); - }); - } - }, - forge_action_invoker: function(user, oReq, cb) { - var answ; - answ = hasRequiredParams(['id', 'params', 'lang', 'data'], oReq); - if (answ.code !== 200) { - return cb(answ); - } else { - return db.actionInvokers.getModule(oReq.id, function(err, mod) { - var actions, cm, id, name, src, _ref; - if (mod) { - answ.code = 409; - answ.message = 'Action Invoker module name already existing: ' + oReq.id; - } else { - src = oReq.data; - cm = dynmod.compileString(src, oReq.id, {}, oReq.lang); - answ = cm.answ; - if (answ.code === 200) { - actions = []; - _ref = cm.module; - for (name in _ref) { - id = _ref[name]; - actions.push(name); - } - _this.log.info("CM | Storing new eventpoller with actions " + actions); - answ.message = "Action Invoker module successfully stored! Found following action(s): " + actions; - oReq.actions = JSON.stringify(actions); - db.actionInvokers.storeModule(oReq.id, user.username, oReq); - if (oReq["public"] === 'true') { - db.actionInvokers.publish(oReq.id); - } - } - } - return cb(answ); - }); - } - }, - get_rules: function(user, oReq, cb) { - return console.log('CM | Implement get_rules'); - }, - forge_rule: function(user, oReq, cb) { - console.log(oReq); - return db.getRule(oReq.id, function(err, oExisting) { - var answ, arrParams, id, params, rule, strRule; - if (oExisting !== null) { - answ = { - code: 409, - message: 'Rule name already existing!' - }; - } else { - if (!oReq.id || !oReq.event || !oReq.conditions || !oReq.actions) { - answ = { - code: 400, - message: 'Missing properties in rule!' - }; - } else { - try { - rule = { - id: oReq.id, - event: oReq.event, - conditions: JSON.parse(oReq.conditions), - actions: JSON.parse(oReq.actions) - }; - strRule = JSON.stringify(rule); - db.storeRule(rule.id, strRule); - db.linkRule(rule.id, user.username); - db.activateRule(rule.id, user.username); - if (oReq.event_params) { - db.eventPollers.storeUserParams(ep.module, user.username, oReq.event_params); - } - arrParams = JSON.parse(oReq.action_params); - for (id in arrParams) { - params = arrParams[id]; - db.actionInvokers.storeUserParams(id, user.username, JSON.stringify(params)); - } - _this.ee.emit('newRule', strRule); - answ = { - code: 200, - message: 'Rule stored and activated!' - }; - } catch (_error) { - err = _error; - answ = { - code: 400, - message: 'bad bad request...' - }; - console.log(err); - } - } - } - return cb(answ); + }); + }; + + getModuleParams = function(user, oPayload, dbMod, callback) { + var answ; + answ = hasRequiredParams(['id'], oPayload); + if (answ.code !== 200) { + return callback(answ); + } else { + return dbMod.getModuleParams(oPayload.id, function(err, oPayload) { + answ.message = oPayload; + return callback(answ); }); } }; + forgeModule = function(user, oPayload, dbMod, callback) { + var answ, + _this = this; + answ = hasRequiredParams(['id', 'params', 'lang', 'data'], oPayload); + if (answ.code !== 200) { + return callback(answ); + } else { + return dbMod.getModule(oPayload.id, function(err, mod) { + var cm, funcs, id, name, src, _ref; + if (mod) { + answ.code = 409; + answ.message = 'Event Poller module name already existing: ' + oPayload.id; + } else { + src = oPayload.data; + cm = dynmod.compileString(src, oPayload.id, {}, oPayload.lang); + answ = cm.answ; + if (answ.code === 200) { + funcs = []; + _ref = cm.module; + for (name in _ref) { + id = _ref[name]; + funcs.push(name); + } + _this.log.info("CM | Storing new module with functions " + funcs); + answ.message = "Event Poller module successfully stored! Found following function(s): " + funcs; + oPayload.functions = JSON.stringify(funcs); + dbMod.storeModule(user.username, oPayload); + if (oPayload["public"] === 'true') { + dbMod.publish(oPayload.id); + } + } + } + return callback(answ); + }); + } + }; + + commandFunctions = { + get_event_pollers: function(user, oPayload, callback) { + return getModules(user, oPayload, db.eventPollers, callback); + }, + get_action_invokers: function(user, oPayload, callback) { + return getModules(user, oPayload, db.actionInvokers, callback); + }, + get_event_poller_params: function(user, oPayload, callback) { + return getModuleParams(user, oPayload, db.eventPollers, callback); + }, + get_action_invoker_params: function(user, oPayload, callback) { + return getModuleParams(user, oPayload, db.actionInvokers, callback); + }, + forge_event_poller: function(user, oPayload, callback) { + return forgeModule(user, oPayload, db.eventPollers, callback); + }, + forge_action_invoker: function(user, oPayload, callback) { + return forgeModule(user, oPayload, db.actionInvokers, callback); + }, + get_rules: function(user, oPayload, callback) { + return console.log('CM | Implement get_rules'); + }, + forge_rule: function(user, oPayload, callback) { + var answ; + answ = hasRequiredParams(['id', 'event', 'conditions', 'actions'], oPayload); + if (answ.code !== 200) { + return callback(answ); + } else { + return db.getRule(oPayload.id, function(err, oExisting) { + var arrParams, id, params, rule, strRule; + if (oExisting !== null) { + answ = { + code: 409, + message: 'Rule name already existing!' + }; + } else { + rule = { + id: oPayload.id, + event: oPayload.event, + conditions: oPayload.conditions, + actions: oPayload.actions + }; + strRule = JSON.stringify(rule); + db.storeRule(rule.id, strRule); + db.linkRule(rule.id, user.username); + db.activateRule(rule.id, user.username); + if (oPayload.event_params) { + db.eventPollers.storeUserParams(ep.module, user.username, oPayload.event_params); + } + arrParams = oPayload.action_params; + for (id in arrParams) { + params = arrParams[id]; + db.actionInvokers.storeUserParams(id, user.username, JSON.stringify(params)); + } + _this.ee.emit('newRule', strRule); + answ = { + code: 200, + message: 'Rule stored and activated!' + }; + } + return callback(answ); + }); + } + } + }; + }).call(this); diff --git a/js-coffee/persistence.js b/js-coffee/persistence.js index e42e685..b22826d 100644 --- a/js-coffee/persistence.js +++ b/js-coffee/persistence.js @@ -328,18 +328,18 @@ Persistence }; /* - @private storeModule( *mId, userId, data* ) - @param {String} mId + Stores a module and links it to the user. + @private storeModule( *userId, oModule* ) @param {String} userId - @param {object} data + @param {object} oModule */ - IndexedModules.prototype.storeModule = function(mId, userId, data) { - this.log.info("DB | (IdxedMods) " + this.setname + ".storeModule( " + mId + ", " + userId + ", data )"); - this.db.sadd("" + this.setname + "s", mId, replyHandler("sadd '" + mId + "' to '" + this.setname + "'")); - this.db.hmset("" + this.setname + ":" + mId, data, replyHandler("hmset properties in hash '" + this.setname + ":" + mId + "'")); - return this.linkModule(mId, userId); + IndexedModules.prototype.storeModule = function(userId, oModule) { + this.log.info("DB | (IdxedMods) " + this.setname + ".storeModule( " + userId + ", oModule )"); + this.db.sadd("" + this.setname + "s", oModule.id, replyHandler("sadd '" + oModule.id + "' to '" + this.setname + "'")); + this.db.hmset("" + this.setname + ":" + oModule.id, oModule, replyHandler("hmset properties in hash '" + this.setname + ":" + oModule.id + "'")); + return this.linkModule(oModule.id, userId); }; IndexedModules.prototype.linkModule = function(mId, userId) { diff --git a/js-coffee/request-handler.js b/js-coffee/request-handler.js index 0572309..88a95de 100644 --- a/js-coffee/request-handler.js +++ b/js-coffee/request-handler.js @@ -70,7 +70,6 @@ Request Handler exports.handleEvent = function(req, resp) { var body; - console.log('handleEvent'); body = ''; req.on('data', function(data) { return body += data; diff --git a/testing/files/testObjects.json b/testing/files/testObjects.json index 9d23293..e7ee8ea 100644 --- a/testing/files/testObjects.json +++ b/testing/files/testObjects.json @@ -4,7 +4,9 @@ "event": "test_1", "payload": { "property": "test_1", - "nestedProperty": "really nested" + "nestedProperty": { + "more": "really nested" + } } }, "eventTwo":{ @@ -12,13 +14,21 @@ } }, "eps": { - "ep1": { - "code": "unit-test event poller 1 content", - "reqparams": "[param11,param12]" + "epOne": { + "id":"epOne", + "lang":"0", + "data":"\n#\n# EmailYak EVENT POLLER\n#\n# Requires user params:\n# - apikey: The user's EmailYak API key\n#\n\nurl = 'https://api.emailyak.com/v1/' + params.apikey + '/json/get/new/email/'\n\nexports.newMail = ( pushEvent ) ->\n needle.get url, ( err, resp, body ) ->\n if not err and resp.statusCode is 200\n mails = JSON.parse( body ).Emails\n pushEvent mail for mail in mails\n else\n log.error 'Error in EmailYak EM newMail: ' + err.message\n\n", + "public":"false", + "params":"[\"apikey\"]", + "functions":"[\"newMail\"]" }, - "ep2": { - "code": "unit-test event poller 2 content", - "reqparams": "[param21,param22]" + "epTwo": { + "id":"epTwo", + "lang":"0", + "data":"\nurl = 'https://api.emailyak.com/v1/' + params.firstparam + '/json/get/new/email/'\n\nexports.newEvent = ( pushEvent ) ->\n needle.get url, ( err, resp, body ) ->\n if not err and resp.statusCode is 200\n mails = JSON.parse( body ).Emails\n pushEvent mail for mail in mails\n else\n log.error 'Error in EmailYak EM newMail: ' + err.message\n\nexports.randomNess = ( pushEvent ) ->\n console.log 'test runs: ' + params.secondparam\n", + "public":"true", + "params":"[\"firstparam\",\"secondparam\"]", + "functions":"[\"newEvent\",\"randomNess\"]" } }, "rules": { diff --git a/testing/test_components-manager.coffee b/testing/test_components-manager.coffee index 3b992a6..c366e4f 100644 --- a/testing/test_components-manager.coffee +++ b/testing/test_components-manager.coffee @@ -10,8 +10,8 @@ catch err console.log 'Error fetching standard objects file: ' + err.message logger = require path.join '..', 'js-coffee', 'logging' -log = logger.getLogger - nolog: true +log = logger.getLogger() + # nolog: true cm = require path.join '..', 'js-coffee', 'components-manager' opts = @@ -21,100 +21,96 @@ cm opts db = require path.join '..', 'js-coffee', 'persistence' db opts +oUser = objects.users.userOne +oRuleOne = objects.rules.ruleOne +oRuleTwo = objects.rules.ruleTwo -exports.testEmptyPayload = ( test ) => - test.expect 1 +exports.tearDown = ( cb ) -> + db.deleteRule oRuleOne.id + db.deleteRule oRuleTwo.id + cb() - oUser = objects.users.userOne - request = - command: 'get_event_pollers' +exports.requestProcessing = + testEmptyPayload: ( test ) => + test.expect 1 - cm.processRequest oUser, request, ( answ ) => - test.equals 200, answ.code, 'testListener failed: ' + answ.message - test.done() + request = + command: 'get_event_pollers' + + cm.processRequest oUser, request, ( answ ) => + test.strictEqual 200, answ.code, 'Empty payload did not return 200' + test.done() + + testCorruptPayload: ( test ) => + test.expect 1 + + request = + command: 'get_event_pollers' + payload: 'no-json' + + cm.processRequest oUser, request, ( answ ) => + test.strictEqual 404, answ.code, 'Corrupt payload did not return 404' + test.done() exports.testListener = ( test ) => test.expect 2 - oUser = objects.users.userOne - oRuleOne = objects.rules.ruleOne - oRuleTwo = objects.rules.ruleTwo - db.storeRule 'test-cm-rule', JSON.stringify oRuleOne + db.storeRule oRuleOne.id, JSON.stringify oRuleOne request = command: 'forge_rule' payload: JSON.stringify oRuleTwo cm.addListener 'newRule', ( evt ) => - console.log 'got new rule!' - test.deepEqual evt, oRuleTwo, 'Event is not the same!' + try + newRule = JSON.parse evt + catch err + test.ok false, 'Failed to parse the newRule event' + test.deepEqual newRule, oRuleTwo, 'New Rule is not the same!' test.done() - console.log 'new rule listener added' cm.addListener 'init', ( evt ) => - test.deepEqual evt, oRuleOne, 'Event is not the same!' - console.log 'got and checked init' + try + initRule = JSON.parse evt + catch err + test.ok false, 'Failed to parse the newRule event' + test.deepEqual initRule, oRuleOne, 'Init Rule is not the same!' - cm.processRequest oUser, request, ( answ ) => - console.log answ - if answ.code isnt 200 - test.ok false, 'testListener failed: ' + answ.message + fWaitForInit = -> + cm.processRequest oUser, request, ( answ ) => + if answ.code isnt 200 + test.ok false, 'testListener failed: ' + answ.message + test.done() + + setTimeout fWaitForInit, 200 + +exports.moduleHandling = + testGetModules: ( test ) -> + test.expect 2 + + oModule = objects.eps.epOne + db.eventPollers.storeModule oUser.username, oModule + request = + command: 'get_event_pollers' + + cm.processRequest oUser, request, ( answ ) => + test.strictEqual 200, answ.code, 'GetModules failed...' + oExpected = {} + oExpected[oModule.id] = JSON.parse oModule.functions + test.strictEqual JSON.stringify(oExpected), answ.message, + 'GetModules retrieved modules is not what we expected' + + console.log answ test.done() - console.log 'init listener added' + # testGetModuleParams: ( test ) -> + # test.expect 1 -exports.testListener = ( test ) => - test.expect 2 - - oUser = objects.users.userOne - oRuleOne = objects.rules.ruleOne - oRuleTwo = objects.rules.ruleTwo - db.storeRule 'test-cm-rule', JSON.stringify oRuleOne - request = - command: 'forge_rule' - payload: JSON.stringify oRuleTwo - - cm.addListener 'newRule', ( evt ) => - console.log 'got new rule!' - test.deepEqual evt, oRuleTwo, 'Event is not the same!' - test.done() - - console.log 'new rule listener added' - cm.addListener 'init', ( evt ) => - test.deepEqual evt, oRuleOne, 'Event is not the same!' - console.log 'got and checked init' - - cm.processRequest oUser, request, ( answ ) => - console.log answ - if answ.code isnt 200 - test.ok false, 'testListener failed: ' + answ.message - test.done() - - console.log 'init listener added' -exports.testListener = ( test ) => - test.expect 2 - - oUser = objects.users.userOne - oRuleOne = objects.rules.ruleOne - oRuleTwo = objects.rules.ruleTwo - db.storeRule 'test-cm-rule', JSON.stringify oRuleOne - request = - command: 'forge_rule' - payload: JSON.stringify oRuleTwo - - cm.addListener 'newRule', ( evt ) => - console.log 'got new rule!' - test.deepEqual evt, oRuleTwo, 'Event is not the same!' - test.done() - - console.log 'new rule listener added' - cm.addListener 'init', ( evt ) => - test.deepEqual evt, oRuleOne, 'Event is not the same!' - console.log 'got and checked init' - - cm.processRequest oUser, request, ( answ ) => - console.log answ - if answ.code isnt 200 - test.ok false, 'testListener failed: ' + answ.message - test.done() - - console.log 'init listener added' + # oModule = objects.eps.epOne + # db.eventPollers.storeModule oUser.username, oModule + # request = + # command: 'get_event_pollers' + + # cm.processRequest oUser, request, ( answ ) => + # test.strictEqual 200, answ.code, 'Empty payload did not return 200' + # console.log answ + # test.done() diff --git a/testing/test_config.coffee b/testing/test_config.coffee index e4cd177..4cab3d8 100644 --- a/testing/test_config.coffee +++ b/testing/test_config.coffee @@ -1,46 +1,43 @@ path = require 'path' +logger = require path.join '..', 'js-coffee', 'logging' +log = logger.getLogger + nolog: true +conf = require path.join '..', 'js-coffee', 'config' +conf + logger: log -exports.setUp = ( cb ) => - logger = require path.join '..', 'js-coffee', 'logging' - log = logger.getLogger - nolog: true - @conf = require path.join '..', 'js-coffee', 'config' - @conf - logger: log - cb() - -exports.testRequire = ( test ) => +exports.testRequire = ( test ) -> test.expect 1 - test.ok @conf.isReady(), 'File does not exist!' + test.ok conf.isReady(), 'File does not exist!' test.done() -exports.testParameters = ( test ) => +exports.testParameters = ( test ) -> reqProp = [ 'mode' 'io-level' 'file-level' ] test.expect 3 + reqProp.length - test.ok @conf.getHttpPort(), 'HTTP port does not exist!' - test.ok @conf.getDbPort(), 'DB port does not exist!' - logconf = @conf.getLogConf() + test.ok conf.getHttpPort(), 'HTTP port does not exist!' + test.ok conf.getDbPort(), 'DB port does not exist!' + logconf = conf.getLogConf() test.ok logconf, 'Log config does not exist!' for prop in reqProp test.ok logconf[prop], "Log conf property #{ prop } does not exist!" test.done() -exports.testDifferentConfigFile = ( test ) => +exports.testDifferentConfigFile = ( test ) -> test.expect 1 - @conf + conf # nolog: true configPath: path.join 'testing', 'files', 'jsonTestConfig.json' - test.ok @conf.isReady(), 'Different path not loaded!' + test.ok conf.isReady(), 'Different path not loaded!' test.done() -exports.testNoConfigFile = ( test ) => +exports.testNoConfigFile = ( test ) -> test.expect 1 - @conf + conf nolog: true configPath: 'wrongpath.file' - test.strictEqual @conf.isReady(), false, 'Wrong path still loaded!' + test.strictEqual conf.isReady(), false, 'Wrong path still loaded!' test.done() diff --git a/testing/test_logging.coffee b/testing/test_logging.coffee index d88b8f3..d1d053e 100644 --- a/testing/test_logging.coffee +++ b/testing/test_logging.coffee @@ -1,8 +1,10 @@ path = require 'path' fs = require 'fs' +stdPath = path.resolve __dirname, '..', 'logs', 'server.log' +logger = require path.join '..', 'js-coffee', 'logging' getLog = ( strPath, cb ) -> - fWait = => + fWait = -> # cb fs.readFileSync path, 'utf-8' str = fs.readFileSync path.resolve( strPath ), 'utf-8' arrStr = str.split "\n" @@ -13,17 +15,12 @@ getLog = ( strPath, cb ) -> cb arrStr.slice 0, arrStr.length - 1 setTimeout fWait, 100 -exports.setUp = ( cb ) => - @stdPath = path.resolve __dirname, '..', 'logs', 'server.log' +exports.setUp = ( cb ) -> try - fs.unlinkSync @stdPath - @logger = require path.join '..', 'js-coffee', 'logging' + fs.unlinkSync stdPath cb() - -# exports.tearDown = ( cb ) => -# cb() -exports.testCreate = ( test ) => +exports.testCreate = ( test ) -> test.expect 2 arrLogs = [ 'TL | testInitIO - info' @@ -32,12 +29,12 @@ exports.testCreate = ( test ) => ] args = {} args[ 'io-level' ] = 'error' - log = @logger.getLogger args + log = logger.getLogger args log.info arrLogs[0] log.warn arrLogs[1] log.error arrLogs[2] - test.ok fs.existsSync( @stdPath ), 'Log file does not exist!' - getLog @stdPath, ( arr ) -> + test.ok fs.existsSync( stdPath ), 'Log file does not exist!' + getLog stdPath, ( arr ) -> allCorrect = true for o,i in arr if o.msg is not arrLogs[i] @@ -45,20 +42,20 @@ exports.testCreate = ( test ) => test.ok allCorrect, 'Log file does not contain the correct entries!' test.done() -exports.testNoLog = ( test ) => +exports.testNoLog = ( test ) -> test.expect 1 - log = @logger.getLogger + log = logger.getLogger nolog: true log.info 'TL | test 1' - fWait = () => - test.ok !fs.existsSync( @stdPath ), 'Log file does still exist!' + fWait = () -> + test.ok !fs.existsSync( stdPath ), 'Log file does still exist!' test.done() setTimeout fWait, 100 -exports.testCustomPath = ( test ) => +exports.testCustomPath = ( test ) -> test.expect 2 strInfo = 'TL | custom path test 1' @@ -67,10 +64,10 @@ exports.testCustomPath = ( test ) => args[ 'file-path' ] = strPath args[ 'io-level' ] = 'error' - log = @logger.getLogger args + log = logger.getLogger args log.info strInfo - fWait = () => + fWait = () -> test.ok fs.existsSync( strPath ), 'Custom log file does not exist!' getLog strPath, ( arr ) -> test.ok arr[0].msg is strInfo, 'Custom log file not correct!' @@ -80,7 +77,7 @@ exports.testCustomPath = ( test ) => setTimeout fWait, 100 -exports.testWrongPath = ( test ) => +exports.testWrongPath = ( test ) -> empty = [ 'trace' 'debug' @@ -96,7 +93,7 @@ exports.testWrongPath = ( test ) => args = {} args[ 'file-path' ] = strPath args[ 'io-level' ] = 'error' - log = @logger.getLogger args + log = logger.getLogger args test.ok prop in empty, "#{ prop } shouldn't be here" for prop of log test.done() diff --git a/testing/test_persistence.coffee b/testing/test_persistence.coffee index cb3072a..2f354cb 100644 --- a/testing/test_persistence.coffee +++ b/testing/test_persistence.coffee @@ -18,23 +18,36 @@ opts = opts[ 'db-port' ] = 6379 db opts + +oEvtOne = objects.events.eventOne +oEvtTwo = objects.events.eventTwo +oUser = objects.users.userOne +oEpOne = objects.eps.epOne +oEpTwo = objects.eps.epTwo +oRuleOne = objects.rules.ruleOne +oRuleTwo = objects.rules.ruleTwo + +exports.tearDown = ( cb ) -> + db.deleteUser oUser.username + setTimeout cb, 100 + # ### # # Test AVAILABILITY # ### exports.Availability = - testRequire: ( test ) => + testRequire: ( test ) -> test.expect 1 test.ok db, 'DB interface loaded' test.done() - testConnect: ( test ) => + testConnect: ( test ) -> test.expect 1 db.isConnected ( err ) -> test.ifError err, 'Connection failed!' test.done() # We cannot test for no db-port, since node-redis then assumes standard port - testWrongDbPort: ( test ) => + testWrongDbPort: ( test ) -> test.expect 1 db.initPort 13410 @@ -43,38 +56,37 @@ exports.Availability = db.initPort 6379 test.done() - testPurgeQueue: ( test ) => + testPurgeQueue: ( test ) -> test.expect 2 - db.pushEvent objects.events.eventOne + db.pushEvent oEvtOne db.purgeEventQueue() - db.popEvent ( err, obj ) => + db.popEvent ( err, obj ) -> test.ifError err, 'Error during pop after purging!' test.strictEqual obj, null, 'There was an event in the queue!?' test.done() - ### # Test EVENT QUEUE ### exports.EventQueue = - testEmptyPopping: ( test ) => + testEmptyPopping: ( test ) -> test.expect 2 db.purgeEventQueue() - db.popEvent ( err, obj ) => + db.popEvent ( err, obj ) -> test.ifError err, 'Error during pop after purging!' test.strictEqual obj, null, 'There was an event in the queue!?' test.done() - testEmptyPushing: ( test ) => + testEmptyPushing: ( test ) -> test.expect 2 db.pushEvent null - db.popEvent ( err, obj ) => + db.popEvent ( err, obj ) -> test.ifError err, 'Error during non-empty pushing!' test.strictEqual obj, null, @@ -82,21 +94,21 @@ exports.EventQueue = test.done() - testNonEmptyPopping: ( test ) => + testNonEmptyPopping: ( test ) -> test.expect 3 - db.pushEvent objects.events.eventOne - db.popEvent ( err, obj ) => + db.pushEvent oEvtOne + db.popEvent ( err, obj ) -> test.ifError err, 'Error during non-empty popping!' test.notStrictEqual obj, null, 'There was no event in the queue!' - test.deepEqual objects.events.eventOne, obj, + test.deepEqual oEvtOne, obj, 'Wrong event in queue!' test.done() - testMultiplePushAndPops: ( test ) => + testMultiplePushAndPops: ( test ) -> test.expect 6 semaphore = 2 @@ -105,23 +117,23 @@ exports.EventQueue = test.done() - db.pushEvent objects.events.eventOne - db.pushEvent objects.events.eventTwo + db.pushEvent oEvtOne + db.pushEvent oEvtTwo # eventually it would be wise to not care about the order of events - db.popEvent ( err, obj ) => + db.popEvent ( err, obj ) -> test.ifError err, 'Error during multiple push and pop!' test.notStrictEqual obj, null, 'There was no event in the queue!' - test.deepEqual objects.events.eventOne, obj, + test.deepEqual oEvtOne, obj, 'Wrong event in queue!' forkEnds() - db.popEvent ( err, obj ) => + db.popEvent ( err, obj ) -> test.ifError err, 'Error during multiple push and pop!' test.notStrictEqual obj, null, 'There was no event in the queue!' - test.deepEqual objects.events.eventTwo, obj, + test.deepEqual oEvtTwo, obj, 'Wrong event in queue!' forkEnds() @@ -131,110 +143,106 @@ exports.EventQueue = # since Action Invoker uses the same class ### exports.EventPoller = - setUp: ( cb ) => - @userId = 'tester1' - @event1id = 'test-event-poller_1' - @event2id = 'test-event-poller_2' - cb() - tearDown: ( cb ) => - db.eventPollers.unlinkModule @event1id, @userId - db.eventPollers.deleteModule @event1id - db.eventPollers.unlinkModule @event2id, @userId - db.eventPollers.deleteModule @event2id + tearDown: ( cb ) -> + # db.eventPollers.unlinkModule oEpOne.id, oUser.username + db.eventPollers.deleteModule oEpOne.id + # db.eventPollers.unlinkModule oEpTwo.id, oUser.username + db.eventPollers.deleteModule oEpTwo.id cb() - testCreateAndRead: ( test ) => + testCreateAndRead: ( test ) -> test.expect 3 - db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1 + db.eventPollers.storeModule oUser.username, oEpOne # test that the ID shows up in the set - db.eventPollers.getModuleIds ( err , obj ) => - test.ok @event1id in obj, + db.eventPollers.getModuleIds ( err , obj ) -> + test.ok oEpOne.id in obj, 'Expected key not in event-pollers set' # the retrieved object really is the one we expected - db.eventPollers.getModule @event1id, ( err , obj ) => - test.deepEqual obj, objects.eps.ep1, + db.eventPollers.getModule oEpOne.id, ( err , obj ) -> + test.deepEqual obj, oEpOne, 'Retrieved Event Poller is not what we expected' # Ensure the event poller is in the list of all existing ones - db.eventPollers.getModules ( err , obj ) => - test.deepEqual objects.eps.ep1, obj[@event1id], + db.eventPollers.getModules ( err , obj ) -> + test.deepEqual oEpOne, obj[oEpOne.id], 'Event Poller ist not in result set' - - test.done() - testUpdate: ( test ) => + testUpdate: ( test ) -> test.expect 2 + oTmp = {} + oTmp[key] = val for key, val of oEpOne + oTmp.public = 'true' + # store an entry to start with - db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1 - db.eventPollers.storeModule @event1id, @userId, objects.eps.ep2 + db.eventPollers.storeModule oUser.username, oEpOne + db.eventPollers.storeModule oUser.username, oTmp # the retrieved object really is the one we expected - db.eventPollers.getModule @event1id, ( err , obj ) => - test.deepEqual obj, objects.eps.ep2, + db.eventPollers.getModule oEpOne.id, ( err , obj ) -> + test.deepEqual obj, oTmp, 'Retrieved Event Poller is not what we expected' # Ensure the event poller is in the list of all existing ones - db.eventPollers.getModules ( err , obj ) => - test.deepEqual objects.eps.ep2, obj[@event1id], + db.eventPollers.getModules ( err , obj ) -> + test.deepEqual oTmp, obj[oEpOne.id], 'Event Poller ist not in result set' test.done() - testDelete: ( test ) => + testDelete: ( test ) -> test.expect 2 # store an entry to start with - db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1 + db.eventPollers.storeModule oUser.username, oEpOne # Ensure the event poller has been deleted - db.eventPollers.deleteModule @event1id - db.eventPollers.getModule @event1id, ( err , obj ) => + db.eventPollers.deleteModule oEpOne.id + db.eventPollers.getModule oEpOne.id, ( err , obj ) -> test.strictEqual obj, null, 'Event Poller still exists' # Ensure the ID has been removed from the set - db.eventPollers.getModuleIds ( err , obj ) => - test.ok @event1id not in obj, + db.eventPollers.getModuleIds ( err , obj ) -> + test.ok oEpOne.id not in obj, 'Event Poller key still exists in set' test.done() - testFetchSeveral: ( test ) => + testFetchSeveral: ( test ) -> test.expect 3 - semaphore = 2 - fCheckInvoker = ( modname, mod ) => + fCheckInvoker = ( modname, mod ) -> myTest = test forkEnds = () -> if --semaphore is 0 myTest.done() - ( err, obj ) => + ( err, obj ) -> myTest.deepEqual mod, obj, "Invoker #{ modname } does not equal the expected one" forkEnds() - db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1 - db.eventPollers.storeModule @event2id, @userId, objects.eps.ep2 - db.eventPollers.getModuleIds ( err, obj ) => - test.ok @event1id in obj and @event2id in obj, + db.eventPollers.storeModule oUser.username, oEpOne + db.eventPollers.storeModule oUser.username, oEpTwo + db.eventPollers.getModuleIds ( err, obj ) -> + test.ok oEpOne.id in obj and oEpTwo.id in obj, 'Not all event poller Ids in set' - db.eventPollers.getModule @event1id, fCheckInvoker @event1id, objects.eps.ep1 - db.eventPollers.getModule @event2id, fCheckInvoker @event2id, objects.eps.ep2 + db.eventPollers.getModule oEpOne.id, fCheckInvoker oEpOne.id, oEpOne + db.eventPollers.getModule oEpTwo.id, fCheckInvoker oEpTwo.id, oEpTwo ### # Test EVENT POLLER PARAMS ### exports.EventPollerParams = - testCreateAndRead: ( test ) => + testCreateAndRead: ( test ) -> test.expect 2 userId = 'tester1' @@ -245,18 +253,18 @@ exports.EventPollerParams = db.eventPollers.storeUserParams eventId, userId, params # test that the ID shows up in the set - db.eventPollers.getUserParamsIds ( err, obj ) => + db.eventPollers.getUserParamsIds ( err, obj ) -> test.ok eventId+':'+userId in obj, 'Expected key not in event-params set' # the retrieved object really is the one we expected - db.eventPollers.getUserParams eventId, userId, ( err, obj ) => + db.eventPollers.getUserParams eventId, userId, ( err, obj ) -> test.strictEqual obj, params, 'Retrieved event params is not what we expected' db.eventPollers.deleteUserParams eventId, userId test.done() - testUpdate: ( test ) => + testUpdate: ( test ) -> test.expect 1 userId = 'tester1' @@ -269,14 +277,14 @@ exports.EventPollerParams = db.eventPollers.storeUserParams eventId, userId, paramsNew # the retrieved object really is the one we expected - db.eventPollers.getUserParams eventId, userId, ( err, obj ) => + db.eventPollers.getUserParams eventId, userId, ( err, obj ) -> test.strictEqual obj, paramsNew, 'Retrieved event params is not what we expected' db.eventPollers.deleteUserParams eventId, userId test.done() - testDelete: ( test ) => + testDelete: ( test ) -> test.expect 2 userId = 'tester1' @@ -288,11 +296,11 @@ exports.EventPollerParams = db.eventPollers.deleteUserParams eventId, userId # Ensure the event params have been deleted - db.eventPollers.getUserParams eventId, userId, ( err, obj ) => + db.eventPollers.getUserParams eventId, userId, ( err, obj ) -> test.strictEqual obj, null, 'Event params still exists' # Ensure the ID has been removed from the set - db.eventPollers.getUserParamsIds ( err, obj ) => + db.eventPollers.getUserParamsIds ( err, obj ) -> test.ok eventId+':'+userId not in obj, 'Event Params key still exists in set' @@ -303,194 +311,189 @@ exports.EventPollerParams = # Test RULES ### exports.Rules = - setUp: ( cb ) => - @userId = 'tester-1' - @ruleId = 'test-rule_1' + tearDown: ( cb ) -> + db.deleteRule oRuleOne.id cb() - tearDown: ( cb ) => - db.deleteRule @ruleId - cb() - - testCreateAndRead: ( test ) => + testCreateAndRead: ( test ) -> test.expect 3 # store an entry to start with - db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne + db.storeRule oRuleOne.id, JSON.stringify oRuleOne # test that the ID shows up in the set - db.getRuleIds ( err, obj ) => - test.ok @ruleId in obj, + db.getRuleIds ( err, obj ) -> + test.ok oRuleOne.id in obj, 'Expected key not in rule key set' # the retrieved object really is the one we expected - db.getRule @ruleId, ( err, obj ) => - test.deepEqual JSON.parse(obj), objects.rules.ruleOne, + db.getRule oRuleOne.id, ( err, obj ) -> + test.deepEqual JSON.parse(obj), oRuleOne, 'Retrieved rule is not what we expected' # Ensure the rule is in the list of all existing ones - db.getRules ( err , obj ) => - test.deepEqual objects.rules.ruleOne, JSON.parse( obj[@ruleId] ), + db.getRules ( err , obj ) -> + test.deepEqual oRuleOne, JSON.parse( obj[oRuleOne.id] ), 'Rule not in result set' test.done() - testUpdate: ( test ) => + testUpdate: ( test ) -> test.expect 1 # store an entry to start with - db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne - db.storeRule @ruleId, JSON.stringify objects.rules.ruleTwo + db.storeRule oRuleOne.id, JSON.stringify oRuleOne + db.storeRule oRuleOne.id, JSON.stringify oRuleTwo # the retrieved object really is the one we expected - db.getRule @ruleId, ( err, obj ) => - test.deepEqual JSON.parse(obj), objects.rules.ruleTwo, + db.getRule oRuleOne.id, ( err, obj ) -> + test.deepEqual JSON.parse(obj), oRuleTwo, 'Retrieved rule is not what we expected' test.done() - testDelete: ( test ) => + testDelete: ( test ) -> test.expect 2 # store an entry to start with and delete it right away - db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne - db.deleteRule @ruleId + db.storeRule oRuleOne.id, JSON.stringify oRuleOne + db.deleteRule oRuleOne.id # Ensure the event params have been deleted - db.getRule @ruleId, ( err, obj ) => + db.getRule oRuleOne.id, ( err, obj ) -> test.strictEqual obj, null, 'Rule still exists' # Ensure the ID has been removed from the set - db.getRuleIds ( err, obj ) => - test.ok @ruleId not in obj, + db.getRuleIds ( err, obj ) -> + test.ok oRuleOne.id not in obj, 'Rule key still exists in set' test.done() - testLink: ( test ) => + testLink: ( test ) -> test.expect 2 # link a rule to the user - db.linkRule @ruleId, @userId + db.linkRule oRuleOne.id, oUser.username # Ensure the user is linked to the rule - db.getRuleLinkedUsers @ruleId, ( err, obj ) => - test.ok @userId in obj, - "Rule not linked to user #{ @userId }" + db.getRuleLinkedUsers oRuleOne.id, ( err, obj ) -> + test.ok oUser.username in obj, + "Rule not linked to user #{ oUser.username }" # Ensure the rule is linked to the user - db.getUserLinkedRules @userId, ( err, obj ) => - test.ok @ruleId in obj, - "User not linked to rule #{ @ruleId }" + db.getUserLinkedRules oUser.username, ( err, obj ) -> + test.ok oRuleOne.id in obj, + "User not linked to rule #{ oRuleOne.id }" test.done() - testUnlink: ( test ) => + testUnlink: ( test ) -> test.expect 2 # link and unlink immediately afterwards - db.linkRule @ruleId, @userId - db.unlinkRule @ruleId, @userId + db.linkRule oRuleOne.id, oUser.username + db.unlinkRule oRuleOne.id, oUser.username # Ensure the user is linked to the rule - db.getRuleLinkedUsers @ruleId, ( err, obj ) => - test.ok @userId not in obj, - "Rule still linked to user #{ @userId }" + db.getRuleLinkedUsers oRuleOne.id, ( err, obj ) -> + test.ok oUser.username not in obj, + "Rule still linked to user #{ oUser.username }" # Ensure the rule is linked to the user - db.getUserLinkedRules @userId, ( err, obj ) => - test.ok @ruleId not in obj, - "User still linked to rule #{ @ruleId }" + db.getUserLinkedRules oUser.username, ( err, obj ) -> + test.ok oRuleOne.id not in obj, + "User still linked to rule #{ oRuleOne.id }" test.done() - testActivate: ( test ) => + testActivate: ( test ) -> test.expect 4 usr = username: "tester-1" password: "tester-1" db.storeUser usr - db.activateRule @ruleId, @userId + db.activateRule oRuleOne.id, oUser.username # activate a rule for a user # Ensure the user is activated to the rule - db.getRuleActivatedUsers @ruleId, ( err, obj ) => - test.ok @userId in obj, - "Rule not activated for user #{ @userId }" + db.getRuleActivatedUsers oRuleOne.id, ( err, obj ) -> + test.ok oUser.username in obj, + "Rule not activated for user #{ oUser.username }" # Ensure the rule is linked to the user - db.getUserActivatedRules @userId, ( err, obj ) => - test.ok @ruleId in obj, - "User not activated for rule #{ @ruleId }" + db.getUserActivatedRules oUser.username, ( err, obj ) -> + test.ok oRuleOne.id in obj, + "User not activated for rule #{ oRuleOne.id }" # Ensure the rule is showing up in all active rules - db.getAllActivatedRuleIdsPerUser ( err, obj ) => - test.notStrictEqual obj[@userId], undefined, - "User #{ @userId } not in activated rules set" - if obj[@userId] - test.ok @ruleId in obj[@userId], - "Rule #{ @ruleId } not in activated rules set" + db.getAllActivatedRuleIdsPerUser ( err, obj ) -> + test.notStrictEqual obj[oUser.username], undefined, + "User #{ oUser.username } not in activated rules set" + if obj[oUser.username] + test.ok oRuleOne.id in obj[oUser.username], + "Rule #{ oRuleOne.id } not in activated rules set" # else # test.ok true, # "Dummy so we meet the expected num of tests" test.done() - testDeactivate: ( test ) => + testDeactivate: ( test ) -> test.expect 3 # store an entry to start with and link it to te user - db.activateRule @ruleId, @userId - db.deactivateRule @ruleId, @userId + db.activateRule oRuleOne.id, oUser.username + db.deactivateRule oRuleOne.id, oUser.username # Ensure the user is linked to the rule - db.getRuleActivatedUsers @ruleId, ( err, obj ) => - test.ok @userId not in obj, - "Rule still activated for user #{ @userId }" + db.getRuleActivatedUsers oRuleOne.id, ( err, obj ) -> + test.ok oUser.username not in obj, + "Rule still activated for user #{ oUser.username }" # Ensure the rule is linked to the user - db.getUserActivatedRules @userId, ( err, obj ) => - test.ok @ruleId not in obj, - "User still activated for rule #{ @ruleId }" + db.getUserActivatedRules oUser.username, ( err, obj ) -> + test.ok oRuleOne.id not in obj, + "User still activated for rule #{ oRuleOne.id }" # Ensure the rule is showing up in all active rules - db.getAllActivatedRuleIdsPerUser ( err, obj ) => - if obj[@userId] - test.ok @ruleId not in obj[@userId], - "Rule #{ @ruleId } still in activated rules set" + db.getAllActivatedRuleIdsPerUser ( err, obj ) -> + if obj[oUser.username] + test.ok oRuleOne.id not in obj[oUser.username], + "Rule #{ oRuleOne.id } still in activated rules set" else test.ok true, "We are fine since there are no entries for this user anymore" test.done() - testUnlinkAndDeactivateAfterDeletion: ( test ) => + testUnlinkAndDeactivateAfterDeletion: ( test ) -> test.expect 2 # store an entry to start with and link it to te user - db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne - db.linkRule @ruleId, @userId - db.activateRule @ruleId, @userId + db.storeRule oRuleOne.id, JSON.stringify oRuleOne + db.linkRule oRuleOne.id, oUser.username + db.activateRule oRuleOne.id, oUser.username # We need to wait here and there since these calls are asynchronous - fWaitForTest = () => + fWaitForTest = () -> # Ensure the user is unlinked to the rule - db.getUserLinkedRules @userId, ( err, obj ) => - test.ok @ruleId not in obj, - "Rule #{ @ruleId } still linked to user #{ @userId }" + db.getUserLinkedRules oUser.username, ( err, obj ) -> + test.ok oRuleOne.id not in obj, + "Rule #{ oRuleOne.id } still linked to user #{ oUser.username }" # Ensure the rule is deactivated for the user - db.getUserActivatedRules @userId, ( err, obj ) => - test.ok @ruleId not in obj, - "Rule #{ @ruleId } still activated for user #{ @userId }" + db.getUserActivatedRules oUser.username, ( err, obj ) -> + test.ok oRuleOne.id not in obj, + "Rule #{ oRuleOne.id } still activated for user #{ oUser.username }" test.done() - fWaitForDeletion = () => - db.deleteRule @ruleId + fWaitForDeletion = () -> + db.deleteRule oRuleOne.id setTimeout fWaitForTest, 300 setTimeout fWaitForDeletion, 100 @@ -500,12 +503,7 @@ exports.Rules = # Test USER ### exports.User = - - tearDown: ( cb ) => - db.deleteUser objects.users.userOne.username - cb() - - testCreateInvalid: ( test ) => + testCreateInvalid: ( test ) -> test.expect 4 oUserInvOne = @@ -517,134 +515,126 @@ exports.User = db.storeUser oUserInvOne db.storeUser oUserInvTwo - db.getUser oUserInvOne.username, ( err, obj ) => + db.getUser oUserInvOne.username, ( err, obj ) -> test.strictEqual obj, null, 'User One was stored!?' - db.getUser oUserInvTwo.username, ( err, obj ) => + db.getUser oUserInvTwo.username, ( err, obj ) -> test.strictEqual obj, null, 'User Two was stored!?' - db.getUserIds ( err, obj ) => + db.getUserIds ( err, obj ) -> test.ok oUserInvOne.username not in obj, 'User key was stored!?' test.ok oUserInvTwo.username not in obj, 'User key was stored!?' test.done() - testDelete: ( test ) => + testDelete: ( test ) -> test.expect 2 - oUsr = objects.users.userOne # Store the user - db.storeUser oUsr + db.storeUser oUser - db.getUser oUsr.username, ( err, obj ) => - test.deepEqual obj, oUsr, - "User #{ objects.users.userOne.username } is not what we expect!" + db.getUser oUser.username, ( err, obj ) -> + test.deepEqual obj, oUser, + "User #{ oUser.username } is not what we expect!" - db.getUserIds ( err, obj ) => - test.ok oUsr.username in obj, + db.getUserIds ( err, obj ) -> + test.ok oUser.username in obj, 'User key was not stored!?' test.done() - testUpdate: ( test ) => + testUpdate: ( test ) -> test.expect 2 - oUsr = objects.users.userOne - # Store the user - db.storeUser oUsr - oUsr.password = "password-update" - db.storeUser oUsr + db.storeUser oUser + oUser.password = "password-update" + db.storeUser oUser - db.getUser oUsr.username, ( err, obj ) => - test.deepEqual obj, oUsr, - "User #{ oUsr.username } is not what we expect!" + db.getUser oUser.username, ( err, obj ) -> + test.deepEqual obj, oUser, + "User #{ oUser.username } is not what we expect!" - db.getUserIds ( err, obj ) => - test.ok oUsr.username in obj, + db.getUserIds ( err, obj ) -> + test.ok oUser.username in obj, 'User key was not stored!?' - db.deleteUser oUsr.username + db.deleteUser oUser.username test.done() - testDelete: ( test ) => + testDelete: ( test ) -> test.expect 2 - oUsr = objects.users.userOne - # Wait until the user and his rules and roles are deleted - fWaitForDeletion = () => - db.getUserIds ( err, obj ) => - test.ok oUsr.username not in obj, + fWaitForDeletion = () -> + db.getUserIds ( err, obj ) -> + test.ok oUser.username not in obj, 'User key still in set!' - db.getUser oUsr.username, ( err, obj ) => + db.getUser oUser.username, ( err, obj ) -> test.strictEqual obj, null, 'User key still exists!' test.done() # Store the user and make some links - db.storeUser oUsr - db.deleteUser oUsr.username + db.storeUser oUser + db.deleteUser oUser.username setTimeout fWaitForDeletion, 100 - testDeleteLinks: ( test ) => + testDeleteLinks: ( test ) -> test.expect 4 - oUsr = objects.users.userOne - # Wait until the user and his rules and roles are stored - fWaitForPersistence = () => - db.deleteUser oUsr.username + fWaitForPersistence = () -> + db.deleteUser oUser.username setTimeout fWaitForDeletion, 200 # Wait until the user and his rules and roles are deleted - fWaitForDeletion = () => - db.getRoleUsers 'tester', ( err, obj ) => - test.ok oUsr.username not in obj, + fWaitForDeletion = () -> + db.getRoleUsers 'tester', ( err, obj ) -> + test.ok oUser.username not in obj, 'User key still in role tester!' - db.getUserRoles oUsr.username, ( err, obj ) => + db.getUserRoles oUser.username, ( err, obj ) -> test.ok obj.length is 0, 'User still associated to roles!' - db.getUserLinkedRules oUsr.username, ( err, obj ) => + db.getUserLinkedRules oUser.username, ( err, obj ) -> test.ok obj.length is 0, 'User still associated to rules!' - db.getUserActivatedRules oUsr.username, ( err, obj ) => + db.getUserActivatedRules oUser.username, ( err, obj ) -> test.ok obj.length is 0, 'User still associated to activated rules!' test.done() # Store the user and make some links - db.storeUser oUsr - db.linkRule 'rule-1', oUsr.username - db.linkRule 'rule-2', oUsr.username - db.linkRule 'rule-3', oUsr.username - db.activateRule 'rule-1', oUsr.username - db.storeUserRole oUsr.username, 'tester' + db.storeUser oUser + db.linkRule 'rule-1', oUser.username + db.linkRule 'rule-2', oUser.username + db.linkRule 'rule-3', oUser.username + db.activateRule 'rule-1', oUser.username + db.storeUserRole oUser.username, 'tester' setTimeout fWaitForPersistence, 100 - testLogin: ( test ) => + testLogin: ( test ) -> test.expect 3 - oUsr = objects.users.userOne # Store the user and make some links - db.storeUser oUsr - db.loginUser oUsr.username, oUsr.password, ( err, obj ) => - test.deepEqual obj, oUsr, + db.storeUser oUser + db.loginUser oUser.username, oUser.password, ( err, obj ) -> + test.deepEqual obj, oUser, 'User not logged in!' - db.loginUser 'dummyname', oUsr.password, ( err, obj ) => + db.loginUser 'dummyname', oUser.password, ( err, obj ) -> test.strictEqual obj, null, 'User logged in?!' - db.loginUser oUsr.username, 'wrongpass', ( err, obj ) => + db.loginUser oUser.username, 'wrongpass', ( err, obj ) -> test.strictEqual obj, null, 'User logged in?!' @@ -655,42 +645,37 @@ exports.User = # Test ROLES ### exports.Roles = - tearDown: ( cb ) => - db.deleteUser objects.users.userOne.username - cb() - testStore: ( test ) => + testStore: ( test ) -> test.expect 2 - oUsr = objects.users.userOne - db.storeUser oUsr - db.storeUserRole oUsr.username, 'tester' + db.storeUser oUser + db.storeUserRole oUser.username, 'tester' - db.getUserRoles oUsr.username, ( err, obj ) => + db.getUserRoles oUser.username, ( err, obj ) -> test.ok 'tester' in obj, 'User role tester not stored!' - db.getRoleUsers 'tester', ( err, obj ) => - test.ok oUsr.username in obj, - "User #{ oUsr.username } not stored in role tester!" + db.getRoleUsers 'tester', ( err, obj ) -> + test.ok oUser.username in obj, + "User #{ oUser.username } not stored in role tester!" test.done() - testDelete: ( test ) => + testDelete: ( test ) -> test.expect 2 - oUsr = objects.users.userOne - db.storeUser oUsr - db.storeUserRole oUsr.username, 'tester' - db.removeUserRole oUsr.username, 'tester' + db.storeUser oUser + db.storeUserRole oUser.username, 'tester' + db.removeUserRole oUser.username, 'tester' - db.getUserRoles oUsr.username, ( err, obj ) => + db.getUserRoles oUser.username, ( err, obj ) -> test.ok 'tester' not in obj, 'User role tester not stored!' - db.getRoleUsers 'tester', ( err, obj ) => - test.ok oUsr.username not in obj, - "User #{ oUsr.username } not stored in role tester!" + db.getRoleUsers 'tester', ( err, obj ) -> + test.ok oUser.username not in obj, + "User #{ oUser.username } not stored in role tester!" test.done() # store an entry to start with diff --git a/testing/test_request-handler.coffee b/testing/test_request-handler.coffee index 3387dae..bf0edb5 100644 --- a/testing/test_request-handler.coffee +++ b/testing/test_request-handler.coffee @@ -5,6 +5,7 @@ events = require 'events' cp = require 'child_process' qs = require 'querystring' + try data = fs.readFileSync path.resolve( 'testing', 'files', 'testObjects.json' ), 'utf8' try @@ -21,14 +22,13 @@ opts = opts[ 'db-port' ] = 6379 db = require path.join '..', 'js-coffee', 'persistence' db opts + rh = require path.join '..', 'js-coffee', 'request-handler' -args = - logger: log -args[ 'request-service' ] = ( usr, obj, cb ) -> +opts[ 'request-service' ] = ( usr, obj, cb ) -> test.ok false, 'testEvent should not cause a service request call' -args[ 'shutdown-function' ] = () -> +opts[ 'shutdown-function' ] = () -> test.ok false, 'testEvent should not cause a system shutdown' -rh args +rh opts createRequest = ( query, origUrl ) -> req = new events.EventEmitter() @@ -120,17 +120,18 @@ exports.session = postRequestData req, qs.stringify usr # emit the data post event exports.events = - setUp: ( cb ) => + setUp: ( cb ) -> db.purgeEventQueue() cb() - testCorrectEvent: ( test ) => +# This test seems to hang sometimes... maybe it's also happening somewhere else... + testCorrectEvent: ( test ) -> test.expect 2 oEvt = objects.events.eventOne semaphore = 2 - fPopEvent = () => + fPopEvent = () -> fCb = ( err, obj ) -> oEvt.eventid = obj.eventid # because the event id is generated by the system test.deepEqual obj, oEvt, 'Caught event is not what we expected' @@ -148,14 +149,14 @@ exports.events = postRequestData req, JSON.stringify oEvt # emit the data post event setTimeout fPopEvent, 200 # try to fetch the db entry - testIncorrectEvent: ( test ) => + testIncorrectEvent: ( test ) -> test.expect 2 oEvt = data: 'event misses event type property' semaphore = 2 - fPopEvent = () => + fPopEvent = () -> fCb = ( err, obj ) -> test.deepEqual obj, null, 'We caught an event!?' if --semaphore is 0 @@ -172,27 +173,27 @@ exports.events = postRequestData req, qs.stringify oEvt # emit the data post event setTimeout fPopEvent, 200 # try to fetch the db entry -exports.testLoginOrPage = ( test ) => +exports.testLoginOrPage = ( test ) -> test.expect 3 req = createRequest() req.query = page: 'forge_event' - resp = createResponse ( code, msg ) => + resp = createResponse ( code, msg ) -> # Ensure we have to login first test.ok msg.indexOf( 'document.title = \'Login\'' ) > 0, 'Didn\'t get login page?' req = createLoggedInRequest() req.query = page: 'forge_event' - resp = createResponse ( code, msg ) => + resp = createResponse ( code, msg ) -> # After being logged in we should get the expected page test.ok msg.indexOf( 'document.title = \'Event Forge!\'' ) > 0, 'Didn\' get forge page?' req = createLoggedInRequest() req.query = page: 'wrongpage' - resp = createResponse ( code, msg ) => + resp = createResponse ( code, msg ) -> # A wrong page request should give back an error page test.ok msg.indexOf( 'document.title = \'Error!\'' ) > 0, 'Didn\' get forge page?' @@ -203,17 +204,17 @@ exports.testLoginOrPage = ( test ) => rh.handleForge req, resp # set the handler to listening -exports.testUserCommandsNoLogin = ( test ) => +exports.testUserCommandsNoLogin = ( test ) -> test.expect 1 req = createRequest() - resp = createResponse ( code, msg ) => + resp = createResponse ( code, msg ) -> test.strictEqual code, 401, 'Login did not fail?' test.done() rh.handleUserCommand req, resp # set the handler to listening -exports.testUserCommands = ( test ) => +exports.testUserCommands = ( test ) -> test.expect 3 oReqData = @@ -237,7 +238,7 @@ exports.testUserCommands = ( test ) => rh args req = createLoggedInRequest() - resp = createResponse ( code, msg ) => + resp = createResponse ( code, msg ) -> test.strictEqual code, 200, 'Service wasn\'t happy with our request' test.deepEqual msg, oRespData, 'Service didn\'t return expected' test.done() diff --git a/testing/test_webapi-eca.coffee b/testing/test_webapi-eca.coffee index 65323f0..e6c20e2 100644 --- a/testing/test_webapi-eca.coffee +++ b/testing/test_webapi-eca.coffee @@ -2,17 +2,10 @@ cp = require 'child_process' path = require 'path' -# exports.setUp = ( cb ) => -# cb() - -# exports.tearDown = ( cb ) => -# @engine.send('die') -# cb() - # TODO test http shutdown command # TODO test wrong/invalid config file -exports.testShutDown = ( test ) => +exports.testShutDown = ( test ) -> test.expect 1 isRunning = true @@ -35,11 +28,11 @@ exports.testShutDown = ( test ) => if isRunning test.ok false, '"testShutDown" Engine didn\'t shut down!' engine.kill() - test.done() + setTimeout test.done, 100 setTimeout fWaitForStartup, 1000 -exports.testKill = ( test ) => +exports.testKill = ( test ) -> test.expect 1 pth = path.resolve 'js-coffee', 'webapi-eca' @@ -62,6 +55,9 @@ exports.testHttpPortAlreadyUsed = ( test ) => test.expect 1 isRunning = true pth = path.resolve 'js-coffee', 'webapi-eca' + + # Strange! why can't we make these variables local without + # the tests failing in one of the next tests... @engine_one = cp.fork pth, [ '-n', '-w', '8642' ] # [ '-i' , 'warn' ] @engine_one.on 'error', ( err ) -> console.log err @@ -89,7 +85,7 @@ exports.testHttpPortAlreadyUsed = ( test ) => setTimeout fWaitForFirstStartup, 1000 -exports.testHttpPortInvalid = ( test ) => +exports.testHttpPortInvalid = ( test ) -> test.expect 1 isRunning = true @@ -103,7 +99,7 @@ exports.testHttpPortInvalid = ( test ) => console.log err # Garbage collect eventually still running process - fWaitForDeath = () => + fWaitForDeath = () -> if isRunning test.ok false, '"testHttpPortInvalid" Engine didn\'t shut down!' test.done() @@ -111,7 +107,7 @@ exports.testHttpPortInvalid = ( test ) => setTimeout fWaitForDeath, 1000 -exports.testDbPortInvalid = ( test ) => +exports.testDbPortInvalid = ( test ) -> test.expect 1 isRunning = true @@ -125,7 +121,7 @@ exports.testDbPortInvalid = ( test ) => test.done() # Garbage collect eventually still running process - fWaitForDeath = () => + fWaitForDeath = () -> engine.kill() if isRunning test.ok false, '"testHttpPortInvalid" Engine didn\'t shut down!' diff --git a/webpages/handlers/coffee/forge_rule.coffee b/webpages/handlers/coffee/forge_rule.coffee index 95071c9..c3e38bb 100644 --- a/webpages/handlers/coffee/forge_rule.coffee +++ b/webpages/handlers/coffee/forge_rule.coffee @@ -182,10 +182,6 @@ fOnLoad = () -> conditions: {} #TODO Add conditions! actions: acts action_params: ap - # event_params: JSON.stringify ep - # conditions: JSON.stringify {} #TODO Add conditions! - # actions: JSON.stringify acts - # action_params: JSON.stringify ap obj.payload = JSON.stringify obj.payload $.post( '/usercommand', obj ) .done ( data ) -> diff --git a/webpages/handlers/js/admin.js b/webpages/handlers/js/admin.js index 8d7b0aa..d133294 100644 --- a/webpages/handlers/js/admin.js +++ b/webpages/handlers/js/admin.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.6.3 (function() { var fOnLoad; diff --git a/webpages/handlers/js/error.js b/webpages/handlers/js/error.js index c97b3f0..2bb94fc 100644 --- a/webpages/handlers/js/error.js +++ b/webpages/handlers/js/error.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.6.3 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_action_invoker.js b/webpages/handlers/js/forge_action_invoker.js index d46edb9..d1073f2 100644 --- a/webpages/handlers/js/forge_action_invoker.js +++ b/webpages/handlers/js/forge_action_invoker.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.6.3 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_event.js b/webpages/handlers/js/forge_event.js index 4951d18..90e5936 100644 --- a/webpages/handlers/js/forge_event.js +++ b/webpages/handlers/js/forge_event.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.6.3 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_event_poller.js b/webpages/handlers/js/forge_event_poller.js index edccd11..3001d4b 100644 --- a/webpages/handlers/js/forge_event_poller.js +++ b/webpages/handlers/js/forge_event_poller.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.6.3 (function() { var fOnLoad; diff --git a/webpages/handlers/js/forge_rule.js b/webpages/handlers/js/forge_rule.js index fb43119..f0c22ef 100644 --- a/webpages/handlers/js/forge_rule.js +++ b/webpages/handlers/js/forge_rule.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.6.3 (function() { var fOnLoad; diff --git a/webpages/handlers/js/login.js b/webpages/handlers/js/login.js index 348fc68..0f62b66 100644 --- a/webpages/handlers/js/login.js +++ b/webpages/handlers/js/login.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.7.1 +// Generated by CoffeeScript 1.6.3 (function() { var fOnLoad;