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));
        }
Esempio n. 5
0
        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;
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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;
        }