|
@@ -12,10 +12,10 @@ namespace HAServer.Tests.Core {
|
|
|
public void Constructor_IdCounterIncrements() {
|
|
|
var bus = new Mock<IMessageBus>();
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
- Action action = () => { };
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => { }) };
|
|
|
var startId = Trigger.CurrentId;
|
|
|
- var trigger1 = new Trigger(bus.Object, "name", TriggerType.All, action, Enumerable.Empty<Condition>(), logProvider.Object);
|
|
|
- var trigger2 = new Trigger(bus.Object, "name", TriggerType.All, action, Enumerable.Empty<Condition>(), logProvider.Object);
|
|
|
+ var trigger1 = new Trigger(bus.Object, "name", TriggerType.All, actions, Enumerable.Empty<Condition>(), logProvider.Object);
|
|
|
+ var trigger2 = new Trigger(bus.Object, "name", TriggerType.All, actions, Enumerable.Empty<Condition>(), logProvider.Object);
|
|
|
Assert.That(trigger1.Id, Is.EqualTo(startId));
|
|
|
Assert.That(trigger2.Id, Is.EqualTo(startId + 1));
|
|
|
}
|
|
@@ -26,13 +26,14 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
var condition = new Condition(Comparator.Equal, "test", "");
|
|
|
var conditions = new[] { condition };
|
|
|
- Action action = () => { };
|
|
|
- var trigger = new Trigger(bus.Object, "name", TriggerType.All, action, conditions, logProvider.Object);
|
|
|
+ var action = new TriggerAction(TriggerActionType.Device, "device", () => { });
|
|
|
+ var actions = new[] { action };
|
|
|
+ var trigger = new Trigger(bus.Object, "name", TriggerType.All, actions, conditions, logProvider.Object);
|
|
|
|
|
|
Assert.That(trigger.Name, Is.EqualTo("name"));
|
|
|
Assert.That(trigger.TriggerType, Is.EqualTo(TriggerType.All));
|
|
|
- Assert.That(trigger.DeviceMethod, Is.EqualTo(action.Method.Name));
|
|
|
Assert.That(trigger.Conditions, Contains.Item(condition));
|
|
|
+ Assert.That(trigger.Actions, Contains.Item(action));
|
|
|
Assert.That(trigger.Enabled, Is.True);
|
|
|
}
|
|
|
|
|
@@ -41,10 +42,12 @@ namespace HAServer.Tests.Core {
|
|
|
var bus = new Mock<IMessageBus>();
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => { }, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.NotEqual, "test", "off"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => { }) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.Equal, "test", "on"),
|
|
|
+ new Condition(Comparator.NotEqual, "test", "off")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
|
|
|
Assert.That(trigger.Conditions.Count, Is.EqualTo(2));
|
|
|
}
|
|
@@ -55,9 +58,9 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] { new Condition(Comparator.Equal, "test", "on") };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "on");
|
|
|
|
|
@@ -70,9 +73,9 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => triggered=true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] { new Condition(Comparator.Equal, "test", "on") };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "off");
|
|
|
|
|
@@ -85,10 +88,12 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test2", "on"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.Equal, "test", "on"),
|
|
|
+ new Condition(Comparator.Equal, "test2", "on")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "off");
|
|
|
trigger.ProcessMessage("test2", "on");
|
|
@@ -102,10 +107,12 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test2", "on"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.Equal, "test", "on"),
|
|
|
+ new Condition(Comparator.Equal, "test2", "on")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "off");
|
|
|
trigger.ProcessMessage("test2", "off");
|
|
@@ -119,10 +126,12 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.All, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test2", "on"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.Equal, "test", "on"),
|
|
|
+ new Condition(Comparator.Equal, "test2", "on")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.All, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "on");
|
|
|
trigger.ProcessMessage("test2", "off");
|
|
@@ -136,10 +145,12 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.All, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test2", "on"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.Equal, "test", "on"),
|
|
|
+ new Condition(Comparator.Equal, "test2", "on")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.All, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "off");
|
|
|
trigger.ProcessMessage("test2", "off");
|
|
@@ -153,10 +164,12 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.All, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test2", "on"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.Equal, "test", "on"),
|
|
|
+ new Condition(Comparator.Equal, "test2", "on")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.All, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "on");
|
|
|
trigger.ProcessMessage("test2", "on");
|
|
@@ -170,10 +183,12 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.All, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "solar_event", "civil_twilight_end"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "time", "21:00"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.Equal, "solar_event", "civil_twilight_end"),
|
|
|
+ new Condition(Comparator.Equal, "time", "21:00")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.All, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("solar_event", "civil_twilight_end");
|
|
|
trigger.ProcessMessage("time", "21:00:00");
|
|
@@ -187,10 +202,12 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.All, () => triggered = true, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.GreaterThan, "test", "1"));
|
|
|
- trigger.AddCondition(new Condition(Comparator.LessThan, "test", "3"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {
|
|
|
+ new Condition(Comparator.GreaterThan, "test", "1"),
|
|
|
+ new Condition(Comparator.LessThan, "test", "3")
|
|
|
+ };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.All, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "2");
|
|
|
|
|
@@ -203,9 +220,9 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var count = 0;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => count++, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.GreaterThan, "test", "0"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => count++) };
|
|
|
+ var conditions = new[] { new Condition(Comparator.GreaterThan, "test", "0") };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "1");
|
|
|
trigger.ProcessMessage("test", "2");
|
|
@@ -219,9 +236,9 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var count = 0;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => count++, logProvider.Object);
|
|
|
-
|
|
|
- trigger.AddCondition(new Condition(Comparator.GreaterThan, "test", "0"));
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => count++) };
|
|
|
+ var conditions = new[] { new Condition(Comparator.GreaterThan, "test", "0") };
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
|
|
|
trigger.ProcessMessage("test", "1");
|
|
|
trigger.ProcessMessage("test", "0");
|
|
@@ -236,15 +253,36 @@ namespace HAServer.Tests.Core {
|
|
|
var logProvider = new Mock<ILogProvider>();
|
|
|
|
|
|
var triggered = false;
|
|
|
- var trigger = new Trigger(bus.Object, "", TriggerType.Any, () => triggered = true, logProvider.Object) {
|
|
|
+ var actions = new[] { new TriggerAction(TriggerActionType.Device, "device", () => triggered = true) };
|
|
|
+ var conditions = new[] {new Condition(Comparator.Equal, "test", "on")};
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object) {
|
|
|
Enabled = false
|
|
|
};
|
|
|
|
|
|
- trigger.AddCondition(new Condition(Comparator.Equal, "test", "on"));
|
|
|
-
|
|
|
trigger.ProcessMessage("test", "on");
|
|
|
|
|
|
Assert.That(triggered, Is.False);
|
|
|
}
|
|
|
+
|
|
|
+ [Test]
|
|
|
+ public void WhenAnyConditionIsTrue_WithOneConditionMet_ExecuteAllActions() {
|
|
|
+ var bus = new Mock<IMessageBus>();
|
|
|
+ var logProvider = new Mock<ILogProvider>();
|
|
|
+
|
|
|
+ var deviceTriggered = false;
|
|
|
+ var groupTriggered = false;
|
|
|
+ var actions = new[] {
|
|
|
+ new TriggerAction(TriggerActionType.Device, "device", ()=>deviceTriggered=true),
|
|
|
+ new TriggerAction(TriggerActionType.Group, "group", ()=>groupTriggered=true)
|
|
|
+ };
|
|
|
+ var conditions = new[] {new Condition(Comparator.Equal, "test", "on")};
|
|
|
+
|
|
|
+ var trigger = new Trigger(bus.Object, "", TriggerType.Any, actions, conditions, logProvider.Object);
|
|
|
+
|
|
|
+ trigger.ProcessMessage("test", "on");
|
|
|
+
|
|
|
+ Assert.That(deviceTriggered, Is.True);
|
|
|
+ Assert.That(groupTriggered, Is.True);
|
|
|
+ }
|
|
|
}
|
|
|
}
|