Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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());
        }
Example #4
0
        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"));
        }
Example #5
0
        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);
        }
Example #6
0
        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"));
        }
Example #7
0
        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));
        }
Example #8
0
        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"));
        }
Example #9
0
        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"));
        }
Example #10
0
        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);
        }