public void Test_WhenUnknownSwitch_ThenDoNothing(AbstractSwitchEvent @event)
        {
            var switchControllerMock = new Mock <ISwitchController>(MockBehavior.Strict);

            switchControllerMock.Setup(cntr => cntr.CanHandleSwitch(It.IsAny <SwitchId>())).Returns(false);
            var eventsSourceMock = new Mock <IEventSource>(MockBehavior.Strict);

            eventsSourceMock.Setup(e => e.ReceiveEvents <AbstractSwitchEvent>()).Returns(Observable.Repeat(@event, 1));

            var handler = new SwitchEventsProcessor(switchControllerMock.Object, eventsSourceMock.Object, Mock.Of <ILogger>());

            handler.Run(CancellationToken.None);

            switchControllerMock.Verify(sc => sc.CanHandleSwitch(@event.SwitchId), Times.Once);
            switchControllerMock.Verify(sc => sc.SetPower(It.IsAny <SwitchId>(), It.IsAny <double>()), Times.Never);
            switchControllerMock.Verify(sc => sc.TurnOff(It.IsAny <SwitchId>()), Times.Never);
            switchControllerMock.Verify(sc => sc.TurnOn(It.IsAny <SwitchId>()), Times.Never);
        }
        public void TestTurnOff()
        {
            var swicthId             = SwitchId.NewId();
            var offEvent             = new TurnOffEvent(swicthId);
            var switchControllerMock = new Mock <ISwitchController>(MockBehavior.Strict);

            switchControllerMock.Setup(cntr => cntr.CanHandleSwitch(swicthId)).Returns(true);
            switchControllerMock.Setup(cntr => cntr.TurnOff(swicthId));
            var eventsSourceMock = new Mock <IEventSource>(MockBehavior.Strict);

            eventsSourceMock.Setup(e => e.ReceiveEvents <AbstractSwitchEvent>()).Returns(Observable.Repeat(offEvent, 1));

            var handler = new SwitchEventsProcessor(switchControllerMock.Object, eventsSourceMock.Object, Mock.Of <ILogger>());

            handler.Run(CancellationToken.None);

            switchControllerMock.Verify(sc => sc.CanHandleSwitch(swicthId), Times.Once);
            switchControllerMock.Verify(sc => sc.TurnOff(swicthId), Times.Once);
        }