public async Task PostHomeyMapping_WhenCalled_WrongSensor_ReturnsNotFound() { var mockedRepo = new Mock <IHomeRepository>(); var controller = new SensorsController(mockedRepo.Object, listenerClient, this.loggerMock); var sensorId = Guid.Parse("00000000-0000-0000-0000-000000000003"); var newMapping = new HomeyMapping() { HumTopic = "humTopic", TempTopic = "tempTopic", MotionTopic = "motionTopic" }; mockedRepo.Setup(repo => repo.GetSensor(sensorId)).ReturnsAsync((Sensor)null); var result = await controller.PostHomeyMapping(sensorId.ToString(), newMapping); var contentResult = (result as NotFoundResult); Assert.NotNull(contentResult); mockedRepo.Verify(repo => repo.GetSensor(sensorId)); mockedRepo.VerifyNoOtherCalls(); }
public async Task PostHomeyMapping_WhenCalled_AddFailed_Returns500() { var mockedRepo = new Mock <IHomeRepository>(); var controller = new SensorsController(mockedRepo.Object, listenerClient, this.loggerMock); var newSensor = new Sensor() { Name = "test_sensor_1", Id = Guid.Parse("00000000-0000-0000-0000-000000000003"), Type = "test_type" }; var newMapping = new HomeyMapping() { HumTopic = "humTopic", TempTopic = "tempTopic", MotionTopic = "motionTopic" }; mockedRepo.Setup(repo => repo.GetSensor(newSensor.Id)).ReturnsAsync(newSensor); mockedRepo.Setup(repo => repo.AddHomeyMapping(newSensor.Id, newMapping)).ReturnsAsync((HomeyMapping)null); var result = await controller.PostHomeyMapping(newSensor.Id.ToString(), newMapping); var contentResult = (result as StatusCodeResult); Assert.Equal(StatusCodes.Status500InternalServerError, contentResult.StatusCode); }
public async Task GetHomeyMapping_WhenCalled_ReturnsOk() { var mockedRepo = new Mock <IHomeRepository>(); var controller = new SensorsController(mockedRepo.Object, listenerClient, this.loggerMock); var newSensor = new Sensor() { Name = "test_sensor_1", Id = Guid.Parse("00000000-0000-0000-0000-000000000003"), Type = "test_type" }; mockedRepo.Setup(repo => repo.GetSensor(newSensor.Id)).ReturnsAsync(newSensor); var newMapping = new HomeyMapping() { HumTopic = "humTopic", TempTopic = "tempTopic", MotionTopic = "motionTopic" }; mockedRepo.Setup(repo => repo.GetHomeyMapping(newSensor)).ReturnsAsync(newMapping); var result = await controller.GetHomeyMapping(newSensor.Id.ToString()); var contentResult = (result as OkObjectResult).Value; Assert.Equal(newMapping, contentResult); }
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<HomeyMapping> GetHomeyMapping(Sensor sensor) { const string sql = "SELECT * FROM \"homeyMappings\" WHERE sensor_id = @SensorId LIMIT 1"; HomeyMapping mapping = null; try { mapping = await dbConnection.QueryFirstAsync<HomeyMapping>(sql, new { SensorId = sensor.Id }); } catch (InvalidOperationException e) { this.logger.LogError(e, "Cannot get Homey Mappings"); } return mapping; }
public async Task <IActionResult> PostHomeyMapping(string id, [FromBody] HomeyMapping mapping) { var sensor = await this.repository.GetSensor(Guid.Parse(id)); if (sensor == null) { return(NotFound()); } var insertedMapping = await this.repository.AddHomeyMapping(Guid.Parse(id), mapping); if (insertedMapping == null) { return(StatusCode(StatusCodes.Status500InternalServerError)); } return(Ok(insertedMapping)); }
public async Task<HomeyMapping> AddHomeyMapping(Guid sensorId, HomeyMapping mapping) { const string sql = "INSERT INTO \"homeyMappings\" (sensor_id, temp_topic, hum_topic, motion_topic) " + "VALUES (@SensorId, @TempTopic, @HumTopic, @MotionTopic) " + "RETURNING *"; HomeyMapping insertedMapping = null; try { insertedMapping = await dbConnection.QueryFirstAsync<HomeyMapping>(sql, new { sensorId, mapping.TempTopic, mapping.HumTopic, mapping.MotionTopic }); } catch (InvalidOperationException e) { this.logger.LogError(e, "Cannot insert homey mapping"); } return insertedMapping; }