public async Task Handler_should_return_created_sensor_dto_with_provided_params()
        {
            //Arrange
            var apiKey = CryptoHelper.GenerateApiKey();

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(new List <StaticSensor>());
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);
            _mapperMock.Setup(x => x.Map <StaticSensor, StaticSensorDTO>(It.IsAny <StaticSensor>())).Returns(
                (StaticSensor v) => new StaticSensorDTO
            {
                ApiKey    = v.ApiKey,
                Latitude  = v.Latitude,
                Longitude = v.Longitude
            });

            var cancellationToken = new CancellationToken();
            var command           = new CreateStaticSensorCommand(apiKey, 53, 53);
            var handler           = new CreateStaticSensorCommandHandler(_dataContextFactoryMock.Object, _mapperMock.Object);

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

            //Assert
            Assert.Equal(apiKey, result.ApiKey);
            Assert.Equal(command.Latitude, result.Latitude);
            Assert.Equal(command.Longitude, result.Longitude);
        }
        public async Task Handler_should_throw_exception_if_dependency_is_null(int paramsSetIndex)
        {
            //Arrage
            var testArgs = new[]
            {
                new[] { _dataContextFactoryMock.Object, (object)null },
                new[] { (object)null, _mapperMock.Object },
            };

            var testArgsCurrentSet = testArgs[paramsSetIndex];

            //Act
            void Act()
            {
                var handler = new CreateStaticSensorCommandHandler(
                    (IDataContextFactory <DataContext>)testArgsCurrentSet[0], (IMapper)testArgsCurrentSet[1]);
            }

            //Assert
            Assert.Throws <ArgumentNullException>(Act);
        }
        public async Task Handler_should_update_database_with_sensor_with_provided_params()
        {
            //Arrange
            var apiKey = CryptoHelper.GenerateApiKey();

            _dataContextMock.Setup(x => x.StaticSensors).ReturnsDbSet(new List <StaticSensor>());
            _dataContextFactoryMock.Setup(x => x.Create()).Returns(_dataContextMock.Object);

            var cancellationToken = new CancellationToken();
            var command           = new CreateStaticSensorCommand(apiKey, 53, 53);
            var handler           = new CreateStaticSensorCommandHandler(_dataContextFactoryMock.Object, _mapperMock.Object);

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

            //Assert
            //Multiple assert because test is the same for both verified methods and they are very closely related
            _dataContextMock.Verify(x => x.StaticSensors.AddAsync(It.Is <StaticSensor>(it => it.ApiKey == apiKey && it.Latitude == command.Latitude && it.Longitude == command.Longitude),
                                                                  It.Is <CancellationToken>(it => it == cancellationToken)), Times.Once);
            _dataContextMock.Verify(x => x.SaveChangesAsync(
                                        It.Is <CancellationToken>(it => it == cancellationToken)), Times.Once);
        }