pimatic
Version:
A home automation server and framework for the Raspberry PI running on node.js
380 lines (321 loc) • 12.1 kB
text/coffeescript
assert = require "cassert"
Promise = require 'bluebird'
i18n = require 'i18n-pimatic'
events = require 'events'
M = require '../lib/matcher'
_ = require 'lodash'
i18n.configure(
locales:['en', 'de']
directory: __dirname + '/../locales'
defaultLocale: 'en'
)
env = require('../startup').env
createDummyParseContext = ->
variables = {}
functions = {}
return M.createParseContext(variables, functions)
describe "SwitchActionHandler", ->
frameworkDummy =
deviceManager:
devices: {}
getDevices: -> _.values()
switchActionProvider = new env.actions.SwitchActionProvider frameworkDummy
class DummySwitch extends env.devices.SwitchActuator
id: 'dummy-switch-id'
name: 'dummy switch'
dummySwitch = new DummySwitch()
frameworkDummy.deviceManager.devices['dummy-switch-id'] = dummySwitch
describe "#parseAction()", ->
turnOnCalled = false
turnOffCalled = false
beforeEach ->
turnOnCalled = false
dummySwitch.turnOn = ->
turnOnCalled = true
return Promise.resolve true
turnOffCalled = false
dummySwitch.turnOff = ->
turnOffCalled = true
return Promise.resolve true
validRulePrefixes = [
'turn the dummy switch'
'turn dummy switch'
'switch the dummy switch'
'switch dummy switch'
]
for rulePrefix in validRulePrefixes
do (rulePrefix) ->
ruleWithOn = rulePrefix + ' on'
it "should parse: #{ruleWithOn}", (finish) ->
context = createDummyParseContext()
result = switchActionProvider.parseAction(ruleWithOn, context)
assert result?
assert result.token is ruleWithOn
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert turnOnCalled
assert message is "turned dummy switch on"
finish()
).done()
ruleWithOff = rulePrefix + ' off'
it "should execute: #{ruleWithOff}", (finish) ->
context = createDummyParseContext()
result = switchActionProvider.parseAction(ruleWithOff, context)
assert result?
assert result.token is ruleWithOff
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert turnOffCalled
assert message is "turned dummy switch off"
finish()
).done()
it "should execute: turn on the dummy switch", (finish) ->
context = createDummyParseContext()
result = switchActionProvider.parseAction("turn on the dummy switch", context)
assert result?
assert result.token is "turn on the dummy switch"
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert turnOnCalled
assert message is "turned dummy switch on"
finish()
).done()
it 'should not execute: invalid-id on', ->
context = createDummyParseContext()
result = switchActionProvider.parseAction("invalid-id on", context)
assert not result?
assert not turnOnCalled
it 'should not execute: another dummy switch on', ->
context = createDummyParseContext()
result = switchActionProvider.parseAction("another dummy switch on", context)
assert not result?
assert not turnOnCalled
describe "ShutterActionHandler", ->
frameworkDummy =
deviceManager:
devices: {}
getDevices: -> _.values()
shutterActionProvider = new env.actions.ShutterActionProvider frameworkDummy
stopShutterActionProvider = new env.actions.StopShutterActionProvider frameworkDummy
class Shutter extends env.devices.ShutterController
id: 'shutter-id'
name: 'shutter'
moveToPosition: () -> Promise.resolve()
shutterDevice = new Shutter()
frameworkDummy.deviceManager.devices['dummy-switch-id'] = shutterDevice
describe "#parseAction()", ->
moveUpCalled = false
moveDownCalled = false
stopCalled = false
beforeEach ->
moveUpCalled = false
shutterDevice.moveUp = ->
moveUpCalled = true
return Promise.resolve true
moveDownCalled = false
shutterDevice.moveDown = ->
moveDownCalled = true
return Promise.resolve true
stopCalled = false
shutterDevice.stop = ->
stopCalled = true
return Promise.resolve true
it "should parse: raise shutter up", (finish) ->
context = createDummyParseContext()
result = shutterActionProvider.parseAction('raise shutter up', context)
assert result?
assert result.token is 'raise shutter up'
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert moveUpCalled
assert message is "raised shutter"
finish()
).done()
it "should parse: raise shutter", (finish) ->
context = createDummyParseContext()
result = shutterActionProvider.parseAction('raise shutter', context)
assert result?
assert result.token is 'raise shutter'
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert moveUpCalled
assert message is "raised shutter"
finish()
).done()
it "should parse: move shutter up", (finish) ->
context = createDummyParseContext()
result = shutterActionProvider.parseAction('move shutter up', context)
assert result?
assert result.token is 'move shutter up'
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert moveUpCalled
assert message is "raised shutter"
finish()
).done()
it "should parse: lower shutter down", (finish) ->
context = createDummyParseContext()
result = shutterActionProvider.parseAction('lower shutter down', context)
assert result?
assert result.token is 'lower shutter down'
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert moveDownCalled
assert message is "lowered shutter"
finish()
).done()
it "should parse: lower shutter", (finish) ->
context = createDummyParseContext()
result = shutterActionProvider.parseAction('lower shutter', context)
assert result?
assert result.token is 'lower shutter'
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert moveDownCalled
assert message is "lowered shutter"
finish()
).done()
it "should parse: move shutter down", (finish) ->
context = createDummyParseContext()
result = shutterActionProvider.parseAction('move shutter down', context)
assert result?
assert result.token is 'move shutter down'
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert moveDownCalled
assert message is "lowered shutter"
finish()
).done()
it "should parse: stop shutter", (finish) ->
context = createDummyParseContext()
result = stopShutterActionProvider.parseAction('stop shutter', context)
assert result?
assert result.token is 'stop shutter'
assert result.nextInput is ""
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert stopCalled
assert message is "stopped shutter"
finish()
).done()
describe "DimmerActionHandler", ->
envDummy =
logger: {}
frameworkDummy = new events.EventEmitter()
frameworkDummy.deviceManager = {
devices: {}
getDevices: -> _.values()
}
frameworkDummy.variableManager = new env.variables.VariableManager(frameworkDummy, [])
dimmerActionProvider = new env.actions.DimmerActionProvider frameworkDummy
class DimmerDevice extends env.devices.DimmerActuator
id: 'dummy-dimmer-id'
name: 'dummy dimmer'
dummyDimmer = new DimmerDevice()
frameworkDummy.deviceManager.devices['dummy-dimmer-id'] = dummyDimmer
describe "#executeAction()", ->
dimlevel = null
beforeEach ->
dimlevel = null
dummyDimmer.changeDimlevelTo = (dl) ->
dimlevel = dl
return Promise.resolve()
validRulePrefixes = [
'dim the dummy dimmer to'
'dim dummy dimmer to'
]
for rulePrefix in validRulePrefixes
do (rulePrefix) ->
action = "#{rulePrefix} 10%"
it "should execute: #{action}", (finish) ->
context = createDummyParseContext()
result = dimmerActionProvider.parseAction(action, context)
assert result.actionHandler?
result.actionHandler.executeAction(false).then( (message) ->
assert dimlevel is 10
assert message is "dimmed dummy dimmer to 10%"
finish()
).done()
describe "LogActionProvider", ->
envDummy =
logger: {}
frameworkDummy = new events.EventEmitter()
frameworkDummy.deviceManager = {
devices: {}
getDevices: -> _.values()
}
frameworkDummy.variableManager = new env.variables.VariableManager(frameworkDummy, [])
logActionProvider = new env.actions.LogActionProvider frameworkDummy
actionHandler = null
describe "#parseAction()", =>
it 'should parse: log "a test message"', ->
context = createDummyParseContext()
result = logActionProvider.parseAction('log "a test message"', context)
assert result?
assert result.token is 'log "a test message"'
assert result.nextInput is ''
assert result.actionHandler?
actionHandler = result.actionHandler
describe "LogActionHandler", ->
describe "#executeAction()", =>
it 'should execute the action', (finish) ->
actionHandler.executeAction(false).then( (message) ->
assert message is "a test message"
finish()
).done()
describe "SetVariableActionProvider", ->
envDummy =
logger: {}
frameworkDummy = new events.EventEmitter()
frameworkDummy.deviceManager = {
devices: {}
getDevices: -> _.values()
}
frameworkDummy.variableManager = new env.variables.VariableManager(frameworkDummy, [{
name: "a"
type: "value"
value: "2"
}])
frameworkDummy.variableManager.variables = {}
frameworkDummy.variableManager.init()
setVarActionProvider = new env.actions.SetVariableActionProvider frameworkDummy
actionHandler1 = null
actionHandler2 = null
describe "#parseAction()", =>
it 'should parse: set $a to 1', ->
context = createDummyParseContext()
result = setVarActionProvider.parseAction('set $a to 1', context)
assert result?
assert result.token is 'set $a to 1'
assert result.nextInput is ''
assert result.actionHandler?
actionHandler1 = result.actionHandler
it 'should parse: set $a to "abc"', ->
context = createDummyParseContext()
result = setVarActionProvider.parseAction('set $a to "abc"', context)
assert result?
assert result.token is 'set $a to "abc"'
assert result.nextInput is ''
assert result.actionHandler?
actionHandler2 = result.actionHandler
describe "LogActionHandler", ->
describe "#executeAction()", =>
it 'should execute the action 1', (finish) ->
actionHandler1.executeAction(false).then( (message) ->
assert message is "set $a to 1"
finish()
).done()
it 'should execute the action 2', (finish) ->
actionHandler2.executeAction(false).then( (message) ->
assert message is "set $a to abc"
finish()
).done()