Exemple #1
0
        public async Task Get_Static_Sensor_By_Id_should_return_sensor_by_dto_with_requested_id()
        {
            //Arrange
            var fakeStaticSensor = new StaticSensor {
                Id = 1
            };
            var fakeStaticSensorDbSet = new List <StaticSensor> {
                fakeStaticSensor
            };

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(fakeStaticSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);
            _mapperMock.Setup(x =>
                              x.Map <StaticSensor, StaticSensorDTO>(It.Is <StaticSensor>(it => it.Id == fakeStaticSensor.Id)))
            .Returns(((StaticSensor v) => new StaticSensorDTO {
                Id = v.Id
            }));

            var queries = new ReadingsQueries(_dataContextFactoryMock.Object, _mapperMock.Object);

            //Act
            var result = await queries.GetStaticSensorByIdAsync(fakeStaticSensor.Id);

            //Arrange
            Assert.Equal(fakeStaticSensor.Id, result.Id);
        }
Exemple #2
0
        public async Task Handler_should_update_cache_for_static_sensor()
        {
            var fakeStaticSensorReading = new StaticSensorReading
            {
                Id             = 1,
                StaticSensorId = 1
            };
            var fakeStaticSensor = new StaticSensor
            {
                Id       = 1,
                Readings = new List <StaticSensorReading> {
                    fakeStaticSensorReading
                }
            };
            var fakeStaticSensorDbSet = new List <StaticSensor> {
                fakeStaticSensor
            };

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(fakeStaticSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var notification      = new StaticSensorVisibilityStateChangedNotification(fakeStaticSensor.Id);
            var handler           =
                new StaticSensorVisibilityStateChangedNotificationHandler(_sensorCacheHelperMock.Object,
                                                                          _dataContextFactoryMock.Object);

            //Act
            await handler.Handle(notification, cancellationToken);

            //Assert
            _sensorCacheHelperMock.Verify(
                x => x.UpdateStaticSensorCacheAsync(It.Is <StaticSensor>(it =>
                                                                         it == fakeStaticSensor && it.Readings.SequenceEqual(fakeStaticSensor.Readings))), Times.Once);
        }
        public async Task Handler_activation_state_should_be_changed(bool newVisibilityState)
        {
            var fakeSensor = new StaticSensor()
            {
                Id        = 1,
                IsVisible = !newVisibilityState
            };
            var fakeSensorDbSet = new List <StaticSensor> {
                fakeSensor
            };

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(fakeSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var command           = new ChangeStaticSensorVisibilityStateCommand(fakeSensor.Id, newVisibilityState);
            var handler           =
                new ChangeStaticSensorVisibilityStateCommandHandler(_dataContextFactoryMock.Object,
                                                                    _mediatorMock.Object);

            //Act
            await handler.Handle(command, cancellationToken);

            //Assert
            Assert.Equal(newVisibilityState, fakeSensor.IsVisible);
        }
        public async Task Handler_should_return_true()
        {
            var fakeSensor = new StaticSensor()
            {
                Id        = 1,
                IsVisible = false
            };
            var fakeSensorDbSet = new List <StaticSensor> {
                fakeSensor
            };

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(fakeSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var command           = new ChangeStaticSensorVisibilityStateCommand(fakeSensor.Id, !fakeSensor.IsVisible);
            var handler           =
                new ChangeStaticSensorVisibilityStateCommandHandler(_dataContextFactoryMock.Object,
                                                                    _mediatorMock.Object);

            //Act
            var result = await handler.Handle(command, cancellationToken);

            //Assert
            Assert.True(result);
        }
        public async Task Handler_should_publish_notification()
        {
            var fakeSensor = new StaticSensor
            {
                Id       = 1,
                IsActive = false
            };
            var fakeSensorDbSet = new List <StaticSensor> {
                fakeSensor
            };

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(fakeSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var command           = new ChangeStaticSensorVisibilityStateCommand(fakeSensor.Id, !fakeSensor.IsActive);
            var handler           =
                new ChangeStaticSensorVisibilityStateCommandHandler(_dataContextFactoryMock.Object,
                                                                    _mediatorMock.Object);

            //Act
            await handler.Handle(command, cancellationToken);

            //Assert
            _mediatorMock.Verify(x =>
                                 x.Publish(It.Is <StaticSensorVisibilityStateChangedNotification>(it => it.SensorId == fakeSensor.Id),
                                           It.Is <CancellationToken>(it => it == cancellationToken)),
                                 Times.Once());
        }
        public async Task Handler_return_true_if_reading_is_for_static_sensor()
        {
            //Arrange
            var apiKey           = CryptoHelper.GenerateApiKey();
            var fakeStaticSensor = new StaticSensor {
                Id = 1, ApiKey = apiKey
            };
            var fakeStaticSensorReading = new StaticSensorReading();
            var fakeReadingDTO          = new SensorReadingDTO();
            var fakeReadingsDbSet       = new List <StaticSensorReading>();

            _dataContextMock.Setup(x => x.Sensors).ReturnsDbSet(new List <Sensor> {
                fakeStaticSensor
            });
            _dataContextMock.Setup(x => x.StaticSensorReadings).ReturnsDbSet(fakeReadingsDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);
            _mapperMock.Setup(x => x.Map <SensorReadingDTO, StaticSensorReading>(fakeReadingDTO))
            .Returns(fakeStaticSensorReading);


            //Act
            var cancellationToken = new CancellationToken();
            var command           = new CreateReadingCommand(fakeReadingDTO, apiKey);
            var handler           = new CreateReadingCommandHandler(_mediatorMock.Object, _dataContextFactoryMock.Object,
                                                                    _mapperMock.Object);
            var result = await handler.Handle(command, cancellationToken);

            //Assert
            Assert.True(result);
        }
Exemple #7
0
        public async Task Get_Sensor_By_Id_should_return_requested_sensor_dto()
        {
            //Arrange
            var fakeStaticSensor = new StaticSensor {
                Id = 1
            };
            var fakeStaticSensorDbSet = new List <Sensor> {
                fakeStaticSensor
            };
            var fakeStaticSensorDto = new StaticSensorDTO {
                Id = fakeStaticSensor.Id
            };

            _dataContextMock.Setup(x => x.Sensors).ReturnsDbSet(fakeStaticSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);
            _mapperMock.Setup(x => x.Map <Sensor, SensorDTO>(fakeStaticSensor))
            .Returns(fakeStaticSensorDto);

            var queries = new ReadingsQueries(_dataContextFactoryMock.Object, _mapperMock.Object);

            //Act
            var result = await queries.GetSensorByIdAsync(fakeStaticSensor.Id);

            //Arrange
            Assert.Equal(fakeStaticSensorDto, result);
        }
        public async Task Handler_should_throw_exception_if_sensor_not_found()
        {
            //Arrange
            var apiKey            = CryptoHelper.GenerateApiKey();
            var notExistingApiKey = apiKey.Reverse().ToString();
            var fakeStaticSensor  = new StaticSensor {
                Id = 1, ApiKey = apiKey
            };
            var fakeReading = new SensorReadingDTO();

            _dataContextMock.Setup(x => x.Sensors).ReturnsDbSet(new List <Sensor> {
                fakeStaticSensor
            });
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var command           = new CreateReadingCommand(fakeReading, notExistingApiKey);
            var handler           = new CreateReadingCommandHandler(_mediatorMock.Object, _dataContextFactoryMock.Object,
                                                                    _mapperMock.Object);

            //Act
            Task Act() => handler.Handle(command, cancellationToken);

            //Assert
            await Assert.ThrowsAsync <SensorNotFoundException>(Act);
        }
        public async Task Handler_publish_notification_if_reading_is_for_static_sensor()
        {
            //Arrange
            var apiKey           = CryptoHelper.GenerateApiKey();
            var fakeStaticSensor = new StaticSensor {
                Id = 1, ApiKey = apiKey
            };
            var fakeStaticSensorReading = new StaticSensorReading();
            var fakeReadingDTO          = new SensorReadingDTO();
            var fakeReadingsDbSet       = new List <StaticSensorReading>();

            _dataContextMock.Setup(x => x.Sensors).ReturnsDbSet(new List <Sensor> {
                fakeStaticSensor
            });
            _dataContextMock.Setup(x => x.StaticSensorReadings).ReturnsDbSet(fakeReadingsDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);
            _mapperMock.Setup(x => x.Map <SensorReadingDTO, StaticSensorReading>(fakeReadingDTO))
            .Returns(fakeStaticSensorReading);


            //Act
            var cancellationToken = new CancellationToken();
            var command           = new CreateReadingCommand(fakeReadingDTO, apiKey);
            var handler           = new CreateReadingCommandHandler(_mediatorMock.Object, _dataContextFactoryMock.Object,
                                                                    _mapperMock.Object);
            var result = await handler.Handle(command, cancellationToken);

            //Assert
            _mediatorMock.Verify(
                x => x.Publish(
                    It.Is <StaticSensorReadingCreatedNotification>(it =>
                                                                   it.SensorId == fakeStaticSensor.Id && it.Reading == fakeStaticSensorReading),
                    It.Is <CancellationToken>(it => it == cancellationToken)), Times.Once);
        }
        public async Task Handler_database_should_be_updated()
        {
            var fakeSensor = new StaticSensor()
            {
                Id        = 1,
                IsVisible = false
            };
            var fakeSensorDbSet = new List <StaticSensor> {
                fakeSensor
            };

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(fakeSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var command           = new ChangeStaticSensorVisibilityStateCommand(fakeSensor.Id, !fakeSensor.IsVisible);
            var handler           =
                new ChangeStaticSensorVisibilityStateCommandHandler(_dataContextFactoryMock.Object,
                                                                    _mediatorMock.Object);

            //Act
            await handler.Handle(command, cancellationToken);

            //Assert
            _dataContextMock.Verify(x => x.SaveChangesAsync(It.Is <CancellationToken>(it => it == cancellationToken)),
                                    Times.Once);
        }
Exemple #11
0
 public async Task UpdateStaticSensorCacheAsync(StaticSensor sensor)
 {
     if (sensor.IsAvailable())
     {
         await AddStaticSensorToCacheAsync(sensor);
     }
     else
     {
         await RemoveStaticSensorFromCacheAsync(sensor.Id);
     }
 }
Exemple #12
0
        private async Task AddStaticSensorToCacheAsync(StaticSensor sensor)
        {
            var sensorsCacheItems = await GetStaticSensorsAsync();

            var sensorInCache = sensorsCacheItems.FirstOrDefault(f => f.Sensor.Id == sensor.Id);

            if (sensorInCache == null)
            {
                sensorsCacheItems.Add(new SensorCacheItemModel(sensor, _pollutionCalculator.CalculatePollutionLevel(sensor.Readings.Cast <Reading>().ToList())));
                _memCache.Set(SensorCacheKey, sensorsCacheItems, SensorCacheLifetime);
            }
        }
        private (SensorEmulator emulator, StaticSensor sensor) GetStaticFakeSensor(string guid)
        {
            var apiKey         = CryptoHelper.GenerateApiKey();
            var sensorEmulator = new SensorEmulator(guid, _appSettings.ServerUrl, apiKey, typeof(StaticSensor));
            var sensor         = new StaticSensor
            {
                ApiKey    = apiKey,
                Latitude  = sensorEmulator.Latitude,
                Longitude = sensorEmulator.Longitude
            };

            return(sensorEmulator, sensor);
        }
Exemple #14
0
        public async Task <StaticSensorDTO> Handle(CreateStaticSensorCommand request,
                                                   CancellationToken cancellationToken)
        {
            await using var context = _dataContextFactory.Create();
            var sensor = new StaticSensor
            {
                Readings  = new List <StaticSensorReading>(),
                ApiKey    = request.ApiKey,
                Latitude  = request.Latitude,
                Longitude = request.Longitude,
            };

            await context.StaticSensors.AddAsync(sensor, cancellationToken);

            await context.SaveChangesAsync(cancellationToken);

            return(_mapper.Map <StaticSensor, StaticSensorDTO>(sensor));
        }
Exemple #15
0
        public async Task Handler_should_remove_static_sensor_from_cache()
        {
            //Arrage

            var fakeStaticSensor = new StaticSensor
            {
                Id = 1
            };

            var cancellationToken = new CancellationToken();
            var notification      = new SensorDeletedNotification(fakeStaticSensor);
            var handler           = new SensorDeletedNotificationHandler(_sensorCacheHelperMock.Object);

            //Act
            await handler.Handle(notification, cancellationToken);

            //Assert
            _sensorCacheHelperMock.Verify(
                x => x.RemoveStaticSensorFromCacheAsync(It.Is <int>(it => it == fakeStaticSensor.Id)), Times.Once);
        }
Exemple #16
0
        public async Task Handler_dispatch_reading_if_sensor_available()
        {
            //Arrange
            var fakeSensor = new StaticSensor
            {
                Id       = 1,
                Readings = new List <StaticSensorReading>
                {
                    new StaticSensorReading
                    {
                        StaticSensorId = 1
                    }
                },
                IsActive  = true,
                IsVisible = true
            };

            var fakeSensorDbSet = new List <StaticSensor> {
                fakeSensor
            };

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(fakeSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);
            _sensorCacheHelperMock.Setup(x => x.GetPollutionLevelAsync(fakeSensor.Id))
            .Returns(Task.FromResult(PollutionLevel.High));

            var cancellationToken = new CancellationToken();
            var notification      = new StaticSensorReadingCreatedNotification(fakeSensor.Id, fakeSensor.Readings.First());
            var handler           = new StaticSensorReadingCreatedNotificationHandler(_pwaDispatchHelperMock.Object,
                                                                                      _sensorCacheHelperMock.Object, _dataContextFactoryMock.Object);

            //Act
            await handler.Handle(notification, cancellationToken);

            //Assert
            _pwaDispatchHelperMock.Verify(
                x => x.DispatchReadingsForStaticSensor(It.Is <int>(it => it == fakeSensor.Id),
                                                       It.Is <PollutionLevel>(it => it == PollutionLevel.High),
                                                       It.Is <StaticSensorReading>(it => it == notification.Reading)),
                Times.Once);
        }
        public async Task Get_Static_Sensors_Success()
        {
            //Arrange
            var fakeApiKey = ApiKeyHelper.Generate();
            var fakeStaticSensorReading = new StaticSensorReading {
                Id = 1, StaticSensorId = 1
            };
            var fakeStaticSensor = new StaticSensor
            {
                Id       = 1,
                ApiKey   = fakeApiKey,
                Readings = new List <StaticSensorReading> {
                    fakeStaticSensorReading
                }
            };
            var fakeStaticSensorCacheItem =
                new SensorCacheItemModel(fakeStaticSensor, PollutionLevel.High);
            var fakeStaticSensorReadingsDTO = new StaticSensorReadingDTO {
                Id = 1
            };
            var fakeStaticSensorReadingsDTOList = new List <StaticSensorReadingDTO> {
                fakeStaticSensorReadingsDTO
            };
            var fakeStaticSensorsCacheList = new List <SensorCacheItemModel> {
                fakeStaticSensorCacheItem
            };

            _sensorCacheHelperMock.Setup(x => x.GetStaticSensorsAsync())
            .Returns(Task.FromResult(fakeStaticSensorsCacheList));
            _mapperMock.Setup((x =>
                               x.Map <List <StaticSensorReading>, List <StaticSensorReadingDTO> >(fakeStaticSensor.Readings)))
            .Returns(fakeStaticSensorReadingsDTOList);

            var readingQueries = new ReadingsQueries(_sensorCacheHelperMock.Object, _mapperMock.Object);

            //Act
            var result = await readingQueries.GetStaticSensorsAsync();

            //Assert
            Assert.NotNull(result.First(x => x.Id == fakeStaticSensor.Id && x.Readings == fakeStaticSensorReadingsDTOList));
        }
Exemple #18
0
        public async Task Handler_update_cache()
        {
            //Arrange

            var fakeReading = new StaticSensorReading
            {
                Id             = 1,
                StaticSensorId = 1
            };

            var fakeSensor = new StaticSensor
            {
                Id        = 1,
                ApiKey    = ApiKeyHelper.Generate(),
                IsActive  = true,
                IsVisible = true,
                Readings  = new List <StaticSensorReading> {
                    fakeReading
                }
            };
            var fakeSensorDbSet = new List <StaticSensor> {
                fakeSensor
            };

            _dataContextMock.Setup(x => x.Set <StaticSensor>()).ReturnsDbSet(fakeSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var notification      = new StaticSensorReadingCreatedNotification(fakeSensor.Id, fakeReading);
            var handler           =
                new StaticSensorReadingCreatedNotificationHandler(_dataContextFactoryMock.Object,
                                                                  _sensorCacheHelperMock.Object);

            //Act
            await handler.Handle(notification, cancellationToken);

            //Assert
            _sensorCacheHelperMock.Verify(
                x => x.UpdateSensorCacheWithReadingAsync(It.Is <StaticSensorReading>(it => it == fakeReading)), Times.Once);
        }
Exemple #19
0
        public async Task Handler_should_throw_exception_if_sensor_not_found()
        {
            //Arrange

            var fakeReading = new StaticSensorReading
            {
                Id             = 1,
                StaticSensorId = 1
            };

            var fakeSensor = new StaticSensor
            {
                Id        = 1,
                ApiKey    = ApiKeyHelper.Generate(),
                IsActive  = true,
                IsVisible = true,
                Readings  = new List <StaticSensorReading> {
                    fakeReading
                }
            };
            var fakeSensorDbSet = new List <StaticSensor> ();

            _dataContextMock.Setup(x => x.Set <StaticSensor>()).ReturnsDbSet(fakeSensorDbSet);
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var notification      = new StaticSensorReadingCreatedNotification(fakeSensor.Id, fakeReading);
            var handler           =
                new StaticSensorReadingCreatedNotificationHandler(_dataContextFactoryMock.Object,
                                                                  _sensorCacheHelperMock.Object);

            //Act
            Task Act() => handler.Handle(notification, cancellationToken);

            //Assert
            await Assert.ThrowsAsync <SensorNotFoundException>(Act);
        }
Exemple #20
0
        public async Task Handler_should_dispatch_reading_for_portable_sensor()
        {
            //Arrange
            var fakeSensor = new StaticSensor
            {
                Id = 1
            };
            var fakeSensorReading = new StaticSensorReading
            {
                Id = 1
            };

            var cancellationToken = new CancellationToken();
            var notification      = new StaticSensorReadingCreatedNotification(fakeSensor.Id, fakeSensorReading);
            var handler           = new StaticSensorReadingCreatedNotificationHandler(_adminDispatchHelperMock.Object);

            //Act
            await handler.Handle(notification, cancellationToken);

            //Assert
            _adminDispatchHelperMock.Verify(x =>
                                            x.DispatchReadingsForStaticSensorAsync(It.Is <int>(it => it == fakeSensor.Id),
                                                                                   It.Is <StaticSensorReading>(it => it == fakeSensorReading)), Times.Once);
        }
 public SensorCacheItemModel(StaticSensor sensor, PollutionLevel pollutionLevel)
 {
     Sensor         = sensor;
     PollutionLevel = pollutionLevel;
 }