/// <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); }
public static Transaction GenerateFakeTransaction(Card card, TransactionPostDto transaction) => new Transaction { Card = card, CardFromNumber = transaction.From, CardToNumber = transaction.To, Sum = transaction.Sum };
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)); } }
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)); }
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); }
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); }
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); }
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); }
public void Post([FromBody] TransactionPostDto transaction) { _transactionService.AddTransaction(transaction); }