コード例 #1
0
        /// <inheritdoc />
        public IEnumerable <CustomModelError> ValidateTransferDto(TransactionPostDto transaction)
        {
            var result = new List <CustomModelError>();

            result
            .AddError(() =>
                      transaction.From.ToNormalizedCardNumber() ==
                      transaction.To.ToNormalizedCardNumber(),
                      "from",
                      "From card and to card is Equal",
                      "Нельзя перевести на ту же карту",
                      TypeCriticalException.CARD)
            .AddError(() => !_cardChecker.CheckCardEmitter(transaction.From),
                      "from",
                      "Card number is invalid",
                      "Номер карты неверный",
                      TypeCriticalException.CARD)
            .AddError(() => !_cardChecker.CheckCardEmitter(transaction.To),
                      "to",
                      "Card number is invalid",
                      "Номер карты неверный",
                      TypeCriticalException.CARD)
            .AddError(() => transaction.Sum <= 0,
                      "sum",
                      "Sum must be greater then 0",
                      "Сумма должна быть больше 0");

            return(result);
        }
コード例 #2
0
 public static Transaction GenerateFakeTransaction(Card card, TransactionPostDto transaction) =>
 new Transaction
 {
     Card           = card,
     CardFromNumber = transaction.From,
     CardToNumber   = transaction.To,
     Sum            = transaction.Sum
 };
コード例 #3
0
        public ActionResult <TransactionGetDto> Post([FromBody][Required] TransactionPostDto value)
        {
            // Validate
            var validateResult = _dtoValidationService.ValidateTransferDto(value);

            if (validateResult.HasErrors())
            {
                ModelState.AddErrors(validateResult);
            }

            if (!ModelState.IsValid)
            {
                _logger.LogStateWarning("This model is invalid.", ModelState);
                return(BadRequest(ModelState));
            }

            // Work
            var user = _userRepository.GetUser(User.Identity.Name);

            if (user == null)
            {
                return(Forbid());
            }

            var(transaction, transferResult) = _bankService.TryTransferMoney(
                user,
                value.Sum,
                value.From,
                value.To);

            if (transferResult.HasErrors())
            {
                ModelState.AddErrors(transferResult);
                _logger.LogStateError("Transferring was unsuccessfully.", ModelState);

                return(BadRequest(ModelState));
            }

            var cardFromNumber = value.From.ToNormalizedCardNumber();

            var dto = _dtoFactory.Map(transaction, TryValidateModel);

            switch (dto)
            {
            // Validate
            case null:
                _logger.LogError("Transferring was unsuccessfully.");
                return(BadRequest("Transferring error"));

            default:
                return(Created($"/transactions/{cardFromNumber}", dto));
            }
        }
コード例 #4
0
        public TransactionDto AddTransaction(TransactionPostDto transactionDto)
        {
            var transaction = _mapper.Map <Transaction>(transactionDto);
            var currency    = (Currencies)Enum.Parse(typeof(Currencies), transactionDto.Currency);

            transaction.CurrencyCodeId      = (int)currency;
            transaction.TransactionStatusId = 1;
            transaction.TransactionDate     = DateTime.UtcNow;

            _unityOfWork.Transactions.Add(transaction);
            _unityOfWork.Complete();
            return(GetTransaction(transaction.TransactionId));
        }
コード例 #5
0
        public void ValidateTransferDto_ValidData_NoErrors(string from, string to, decimal sum)
        {
            // Arrange
            var transaction = new TransactionPostDto
            {
                From = from,
                To   = to,
                Sum  = sum
            };

            // Act
            var errors = _dtoValidationService.ValidateTransferDto(transaction);

            // Assert
            _cardCheckerMock.Verify(x => x.CheckCardEmitter(from), Times.Once);
            _cardCheckerMock.Verify(x => x.CheckCardEmitter(to), Times.Once);
            Assert.Empty(errors);
        }
コード例 #6
0
        public void ValidateTransferDto_EqualsCard_Error()
        {
            // Arrange
            var transaction = new TransactionPostDto
            {
                From = TrueCardNumber,
                To   = TrueCardNumber,
                Sum  = 1
            };

            // Act
            var errors = _dtoValidationService.ValidateTransferDto(transaction);

            // Assert
            _cardCheckerMock.Verify(x => x.CheckCardEmitter(TrueCardNumber), Times.Exactly(2));
            Assert.Single(errors);
            Assert.Equal("from", errors.First().FieldName);
            Assert.Equal("From card and to card is Equal", errors.First().Message);
            Assert.Equal("Нельзя перевести на ту же карту", errors.First().LocalizedMessage);
        }
コード例 #7
0
        public void ValidateTransferDto_WrongToCard_Error()
        {
            // Arrange
            var transaction = new TransactionPostDto
            {
                From = TrueCardNumber,
                To   = WrongCardNumber,
                Sum  = 1
            };

            // Act
            var errors = _dtoValidationService.ValidateTransferDto(transaction);

            // Assert
            _cardCheckerMock.Verify(x => x.CheckCardEmitter(WrongCardNumber), Times.Once);
            _cardCheckerMock.Verify(x => x.CheckCardEmitter(TrueCardNumber), Times.Once);
            Assert.Single(errors);
            Assert.Equal("to", errors.First().FieldName);
            Assert.Equal("Card number is invalid", errors.First().Message);
            Assert.Equal("Номер карты неверный", errors.First().LocalizedMessage);
        }
コード例 #8
0
        public void ValidateTransferDto_InvalidSum_Error(string from, string to, decimal sum)
        {
            // Arrange
            var transaction = new TransactionPostDto
            {
                From = from,
                To   = to,
                Sum  = sum
            };

            // Act
            var errors = _dtoValidationService.ValidateTransferDto(transaction);

            // Assert
            _cardCheckerMock.Verify(x => x.CheckCardEmitter(from), Times.Once);
            _cardCheckerMock.Verify(x => x.CheckCardEmitter(to), Times.Once);
            Assert.Single(errors);
            Assert.Equal("sum", errors.First().FieldName);
            Assert.Equal("Sum must be greater then 0", errors.First().Message);
            Assert.Equal("Сумма должна быть больше 0", errors.First().LocalizedMessage);
        }
コード例 #9
0
 public void Post([FromBody] TransactionPostDto transaction)
 {
     _transactionService.AddTransaction(transaction);
 }