webapi-eca/testing/test_engine.coffee

144 lines
3.5 KiB
CoffeeScript
Raw Permalink Normal View History

2014-04-03 15:41:51 +00:00
fs = require 'fs'
path = require 'path'
try
data = fs.readFileSync path.resolve( 'testing', 'files', 'testObjects.json' ), 'utf8'
try
objects = JSON.parse data
catch err
console.log 'Error parsing standard objects file: ' + err.message
2014-04-03 15:41:51 +00:00
catch err
console.log 'Error fetching standard objects file: ' + err.message
2014-04-03 15:41:51 +00:00
2014-04-05 01:09:40 +00:00
logger = require path.join '..', 'js', 'logging'
log = logger.getLogger
nolog: true
2014-04-03 15:41:51 +00:00
opts =
logger: log
2014-04-03 15:41:51 +00:00
2014-04-05 01:09:40 +00:00
engine = require path.join '..', 'js', 'engine'
2014-04-03 15:41:51 +00:00
engine opts
2014-04-05 01:09:40 +00:00
db = require path.join '..', 'js', 'persistence'
2014-04-03 15:41:51 +00:00
db opts
listRules = engine.getListUserRules()
2014-04-03 15:41:51 +00:00
oUser = objects.users.userOne
oRuleOne = objects.rules.ruleOne
oRuleTwo = objects.rules.ruleTwo
2014-04-03 15:41:51 +00:00
oAiOne = objects.ais.aiOne
oAiTwo = objects.ais.aiTwo
2014-04-03 15:41:51 +00:00
exports.setUp = ( cb ) ->
engine.startEngine()
cb()
2014-04-03 15:41:51 +00:00
exports.tearDown = ( cb ) ->
db.deleteRule oRuleOne.id
db.actionInvokers.deleteModule oUser.username, oAiOne.id
db.actionInvokers.deleteModule oUser.username, oAiTwo.id
# TODO if user is deleted all his modules should be unlinked and deleted
db.deleteUser oUser.username
2014-04-03 15:41:51 +00:00
engine.internalEvent
2014-04-26 00:16:06 +00:00
intevent: 'del'
user: oUser.username
rule: oRuleOne
2014-04-03 15:41:51 +00:00
engine.internalEvent
2014-04-26 00:16:06 +00:00
intevent: 'del'
user: oUser.username
rule: oRuleTwo
engine.shutDown()
2014-04-03 15:41:51 +00:00
setTimeout cb, 200
2014-04-03 15:41:51 +00:00
exports.ruleEvents =
testInitAddDeleteMultiple: ( test ) ->
test.expect 2 + 2 * oRuleOne.actions.length + oRuleTwo.actions.length
db.storeUser oUser
db.storeRule oRuleOne.id, JSON.stringify oRuleOne
db.linkRule oRuleOne.id, oUser.username
db.activateRule oRuleOne.id, oUser.username
db.actionInvokers.storeModule oUser.username, oAiOne
db.actionInvokers.storeModule oUser.username, oAiTwo
test.strictEqual listRules[oUser.username], undefined, 'Initial user object exists!?'
engine.internalEvent
2014-04-26 00:16:06 +00:00
intevent: 'new'
user: oUser.username
rule: oRuleOne
fWaitForPersistence = () ->
for act in oRuleOne.actions
mod = ( act.split ' -> ' )[0]
test.ok listRules[oUser.username][oRuleOne.id].actions[mod], 'Missing action!'
engine.internalEvent
2014-04-26 00:16:06 +00:00
intevent: 'new'
user: oUser.username
rule: oRuleTwo
fWaitAgainForPersistence = () ->
for act in oRuleTwo.actions
mod = ( act.split ' -> ' )[0]
test.ok listRules[oUser.username][oRuleTwo.id].actions[mod], 'Missing action!'
engine.internalEvent
2014-04-26 00:16:06 +00:00
intevent: 'del'
user: oUser.username
rule: null
ruleId: oRuleTwo.id
for act in oRuleOne.actions
mod = ( act.split ' -> ' )[0]
test.ok listRules[oUser.username][oRuleOne.id].actions[mod], 'Missing action!'
engine.internalEvent
2014-04-26 00:16:06 +00:00
intevent: 'del'
user: oUser.username
rule: null
ruleId: oRuleOne.id
test.strictEqual listRules[oUser.username], undefined, 'Final user object exists!?'
test.done()
setTimeout fWaitAgainForPersistence, 200
setTimeout fWaitForPersistence, 200
# #TODO
# testUpdate: ( test ) ->
# test.expect 0
# test.done()
# db.storeUser oUser
# db.storeRule oRuleOne.id, JSON.stringify oRuleOne
# db.linkRule oRuleOne.id, oUser.username
# db.activateRule oRuleOne.id, oUser.username
# db.actionInvokers.storeModule oUser.username, oAiOne
# db.getAllActivatedRuleIdsPerUser ( err, obj ) ->
# console.log 'existing'
# console.log obj
# engine.internalEvent
# event: 'init'
# user: oUser.username
# rule: oRuleOne
# fCheckRules = () ->
# db.getAllActivatedRuleIdsPerUser ( err, obj ) ->
# console.log 'after init'
# console.log obj
# setTimeout fCheckRules, 500