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); }
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); }
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); }
public async Task UpdateStaticSensorCacheAsync(StaticSensor sensor) { if (sensor.IsAvailable()) { await AddStaticSensorToCacheAsync(sensor); } else { await RemoveStaticSensorFromCacheAsync(sensor.Id); } }
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); }
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)); }
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); }
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)); }
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); }
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); }
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; }