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); }
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)); }
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; }
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; }
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; }
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)); }
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)); }