示例#1
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());
        }
示例#2
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"));
        }
示例#3
0
        public async Task EntityInAreaOnStateChangedShouldTurnOn()
        {
            // ARRANGE

            var daemonTask = RunDefauldDaemonUntilCanceled(200, overrideDebugNotCancel: true);

            while (DefaultDaemonHost.Connected == false)
            {
                await Task.Delay(10).ConfigureAwait(false);
            }

            // ACT
            DefaultDaemonApp
            .Entity("binary_sensor.pir")
            .WhenStateChange("on")
            .UseEntities(n => n.Area == "Area")
            .TurnOn()
            .Execute();

            // light.light_in_area is setup so it has area = Area
            DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on");

            await daemonTask.ConfigureAwait(false);

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_on", Times.Once());
            DefaultHassClientMock.VerifyCallService("light", "turn_on", ("entity_id", "light.ligth_in_area"));
        }
示例#4
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);
        }
示例#5
0
        public async Task RunScriptWithDomainShouldCallCorrectFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT
            DefaultDaemonRxApp.RunScript("script.myscript");
            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("myscript", Times.Once());
        }
示例#6
0
        public async Task TurnOffEntityLambdaAttributeSelectionNoExistCallsCorrectServiceCall()
        {
            // ARRANGE
            // ACT
            await DefaultDaemonApp
            .Entities(n => n?.Attribute?.not_exists == "test")
            .TurnOff()
            .ExecuteAsync();

            // ASSERT

            DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.Never());
        }
示例#7
0
        public async Task TurnOffLightWithoutDomainCallsCorrectServiceCall()
        {
            // ARRANGE
            // ACT
            await DefaultDaemonHost
            .Light("correct_entity")
            .TurnOff()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.Once());
            DefaultHassClientMock.VerifyCallService("light", "turn_off", ("entity_id", "light.correct_entity"));
        }
示例#8
0
        public async Task MediaPlayersPlayCallsCorrectServiceCall()
        {
            // ARRANGE
            // ACT
            await DefaultDaemonApp
            .MediaPlayers(new string[] { "media_player.player" })
            .Play()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("media_play", Times.Once());
            DefaultHassClientMock.VerifyCallService("media_player", "media_play", ("entity_id", "media_player.player"));
        }
示例#9
0
        public async Task MediaPlayerStopCallsCorrectServiceCall()
        {
            // ARRANGE
            // ACT
            await DefaultDaemonApp
            .MediaPlayer("media_player.player")
            .Stop()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("media_stop", Times.Once());
            DefaultHassClientMock.VerifyCallService("media_player", "media_stop", ("entity_id", "media_player.player"));
        }
示例#10
0
        public async Task TurnOnEntityCallsCorrectServiceCall()
        {
            // ARRANGE
            // ACT
            await DefaultDaemonApp
            .Entity("light.correct_entity")
            .TurnOn()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_on", Times.Once());
            DefaultHassClientMock.VerifyCallService("light", "turn_on", ("entity_id", "light.correct_entity"));
        }
示例#11
0
        public async Task InputSelectSetOptionIEnumerableShouldCallCorrectCallService()
        {
            // ARRANGE
            // ACT
            await DefaultDaemonApp
            .InputSelects(new string[] { "input_select.myselect" })
            .SetOption("option1")
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("select_option", Times.Once());
            DefaultHassClientMock.VerifyCallService("input_select", "select_option",
                                                    ("entity_id", "input_select.myselect"),
                                                    ("option", "option1"));
        }
示例#12
0
        public async Task TimerTurnOffShouldCallCorrectServiceCall()
        {
            // ARRANGE
            DefaultDaemonHost
            .Timer()
            .Every(TimeSpan.FromMilliseconds(20))
            .Entity("light.correct_light")
            .TurnOff()
            .Execute();

            await RunDefauldDaemonUntilCanceled(200);

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.AtLeast(2));
            DefaultHassClientMock.VerifyCallService("light", "turn_off", ("entity_id", "light.correct_light"));
        }
示例#13
0
        public async Task TimerToggleShouldCallCorrectServiceCall()
        {
            // ARRANGE
            DefaultDaemonHost
            .Timer()
            .Every(TimeSpan.FromMilliseconds(20))
            .Entity("light.correct_light")
            .Toggle()
            .Execute();

            await RunDefauldDaemonUntilCanceled();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("toggle", Times.AtLeast(2)); // Less cause of slow cloud CI builds
            DefaultHassClientMock.VerifyCallService("light", "toggle", ("entity_id", "light.correct_light"));
        }
示例#14
0
        public async Task CameraEnableMotionDetectionCallsCorrectServiceCall()
        {
            // ARRANGE
            var entityId     = "camera.camera1";
            var service_call = "enable_motion_detection";

            // ACT
            await DefaultDaemonApp
            .Camera(entityId)
            .EnableMotionDetection()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes(service_call, Times.Once());
            DefaultHassClientMock.VerifyCallServiceTuple("camera", service_call, ("entity_id", entityId));
        }
示例#15
0
        public async Task CameraTurnOffCallsCorrectServiceCall()
        {
            // ARRANGE
            var entityId     = "camera.camera1";
            var service_call = "turn_off";

            // ACT
            await DefaultDaemonApp
            .Camera(entityId)
            .TurnOff()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes(service_call, Times.Once());
            DefaultHassClientMock.VerifyCallServiceTuple("camera", service_call, ("entity_id", entityId));
        }
示例#16
0
        public async Task TurnOffMultipleEntityCallsCorrectServiceCall()
        {
            // ARRANGE

            // ACT
            await DefaultDaemonHost
            .Entity("light.correct_entity", "light.correct_entity2")
            .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"));
        }
示例#17
0
        public async Task CamerasDisableMotionDetectionCallsCorrectServiceCall()
        {
            // ARRANGE
            var entityId     = "camera.camera1";
            var service_call = "disable_motion_detection";

            // ACT
            await DefaultDaemonHost
            .Cameras(new string[] { entityId })
            .DisableMotionDetection()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes(service_call, Times.Once());
            DefaultHassClientMock.VerifyCallService("camera", service_call, ("entity_id", entityId));
        }
示例#18
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"));
        }
示例#19
0
        public async Task TurnOffEntityLamdaSelectionCallsCorrectServiceCall()
        {
            // ARRANGE
            await RunDefauldDaemonUntilCanceled();

            // ACT
            await DefaultDaemonApp
            .Entities(n => n.EntityId.StartsWith("light.correct_entity"))
            .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"));
        }
示例#20
0
        public async Task TimerEveryWithAttributeShouldCallServiceCorrectNumberOfTimes()
        {
            // ARRANGE
            DefaultDaemonHost
            .Timer()
            .Every(TimeSpan.FromMilliseconds(20))
            .Entity("light.correct_light")
            .TurnOn()
            .UsingAttribute("attr", "on")
            .Execute();

            await RunDefauldDaemonUntilCanceled();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_on", Times.AtLeast(4));
            DefaultHassClientMock.VerifyCallService("light", "turn_on", ("attr", "on"), ("entity_id", "light.correct_light"));
        }
示例#21
0
        public async Task RunScriptShouldCallCorrectFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            var(dynObj, expObj) = GetDynamicObject(
                ("attr", "value"));

            // ACT
            DefaultDaemonRxApp.RunScript("myscript");
            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);


            // ASSERT


            DefaultHassClientMock.VerifyCallServiceTimes("myscript", Times.Once());
        }
示例#22
0
        public async Task MediaPlayersFuncExceptionLogsError()
        {
            // ARRANGE
            DefaultDaemonHost.InternalState["id"] = new EntityState {
                EntityId = "id"
            };

            // ACT
            var x = await Assert.ThrowsAsync <Exception>(() => DefaultDaemonApp
                                                         .MediaPlayers(n => throw new Exception("Some error"))
                                                         .Play()
                                                         .ExecuteAsync());

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_off", Times.Never());
            LoggerMock.AssertLogged(LogLevel.Error, Times.AtLeastOnce());
            Assert.Equal("Some error", x.Message);
        }
示例#23
0
        public async Task InputSelectSetOptionFuncShouldCallCorrectCallService()
        {
            // ARRANGE
            DefaultDaemonHost.InternalState["input_select.myselect"] = new EntityState {
                EntityId = "input_select.myselect"
            };
            // ACT
            await DefaultDaemonApp
            .InputSelects(n => n.EntityId == "input_select.myselect")
            .SetOption("option1")
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("select_option", Times.Once());
            DefaultHassClientMock.VerifyCallService("input_select", "select_option",
                                                    ("entity_id", "input_select.myselect"),
                                                    ("option", "option1"));
        }
示例#24
0
        public async Task TurnOnEntityWithMultipleAttributeCallsCorrectServiceCall()
        {
            // ARRANGE
            // ACT
            await DefaultDaemonApp
            .Entity("light.correct_entity")
            .TurnOn()
            .WithAttribute("brightness", 100)
            .WithAttribute("color_temp", 230)
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_on", Times.Once());
            DefaultHassClientMock.VerifyCallService("light", "turn_on",
                                                    ("brightness", 100),
                                                    ("color_temp", 230),
                                                    ("entity_id", "light.correct_entity"));
        }
示例#25
0
        public async Task CameraSnapshotCallsCorrectServiceCall()
        {
            // ARRANGE
            var entityId     = "camera.camera1";
            var service_call = "snapshot";

            // ACT
            await DefaultDaemonApp
            .Camera(entityId)
            .Snapshot("filename")
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes(service_call, Times.Once());
            DefaultHassClientMock.VerifyCallService("camera", service_call,
                                                    ("filename", "filename"),
                                                    ("entity_id", entityId)
                                                    );
        }
示例#26
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"));
        }
示例#27
0
        public async Task TimerEntitiesEveryShouldCallServiceCorrectNumberOfTimes()
        {
            // ARRANGE
            DefaultDaemonHost
            .Timer()
            .Every(TimeSpan.FromMilliseconds(20))
            .Entities(new string[] { "light.correct_light" })
            .TurnOn()
            .Execute();

            var cancelSource = new CancellationTokenSource(100); //DefaultHassClientMock.GetSourceWithTimeout(100);

            // ACTION
            await RunDefauldDaemonUntilCanceled();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("turn_on", Times.AtLeast(4));
            DefaultHassClientMock.VerifyCallService("light", "turn_on", ("entity_id", "light.correct_light"));
        }
示例#28
0
        public async Task MediaPlayersFuncPlayCallsCorrectServiceCall()
        {
            // ARRANGE
            DefaultDaemonHost.InternalState["media_player.player"] = new EntityState
            {
                EntityId = "media_player.player",
                State    = "off"
            };

            // ACT
            await DefaultDaemonApp
            .MediaPlayers(n => n.EntityId == "media_player.player")
            .Play()
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("media_play", Times.Once());
            DefaultHassClientMock.VerifyCallService("media_player", "media_play", ("entity_id", "media_player.player"));
        }
示例#29
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"));
        }
示例#30
0
        public async Task CameraPlayStreamCallsCorrectServiceCall()
        {
            // ARRANGE
            var entityId     = "camera.camera1";
            var service_call = "play_stream";

            // ACT
            await DefaultDaemonApp
            .Camera(entityId)
            .PlayStream("media_player.player", "anyformat")
            .ExecuteAsync();

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes(service_call, Times.Once());
            DefaultHassClientMock.VerifyCallService("camera", service_call,
                                                    ("media_player", "media_player.player"),
                                                    ("format", "anyformat"),
                                                    ("entity_id", entityId)
                                                    );
        }