public async Task PostEnvironment_WhenCalled_InsertFailed_ReturnsServerError()
        {
            var mockedRepo = new Mock <IHomeRepository>();

            var room = new Room()
            {
                Name = "test_room_1",
                Id   = Guid.Parse("00000000-0000-0000-0000-000000000001")
            };

            var sensor = new Sensor()
            {
                Id = Guid.Parse("00000000-0000-0000-0000-000000000002")
            };

            var environment = new Environment()
            {
                Id = Guid.Parse("00000000-0000-0000-0000-000000000000")
            };

            mockedRepo.Setup(repo => repo.GetRoom(Guid.Parse("00000000-0000-0000-0000-000000000001"))).ReturnsAsync(room);
            mockedRepo.Setup(repo => repo.GetSensor(Guid.Parse("00000000-0000-0000-0000-000000000002"))).ReturnsAsync(sensor);
            mockedRepo.Setup(repo => repo.AddEnvironmentReading(Guid.Parse("00000000-0000-0000-0000-000000000001"), Guid.Parse("00000000-0000-0000-0000-000000000002"), environment)).ReturnsAsync((Environment)null);

            var mockedListenerClient = new Mock <ISensorListenerAPI>();

            mockedListenerClient.Setup(client => client.NotifyHomeyTopic <double>("test", 0));

            var controller = new RoomsController(mockedRepo.Object, mockedListenerClient.Object);
            var result     = await controller.PostEnvironment("00000000-0000-0000-0000-000000000001", "00000000-0000-0000-0000-000000000002", environment);

            var contentResult = (result as StatusCodeResult).StatusCode;

            Assert.Equal(StatusCodes.Status500InternalServerError, contentResult);
        }
        public async Task PostEnvironment_WhenCalled_UnknownSensor_ReturnsNotFound()
        {
            var mockedRepo = new Mock <IHomeRepository>();

            var room = new Room()
            {
                Name = "test_room_1",
                Id   = Guid.Parse("00000000-0000-0000-0000-000000000001")
            };

            var sensor = new Sensor()
            {
                Id = Guid.Parse("00000000-0000-0000-0000-000000000002")
            };

            var environment = new Environment()
            {
                Id = Guid.Parse("00000000-0000-0000-0000-000000000000")
            };

            mockedRepo.Setup(repo => repo.GetRoom(Guid.Parse("00000000-0000-0000-0000-000000000001"))).ReturnsAsync(room);
            mockedRepo.Setup(repo => repo.GetSensor(Guid.Parse("00000000-0000-0000-0000-000000000002"))).ReturnsAsync((Sensor)null);
            mockedRepo.Setup(repo => repo.AddEnvironmentReading(Guid.Parse("00000000-0000-0000-0000-000000000001"), Guid.Parse("00000000-0000-0000-0000-000000000002"), environment)).ReturnsAsync((Environment)null);

            var mockedListenerClient = new Mock <ISensorListenerAPI>();

            mockedListenerClient.Setup(client => client.NotifyHomeyTopic <double>("test", 0));

            var controller = new RoomsController(mockedRepo.Object, mockedListenerClient.Object);
            var result     = await controller.PostEnvironment("00000000-0000-0000-0000-000000000001", "00000000-0000-0000-0000-000000000002", environment);

            var contentResult = result as NotFoundResult;

            Assert.NotNull(contentResult);
        }
示例#3
0
        public async Task <IActionResult> Put([FromBody] Environment value)
        {
            var success = await this.homeRepository.EditEnvironment(value);

            if (!success)
            {
                return(BadRequest());
            }
            return(Ok(value));
        }
        public async Task PostEnvironment_WhenCalled_ReturnsOk()
        {
            var mockedRepo = new Mock <IHomeRepository>();

            var room = new Room()
            {
                Name = "test_room_1",
                Id   = Guid.Parse("00000000-0000-0000-0000-000000000001")
            };

            var sensor = new Sensor()
            {
                Id = Guid.Parse("00000000-0000-0000-0000-000000000002")
            };

            var environment = new Environment()
            {
                Id          = Guid.Parse("00000000-0000-0000-0000-000000000000"),
                Temperature = 12.0,
                Humidity    = 13.0,
                Motion      = true
            };

            var newMapping = new HomeyMapping()
            {
                HumTopic    = "humTopic",
                TempTopic   = "tempTopic",
                MotionTopic = "motionTopic"
            };

            mockedRepo.Setup(repo => repo.GetRoom(Guid.Parse("00000000-0000-0000-0000-000000000001"))).ReturnsAsync(room);
            mockedRepo.Setup(repo => repo.GetSensor(Guid.Parse("00000000-0000-0000-0000-000000000002"))).ReturnsAsync(sensor);
            mockedRepo.Setup(repo => repo.AddEnvironmentReading(Guid.Parse("00000000-0000-0000-0000-000000000001"), Guid.Parse("00000000-0000-0000-0000-000000000002"), environment)).ReturnsAsync(environment);
            mockedRepo.Setup(repo => repo.GetHomeyMapping(sensor)).ReturnsAsync(newMapping);

            var mockedListenerClient = new Mock <ISensorListenerAPI>();

            mockedListenerClient.Setup(client => client.NotifyHomeyTopic <double>("test", 0));

            var controller = new RoomsController(mockedRepo.Object, mockedListenerClient.Object);
            var result     = await controller.PostEnvironment("00000000-0000-0000-0000-000000000001", "00000000-0000-0000-0000-000000000002", environment);

            var contentResult = (result as OkObjectResult).Value;

            Assert.NotNull(contentResult);
            Assert.Equal(environment, contentResult);
            mockedListenerClient.Verify(client => client.NotifyHomeyTopic(newMapping.HumTopic, environment.Humidity));
            mockedListenerClient.Verify(client => client.NotifyHomeyTopic(newMapping.TempTopic, environment.Temperature));
            mockedListenerClient.Verify(client => client.NotifyHomeyTopic(newMapping.MotionTopic, environment.Motion));
        }
示例#5
0
        public async Task<Environment> GetEnvironment(Guid id)
        {
            const string sql = "SELECT * FROM environment WHERE id = @Id";

            Environment env = null;
            try
            {
                env = await dbConnection.QueryFirstAsync<Environment>(sql, new { Id = id });
            } catch (InvalidOperationException e)
            {
                this.logger.LogError(e, "Cannot get environment");
            }

            return env;
        }
示例#6
0
        public async Task<bool> EditEnvironment(Environment environment)
        {
            const string sql = "UPDATE environment SET " +
            	"timestamp = @Timestamp, " +
            	"temperature = @Temperature, " +
            	"humidity = @Humidity, " +
            	"motion = @Motion " +
            	"WHERE id = @Id";

            var affectedRows = await dbConnection.ExecuteAsync(sql, new
            {
                environment.Timestamp,
                environment.Temperature,
                environment.Humidity,
                environment.Motion,
                environment.Id
            });

            return affectedRows != 0;
        }
示例#7
0
        public async Task<Environment> AddEnvironmentReading(Guid roomId, Guid sensorId, Environment environment)
        {
            const string sql = "INSERT INTO environment (timestamp, temperature, humidity, motion, sensor_id, room_id) VALUES (@Timestamp, @Temperature, @Humidity, @Motion, @SensorId, @RoomId) RETURNING *";

            Environment insertedEnvironment = null;
            try
            {
                insertedEnvironment = await dbConnection.QueryFirstAsync<Environment>(sql, new
                {
                    environment.Timestamp,
                    environment.Temperature,
                    environment.Humidity,
                    environment.Motion,
                    SensorId = sensorId,
                    RoomId = roomId
                });
            } catch (InvalidOperationException e)
            {
                this.logger.LogError(e, "Cannot insert environment");
            }

            return insertedEnvironment;
        }
示例#8
0
        public async Task <Environment> CreateEnvironmentReading(string sensorId, Environment environment)
        {
            var roomRequest = new RestRequest
            {
                Resource = "api/rooms"
            };

            roomRequest.Method = Method.GET;
            roomRequest.AddParameter("sensorId", sensorId);

            var room = await Utilities.ExecuteRestRequest <Room>(this.BaseURL, roomRequest);

            var envRequest = new RestRequest
            {
                Resource = "api/rooms/{roomId}/sensor/{sensorId}/environment"
            };

            envRequest.AddUrlSegment("roomId", room.Id);
            envRequest.AddUrlSegment("sensorId", sensorId);
            envRequest.Method = Method.POST;
            envRequest.AddJsonBody(environment);

            return(await Utilities.ExecuteRestRequest <Environment>(this.BaseURL, envRequest));
        }
示例#9
0
        public async Task <IActionResult> PostEnvironment(string id, string sensorId, [FromBody] Environment environment)
        {
            var room = await this.homeRepository.GetRoom(Guid.Parse(id));

            if (room == null)
            {
                return(NotFound());
            }

            var sensor = await this.homeRepository.GetSensor(Guid.Parse(sensorId));

            if (sensor == null)
            {
                return(NotFound());
            }

            var insertedEnvironment = await this.homeRepository.AddEnvironmentReading(Guid.Parse(id), Guid.Parse(sensorId), environment);

            if (insertedEnvironment == null)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }

            var homeyMapping = await this.homeRepository.GetHomeyMapping(sensor);

            if (homeyMapping != null)
            {
                if (homeyMapping.HumTopic != null)
                {
                    await this.listenerClient.NotifyHomeyTopic <double>(homeyMapping.HumTopic, insertedEnvironment.Humidity);
                }
                if (homeyMapping.TempTopic != null)
                {
                    await this.listenerClient.NotifyHomeyTopic <double>(homeyMapping.TempTopic, insertedEnvironment.Temperature);
                }
                if (homeyMapping.MotionTopic != null)
                {
                    await this.listenerClient.NotifyHomeyTopic <bool>(homeyMapping.MotionTopic, insertedEnvironment.Motion);
                }
            }

            return(Ok(insertedEnvironment));
        }