public async Task EntityOnStateChangedForTimeTurnOffLightCallsCorrectServiceCall() { // ARRANGE var lastChanged = new DateTime(2020, 1, 1, 1, 1, 1, 20); var lastUpdated = new DateTime(2020, 1, 1, 1, 1, 1, 50); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(100); DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "on", "off", lastUpdated, lastChanged); DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange("off") .AndNotChangeFor(TimeSpan.FromMilliseconds(100)) .UseEntity("light.correct_entity") .TurnOff() .Execute(); var(daemonTask, _) = ReturnRunningDefauldDaemonHostTask(); // ASSERT await Task.Delay(10); // After 10ms we should not have call DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.Never()); await Task.Delay(500); // After 30ms we should have call DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.Once()); await WaitUntilCanceled(daemonTask); }
public async Task EntityOnStateCallFunction() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); string?actualToState = ""; string?actualFromState = ""; var actualEntity = ""; DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange("on").Call((entity, to, from) => { actualToState = to?.State; actualFromState = from?.State; actualEntity = entity; return(Task.CompletedTask); }).Execute(); await RunDefauldDaemonUntilCanceled(); Assert.Equal("on", actualToState); Assert.Equal("off", actualFromState); Assert.Equal("binary_sensor.pir", actualEntity); }
public async Task EntityOnStateChangedTurnOnLightCallsCorrectServiceCallButNoTurnOff() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange("on") .UseEntity("light.correct_entity") .TurnOn() .Execute(); DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange("off") .UseEntity("light.correct_entity") .TurnOff() .Execute(); await RunDefauldDaemonUntilCanceled(); DefaultHassClientMock.VerifyCallServiceTimes("turn_on", Times.Once()); DefaultHassClientMock.VerifyCallService("light", "turn_on", ("entity_id", "light.correct_entity")); DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.Never()); }
public async Task EntityOnStateChangedEntitiesLambdaTurnOnLightCallsCorrectServiceCall() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); //new CancellationTokenSource(1000); // Fake the DefaultDaemonHost.InternalState["light.correct_entity"] = new EntityState { EntityId = "light.correct_entity" }; DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange("on") .UseEntities(n => n.EntityId == "light.correct_entity") .TurnOn() .Execute(); await RunDefauldDaemonUntilCanceled(); DefaultHassClientMock.VerifyCallServiceTimes("turn_on", Times.Once()); DefaultHassClientMock.VerifyCallService("light", "turn_on", ("entity_id", "light.correct_entity")); }
public async Task EntityDelayUntilStateChangeLamdaShouldReturnTrue() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); var delayResult = DefaultDaemonApp .Entity("binary_sensor.pir") .DelayUntilStateChange((to, _) => to?.State == "on"); await RunDefauldDaemonUntilCanceled(); Assert.True(delayResult.Task.IsCompletedSuccessfully); Assert.True(delayResult.Task.Result); }
public async Task TurnOffLightLambdaAttributeSelectionCallsCorrectServiceCall() { // ARRANGE var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); await DefaultDaemonHost.Run("host", 8123, false, "token", cancelSource.Token); // ACT await DefaultDaemonHost .Lights(n => n?.Attribute?.test >= 100) .TurnOff() .ExecuteAsync(); // ASSERT DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.Exactly(2)); DefaultHassClientMock.VerifyCallService("light", "turn_off", ("entity_id", "light.correct_entity")); DefaultHassClientMock.VerifyCallService("light", "turn_off", ("entity_id", "light.correct_entity2")); }
public async Task EntityOnStateTriggerScript() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "on", "off"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); // ACT DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange(to: "off") .RunScript("thescript") .Execute(); await RunDefauldDaemonUntilCanceled(); DefaultHassClientMock.Verify(n => n.CallService("script", "thescript", It.IsAny <object>(), false)); }
public async Task OneEntityWithSeveralShouldCallsCorrectServiceCall() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange((n, _) => n?.State == "on") .UseEntity("light.correct_entity") .Toggle() .Execute(); await RunDefauldDaemonUntilCanceled(); DefaultHassClientMock.VerifyCallServiceTimes("toggle", Times.Once()); DefaultHassClientMock.VerifyCallService("light", "toggle", ("entity_id", "light.correct_entity")); }
public async Task EntityOnStateChangedLamdaWithMultipleEntitiesCallsCorrectServiceCall() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); var MotionEnabled = true; DefaultDaemonApp .Entities(new string[] { "binary_sensor.pir", "binary_sensor-pir2" }) .WhenStateChange((to, from) => @from?.State == "off" && to?.State == "on" && MotionEnabled) .UseEntity("light.correct_entity") .Toggle() .Execute(); await RunDefauldDaemonUntilCanceled(); DefaultHassClientMock.VerifyCallServiceTimes("toggle", Times.Once()); DefaultHassClientMock.VerifyCallService("light", "toggle", ("entity_id", "light.correct_entity")); }
public async Task EntityOnStateIncludeAttributesTriggerOnSameState() { // ARRANGE DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "off"); var cancelSource = DefaultHassClientMock.GetSourceWithTimeout(); var triggered = false; // ACT DefaultDaemonApp .Entity("binary_sensor.pir") .WhenStateChange(allChanges: true) .Call((e, n, o) => { triggered = true; return(Task.CompletedTask); }) .Execute(); await RunDefauldDaemonUntilCanceled(); // ASSERT Assert.True(triggered); }