webapi-eca/testing/test_engine.coffee

143 lines
3.5 KiB
CoffeeScript

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
catch err
console.log 'Error fetching standard objects file: ' + err.message
logger = require path.join '..', 'js', 'logging'
log = logger.getLogger
nolog: true
opts =
logger: log
engine = require path.join '..', 'js', 'engine'
engine opts
db = require path.join '..', 'js', 'persistence'
db opts
listRules = engine.getListUserRules()
oUser = objects.users.userOne
oRuleOne = objects.rules.ruleOne
oRuleTwo = objects.rules.ruleTwo
oAiOne = objects.ais.aiOne
oAiTwo = objects.ais.aiTwo
exports.setUp = ( cb ) ->
engine.startEngine()
cb()
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
engine.internalEvent
event: 'del'
user: oUser.username
rule: oRuleOne
engine.internalEvent
event: 'del'
user: oUser.username
rule: oRuleTwo
engine.shutDown()
setTimeout cb, 200
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
event: '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
event: '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
event: '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
event: '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