public async Task GetSensorByIdAsync_Successful()
        {
            string         response           = "{\"state\":{\"temperature\":2354,\"lastupdated\":\"2020-08-19T10:43:17\"},\"swupdate\":{\"state\":\"noupdates\",\"lastinstall\":\"2019-03-12T13:27:46\"},\"config\":{\"on\":true,\"battery\":60,\"reachable\":true,\"alert\":\"none\",\"ledindication\":false,\"usertest\":false,\"pending\":[]},\"name\":\"Hue temperature sensor 1\",\"type\":\"ZLLTemperature\",\"modelid\":\"SML001\",\"manufacturername\":\"Signify Netherlands B.V.\",\"productname\":\"Hue temperature sensor\",\"swversion\":\"6.1.1.27575\",\"uniqueid\":\"00:17:88:01:03:28:3e:d2-02-0402\",\"capabilities\":{\"certified\":true,\"primary\":false}}";
            HttpStatusCode statusCode         = HttpStatusCode.OK;
            var            messageHandlerMock = new HttpMessageHandlerMock(response, statusCode);
            var            httpClient         = new HttpClient(messageHandlerMock);
            var            clientFactory      = Substitute.For <IHttpClientFactory>();

            clientFactory.CreateClient().Returns(httpClient);
            var optionsMonitor = Substitute.For <IOptionsMonitor <HueOptions> >();
            var hueOptions     = new HueOptions()
            {
                BridgeIP   = "192.168.0.5",
                BridgePort = 0,
                UserKey    = "abc123"
            };

            optionsMonitor.CurrentValue.Returns(hueOptions);
            var hueSensorProvider = new HueSensorProvider(clientFactory, optionsMonitor);

            var sensor = await hueSensorProvider.GetSensorByIdAsync(6);

            Assert.NotNull(sensor);
            Assert.Equal(6, sensor.Id);
            Assert.Equal(SensorType.Temperature, sensor.Type);
            Assert.Equal(60, sensor.BatteryPercentage);
            Assert.Equal(23.54f, (sensor as TemperatureSensor).State.Temperature);
        }
        public async Task GetTemperatureSensorByIdAsync_InvalidJson()
        {
            string         response           = "{abc}";
            HttpStatusCode statusCode         = HttpStatusCode.OK;
            var            messageHandlerMock = new HttpMessageHandlerMock(response, statusCode);
            var            httpClient         = new HttpClient(messageHandlerMock);
            var            clientFactory      = Substitute.For <IHttpClientFactory>();

            clientFactory.CreateClient().Returns(httpClient);
            var optionsMonitor = Substitute.For <IOptionsMonitor <HueOptions> >();
            var hueOptions     = new HueOptions()
            {
                BridgeIP   = "192.168.0.5",
                BridgePort = 0,
                UserKey    = "abc123"
            };

            optionsMonitor.CurrentValue.Returns(hueOptions);
            var hueSensorProvider = new HueSensorProvider(clientFactory, optionsMonitor);

            var sensor = await hueSensorProvider.GetSensorByIdAsync(6);

            Assert.Null(sensor);
        }
        public async Task GetSensorByIdAsync_IdNotExisting()
        {
            string         response           = "[{\"error\":{\"type\":3,\"address\":\"/sensors/60\",\"description\":\"resource, /sensors/60, not available\"}}]";
            HttpStatusCode statusCode         = HttpStatusCode.OK;
            var            messageHandlerMock = new HttpMessageHandlerMock(response, statusCode);
            var            httpClient         = new HttpClient(messageHandlerMock);
            var            clientFactory      = Substitute.For <IHttpClientFactory>();

            clientFactory.CreateClient().Returns(httpClient);
            var optionsMonitor = Substitute.For <IOptionsMonitor <HueOptions> >();
            var hueOptions     = new HueOptions()
            {
                BridgeIP   = "192.168.0.5",
                BridgePort = 0,
                UserKey    = "abc123"
            };

            optionsMonitor.CurrentValue.Returns(hueOptions);
            var hueSensorProvider = new HueSensorProvider(clientFactory, optionsMonitor);

            var sensor = await hueSensorProvider.GetSensorByIdAsync(60);

            Assert.Null(sensor);
        }