public void Test_SetPower_ChangesAdapterLevel(byte fullPower, byte zeroPower, double requestedPower, byte expectedLevel)
        {
            var configRepositoryMock = new Mock <INooliteSwitchInfoRepository>(MockBehavior.Strict);
            var config = new NooliteSwitchInfo
            {
                SwitchId       = SwitchId.NewId(),
                Channel        = 98,
                FullPowerLevel = fullPower,
                ZeroPowerLevel = zeroPower
            };

            configRepositoryMock
            .Setup(repository => repository.ContainsConfig(config.SwitchId))
            .Returns(Task.FromResult(true));
            configRepositoryMock
            .Setup(repository => repository.GetConfig(config.SwitchId))
            .Returns(Task.FromResult(config));
            var adapterMock = new Mock <IPC11XXAdapter>(MockBehavior.Strict);

            adapterMock.Setup(adapter => adapter.SendCommand(PC11XXCommand.SetLevel, config.Channel, expectedLevel));
            var controller = new NooliteSwitchController(configRepositoryMock.Object, adapterMock.Object);

            controller.SetPower(config.SwitchId, requestedPower);

            adapterMock.Verify(adapter => adapter.SendCommand(PC11XXCommand.SetLevel, config.Channel, expectedLevel), Times.Once);
        }
        public void Test_IfRepoDoesNotContainConfig_ThenCantHandle()
        {
            var configRepositoryMock = new Mock <INooliteSwitchInfoRepository>(MockBehavior.Strict);

            configRepositoryMock
            .Setup(repository => repository.ContainsConfig(It.IsAny <SwitchId>()))
            .Returns(Task.FromResult(false));

            var controller = new NooliteSwitchController(configRepositoryMock.Object, Mock.Of <IPC11XXAdapter>());

            Assert.False(controller.CanHandleSwitch(SwitchId.NewId()));

            configRepositoryMock.Verify(repo => repo.ContainsConfig(It.IsAny <SwitchId>()), Times.Once);
        }
        public void Test_IfRepoContainsConfig_ThenCanHandle()
        {
            var configRepositoryMock = new Mock <INooliteSwitchInfoRepository>(MockBehavior.Strict);
            var switchId             = SwitchId.NewId();

            configRepositoryMock
            .Setup(repository => repository.ContainsConfig(switchId))
            .Returns(Task.FromResult(true));

            var controller = new NooliteSwitchController(configRepositoryMock.Object, Mock.Of <IPC11XXAdapter>());

            Assert.True(controller.CanHandleSwitch(switchId));

            configRepositoryMock.Verify(repo => repo.ContainsConfig(switchId), Times.Once);
        }
        public void Test_TurnOff_SendsAdapterOffCommand()
        {
            var switchId             = SwitchId.NewId();
            var configRepositoryMock = new Mock <INooliteSwitchInfoRepository>(MockBehavior.Strict);
            var adapterMock          = new Mock <IPC11XXAdapter>();
            var config = new NooliteSwitchInfo {
                Channel = 98
            };

            configRepositoryMock
            .Setup(repository => repository.ContainsConfig(switchId))
            .Returns(Task.FromResult(true));
            configRepositoryMock
            .Setup(repository => repository.GetConfig(switchId))
            .Returns(Task.FromResult(config));

            var controller = new NooliteSwitchController(configRepositoryMock.Object, adapterMock.Object);

            controller.TurnOff(switchId);

            adapterMock.Verify(adapter => adapter.SendCommand(PC11XXCommand.Off, config.Channel, 0), Times.Once);
        }