public OperationResult ValidateEmail()
        {
            var result = new OperationResult();

            if (string.IsNullOrWhiteSpace(Email))
            {
                result.Success = false;
                result.AddErrorMessage("Email must be valid format!");
            }

            var isValidFormat = true;

            if (!isValidFormat)
            {
                result.Success = false;
                result.AddErrorMessage("Email must be valid format!");
            }

            var isRealDomain = true;

            if (!isRealDomain)
            {
                result.Success = false;
                result.AddErrorMessage("Email must represent a valid domain!");
            }
            return(result);
        }
Ejemplo n.º 2
0
        public async Task CalculateTax_Should_Return_ValidationRuleEngine_Errors()
        {
            //Arrange
            var calculationRequest         = new TaxCalculationRequest();
            var validationRuleEngineResult = new OperationResult <TaxCalculationResponse>();

            const string expectedErrorKey1     = "1232";
            const string expectedErrorMessage1 = "This is an error";

            validationRuleEngineResult.AddErrorMessage(expectedErrorKey1, expectedErrorMessage1);

            const string expectedErrorKey2     = "error2";
            const string expectedErrorMessage2 = "This is an error number2";

            validationRuleEngineResult.AddErrorMessage(expectedErrorKey2, expectedErrorMessage2);

            const int expectedErrorCount = 2;

            _validationRuleEngine.Setup(s => s.Validate(calculationRequest))
            .Returns(validationRuleEngineResult);

            //Act
            var operationResult = await _calculatorManager.CalculateTax(calculationRequest);

            //Assert
            Assert.IsTrue(operationResult.HasErrors);

            var actualErrors = operationResult.GetErrorMessages();

            Assert.AreEqual(expectedErrorCount, actualErrors.Count);

            Assert.IsTrue(actualErrors.Any(e => e.Key == expectedErrorKey1 && e.Value.Contains(expectedErrorMessage1)));
            Assert.IsTrue(actualErrors.Any(e => e.Key == expectedErrorKey2 && e.Value.Contains(expectedErrorMessage2)));
        }
        public async Task <OperationResult <UserDTO> > Subscribing(Subscribe model)
        {
            try
            {
                var operRes = new OperationResult <UserDTO>(true);
                var toUser  = await _userManager.FindByIdAsync(model.ToUserId.ToString());

                if (toUser == null)
                {
                    operRes.AddErrorMessage("FromUserId", $"Не удалось найти пользователя с id = {model.ToUserId}");
                }
                var fromUser = await _userManager.FindByIdAsync(model.FromUserId.ToString());

                if (fromUser == null)
                {
                    operRes.AddErrorMessage("FromUserId", $"Не удалось найти пользователя с id = {model.FromUserId}");
                }
                if (model.FromUserId == model.ToUserId)
                {
                    operRes.AddErrorMessage(null, "id пользователей не должны совпадать");
                }

                using (var connection = _factory.CreateConnection())
                {
                    await Connect(connection);

                    var sub = await connection.QueryFirstOrDefaultAsync <Subscribe>($"select * from [{nameof(Subscribe)}] where [{nameof(Subscribe.FromUserId)}] = @{nameof(model.FromUserId)} and" +
                                                                                    $"[{nameof(Subscribe.ToUserId)}] = @{nameof(model.ToUserId)}", model);

                    if (sub != null)
                    {
                        operRes.AddErrorMessage(null, $"пользователь {model.FromUserId} уже подписан на {model.ToUserId}");
                    }

                    if (!operRes.Succeeded)
                    {
                        return(operRes);
                    }

                    await connection.ExecuteAsync(QueryBuilder.CreateQuery(model), model);

                    var res = new UserDTO {
                        Avatar = toUser.Avatar, Id = toUser.Id, UserName = toUser.UserName
                    };
                    operRes.Results.Add(res);
                    return(operRes);
                }
            }
            catch (Exception ex)
            {
                throw new DatabaseException("Не удалось добавить данные", ex.Message);
            }
        }
        public async Task <OperationResult <CommentInfoDTO> > UpdateCommentAsync(int id, CreateCommentDTO model)
        {
            try
            {
                var operRes = new OperationResult <CommentInfoDTO>(true);
                var user    = await _userManager.FindByIdAsync(model.UserId.ToString());

                if (user == null)
                {
                    operRes.AddErrorMessage("UserId", $"Не удалось найти пользователя с id = {model.UserId}");
                }
                using (var connection = _factory.CreateConnection())
                {
                    connection.ConnectionString = _connectionString;
                    await connection.OpenAsync();

                    var pic = await uow.Pictures.FindByIdAsync(connection, model.PictureId);

                    if (pic == null)
                    {
                        operRes.AddErrorMessage("PictureId", $"Не удалось найти картину с id = {model.PictureId}");
                    }
                    var comm = await uow.Comments.FindByIdAsync(connection, id);

                    if (comm == null)
                    {
                        operRes.AddErrorMessage("id", $"Не удалось найти комментарий с id = {model.PictureId}");
                    }

                    if (!operRes.Succeeded)
                    {
                        return(operRes);
                    }

                    var entity = _mapper.Map <Comment>(model);
                    entity.Id             = id;
                    entity.DateOfCreation = comm.DateOfCreation;
                    await uow.Comments.UpdateAsync(connection, entity);

                    var result = _mapper.Map <CommentInfoDTO>(entity);
                    result.UserName = user.UserName;
                    result.Avatar   = user.Avatar;
                    operRes.Results.Add(result);
                    return(operRes);
                }
            }
            catch (Exception ex)
            {
                throw new DatabaseException("Не удалось добавить данные", ex.Message);
            }
        }
Ejemplo n.º 5
0
        public async Task <OperationResult <PictureInfoDTO> > UpdatePictureAsync(int id, CreatePictureDTO model)
        {
            try
            {
                var operRes = new OperationResult <PictureInfoDTO>(true);
                var user    = await _userManager.FindByIdAsync(model.UserId.ToString());

                if (user == null)
                {
                    operRes.AddErrorMessage("userId", $"Не удалось найти пользователя с id = {model.UserId}");
                }
                using (var connection = _factory.CreateConnection())
                {
                    await Connect(connection);

                    var pic = await uow.Pictures.FindByIdAsync(connection, id);

                    if (pic == null)
                    {
                        operRes.AddErrorMessage("id", $"Не удалось найти картину с id = {id}");
                    }


                    if (!operRes.Succeeded)
                    {
                        return(operRes);
                    }

                    var entity = _mapper.Map <Picture>(model);
                    entity.Id             = id;
                    entity.DateOfCreation = pic.DateOfCreation;
                    await uow.Pictures.UpdateAsync(connection, entity, model.TagIds);

                    var result = _mapper.Map <PictureInfoDTO>(entity);
                    result.UserName = user.UserName;
                    result.Avatar   = user.Avatar;
                    operRes.Results.Add(result);
                    return(operRes);
                }
            }
            catch (NotFoundException ex)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new DatabaseException("Не удалось удалить данные", ex.Message);
            }
        }
Ejemplo n.º 6
0
        public async Task CalculateTax_Should_Return_Calculation_Errors()
        {
            //Arrange
            var calculationRequest   = new TaxCalculationRequest();
            var taxCalculationResult = new OperationResult <decimal>();

            const string expectedErrorKey1     = "calcError1";
            const string expectedErrorMessage1 = "This is a calc error";

            taxCalculationResult.AddErrorMessage(expectedErrorKey1, expectedErrorMessage1);

            const string expectedErrorKey2     = "calcError2";
            const string expectedErrorMessage2 = "This is calc error number2";

            taxCalculationResult.AddErrorMessage(expectedErrorKey2, expectedErrorMessage2);

            const int expectedErrorCount = 2;

            _validationRuleEngine.Setup(s => s.Validate(calculationRequest))
            .Returns(new OperationResult <TaxCalculationResponse>());

            _calculationMappingRepository.Setup(f => f.GetByPostalCodeAsync(calculationRequest.PostalCode))
            .ReturnsAsync(new PostalCodeCalculationTypeMapping());

            _taxCalculatorFactory.Setup(f => f.GetCalculator(It.IsAny <TaxCalculationType>()))
            .Returns(_taxCalculator.Object);

            _taxYearRepository.Setup(t => t.GetTaxYearAsync(It.IsAny <DateTime>()))
            .ReturnsAsync(new TaxYear());

            _taxCalculator.Setup(t => t.CalculateTaxAsync(It.IsAny <TaxYear>(), calculationRequest.AnnualIncome))
            .ReturnsAsync(taxCalculationResult);

            //Act
            var operationResult = await _calculatorManager.CalculateTax(calculationRequest);

            //Assert
            Assert.IsTrue(operationResult.HasErrors);

            var actualErrors = operationResult.GetErrorMessages();

            Assert.AreEqual(expectedErrorCount, actualErrors.Count);

            Assert.IsTrue(actualErrors.Any(e => e.Key == expectedErrorKey1 && e.Value.Contains(expectedErrorMessage1)));
            Assert.IsTrue(actualErrors.Any(e => e.Key == expectedErrorKey2 && e.Value.Contains(expectedErrorMessage2)));
        }
Ejemplo n.º 7
0
        public async Task <OperationResult <PictureFullInfoDTO> > GetPictureByIdAsync(int id, int userId)
        {
            try
            {
                var operRes = new OperationResult <PictureFullInfoDTO>(true);
                var user    = await _userManager.FindByIdAsync(userId.ToString());

                if (user == null)
                {
                    operRes.AddErrorMessage("userId", $"Не удалось найти пользователя с id = {userId}");
                }
                using (var connection = _factory.CreateConnection())
                {
                    await Connect(connection);

                    var pic = await uow.Pictures.FindByIdAsync(connection, id);

                    if (pic == null)
                    {
                        operRes.AddErrorMessage("id", $"Не удалось найти картину с id = {id}");
                    }


                    if (!operRes.Succeeded)
                    {
                        return(operRes);
                    }


                    var result = await connection.QueryFirstOrDefaultAsync <PictureFullInfoDTO>("GetPictureById", new { id, userId }, null, null, CommandType.StoredProcedure);

                    result.CommentList = await connection.QueryAsync <CommentInfoDTO>("GetCommentsForPicture", new { pictureId = id }, null, null, CommandType.StoredProcedure);

                    result.Tags = await uow.Tags.GetTagsForPicture(connection, id);

                    operRes.Results.Add(result);
                    return(operRes);
                }
            }
            catch (Exception ex)
            {
                throw new DatabaseException("Не удалось извлечь данные", ex.Message);
            }
        }
Ejemplo n.º 8
0
        protected override OperationResult <decimal> Validate()
        {
            var result = new OperationResult <decimal>();

            if (TaxRateSettings?.Count > 1)
            {
                result.AddErrorMessage($"More than 1 Flat Rate Tax settings have been found for the year: {TaxYear}");
            }

            return(result);
        }
Ejemplo n.º 9
0
        private OperationResult <decimal> BaseValidation()
        {
            var result = new OperationResult <decimal>();

            if (TaxRateSettings == null || !TaxRateSettings.Any())
            {
                result.AddErrorMessage($"No Tax Rate setting have been found for the tax year: {TaxYear}");
            }

            return(result);
        }
Ejemplo n.º 10
0
        public OperationResult Validate(ICoin currentCoin)
        {
            var operationResult = new OperationResult();
            var currentOunces   = _coinJar.GetTotalVolume();

            if ((currentOunces + currentCoin.Volume) > _maxFluidOunces)
            {
                operationResult.AddErrorMessage("CoinJar", $"Coin Jar can only hold {_maxFluidOunces} fluid ounces. Current total fluid ounces: {currentOunces:N}, Coin Fluid Ounces: {currentCoin.Volume:N}");
            }

            return(operationResult);
        }
Ejemplo n.º 11
0
        public OperationResult <TaxCalculationResponse> Validate(TaxCalculationRequest request)
        {
            var operationResult = new OperationResult <TaxCalculationResponse>();
            var taxYear         = _taxYear.GetTaxYearAsync(_clock.GetCurrentDateTime()).Result;

            if (taxYear == null)
            {
                operationResult.AddErrorMessage(string.Empty, "Tax year was not found for today's date.");
                return(operationResult);
            }

            return(operationResult);
        }
Ejemplo n.º 12
0
        public OperationResult <TaxCalculationResponse> Validate(TaxCalculationRequest request)
        {
            var operationResult = new OperationResult <TaxCalculationResponse>();
            var mapping         = _calculationMappingRepository.GetByPostalCodeAsync(request.PostalCode).Result;

            if (mapping == null)
            {
                operationResult.AddErrorMessage(nameof(request.PostalCode), $"Postal code: {request.PostalCode} was not found.");
                return(operationResult);
            }

            return(operationResult);
        }
Ejemplo n.º 13
0
        public async Task <OperationResult <PictureInfoDTO> > CreatePictureAsync(CreatePictureDTO model)
        {
            try
            {
                var operRes = new OperationResult <PictureInfoDTO>(true);
                if (!_file.IsExist(model.ImagePath))
                {
                    operRes.AddErrorMessage("ImagePath", "Не удалось загрузить файл");
                }
                var user = await _userManager.FindByIdAsync(model.UserId.ToString());

                if (user == null)
                {
                    operRes.AddErrorMessage("UserId", $"Не удалось найти пользователя с id = {model.UserId}");
                }
                var entity = _mapper.Map <Picture>(model);
                entity.DateOfCreation = DateTime.Now;
                using (var connection = _factory.CreateConnection())
                {
                    await Connect(connection);

                    entity = await uow.Pictures.CreateAsync(connection, entity, model.TagIds);
                }
                var result = _mapper.Map <PictureInfoDTO>(entity);
                result.Avatar   = user.Avatar;
                result.UserName = user.UserName;
                operRes.Results.Add(result);
                return(operRes);
            }
            catch (NotFoundException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new DatabaseException("Не удалось добавить данные", ex.Message);
            }
        }
Ejemplo n.º 14
0
        public OperationResult Validate(T entity)
        {
            var operationResult = new OperationResult();

            foreach (var validationRule in ValidationRules)
            {
                var validationResult = validationRule.Validate(entity);

                if (validationResult.HasErrors)
                {
                    foreach (var keyValuePair in validationResult.GetErrorMessages())
                    {
                        operationResult.AddErrorMessage(keyValuePair.Key, keyValuePair.Value);
                    }
                }
            }
            return(operationResult);
        }
Ejemplo n.º 15
0
        public async Task Calculate_Should_Return_BadRequest_When_Manager_Returns_Errors()
        {
            //Arrange
            const decimal annualIncome         = 250000;
            const string  postalCode           = "1234";
            var           expectedErrorMessage = "my errors";
            var           errorKey             = "errorKey";

            TaxCalculationRequestModel model = new TaxCalculationRequestModel
            {
                AnnualIncome = annualIncome,
                PostalCode   = postalCode
            };

            TaxCalculationRequest actualManagerRequest = null;

            var managerResult = new OperationResult <TaxCalculationResponse>();

            managerResult.AddErrorMessage(errorKey, expectedErrorMessage);

            _manager.Setup(r => r.CalculateTax(It.IsAny <TaxCalculationRequest>()))
            .Callback((TaxCalculationRequest r) => actualManagerRequest = r)
            .ReturnsAsync(() => managerResult);

            //Act
            var result = await _controller.Calculate(model);

            //Assert
            Assert.IsInstanceOf <BadRequestObjectResult>(result.Result);
            var
                responseModel = (SerializableError)((BadRequestObjectResult)result.Result).Value;

            Assert.AreEqual(expectedErrorMessage, ((string[])responseModel[errorKey])[0]);

            _manager.Verify(f => f.CalculateTax(It.IsAny <TaxCalculationRequest>()), Times.Once);
            Assert.AreEqual(annualIncome, actualManagerRequest.AnnualIncome);
            Assert.AreEqual(postalCode, actualManagerRequest.PostalCode);
        }