Esempio n. 1
0
        public async Task <ActionResult> Create([FromBody] CardPostDto cardDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var userId = ApplicationUserConfiguration.StudentIdTmp;
            var card   = _mapper.Map <Card>(cardDto);

            card.Status = CardStatus.Todo;

            await _unitOfWork.Cards.Add(card);

            await _unitOfWork.Complete();

            var cardGetDto = _mapper.Map <CardGetDto>(card);

            cardGetDto.SupervisorCreated = card.SupervisorId.HasValue;
            cardGetDto.Expired           = cardGetDto.StartTime == null
                ? (DateTime.Today - cardGetDto.DueDate.Date).Days >= 1
                : (cardGetDto.StartTime + cardGetDto.Duration) < DateTime.Now;
            cardGetDto.Editable = !cardGetDto.Expired && card.Status != CardStatus.Done;

            return(Created(string.Empty, cardGetDto));
        }
        public ActionResult <CardGetDto> Post([FromBody] CardPostDto value)
        {
            // Validate
            var validateResult = _dtoValidationService.ValidateOpenCardDto(value);

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

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

            // Select
            var user = _userRepository.GetUser(User.Identity.Name, false);

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

            var(card, openResult) = _bankService.TryOpenNewCard(
                user,
                value.Name,
                (Currency)value.Currency,
                (CardType)value.Type);

            if (openResult.HasErrors())
            {
                ModelState.AddErrors(openResult);
                _logger.LogStateError("Opening card was unsuccessfully.", ModelState);
                return(BadRequest(ModelState));
            }

            // Mapping
            var dto = _dtoFactory.Map(card, TryValidateModel);

            switch (dto)
            {
            // Validate
            case null:
                _logger.LogError("Opening card was unsuccessfully.");
                return(BadRequest("Не удалось выпустить карту"));

            default:
                return(Created($"/api/cards/{dto.Number}", dto));
            }
        }
        public Card GenerateFakeCard(CardPostDto cardDto)
        {
            var card = new Card
            {
                Transactions = new List <Transaction>(),
                CardNumber   = _cardNumberGenerator.GenerateNewCardNumber(CardType.MAESTRO),
                CardName     = cardDto.Name,
                Currency     = (Currency)cardDto.Currency,
                CardType     = (CardType)cardDto.Type,
                DtOpenCard   = DateTime.Parse("01-01-2019")
            };

            _cardService.TryAddBonusOnOpen(card);

            return(card);
        }
Esempio n. 4
0
        private void PostCard_Field_ReturnBadRequest(
            CardPostDto cardDto,
            IEnumerable <CustomModelError> validationResultFake)
        {
            // Arrange
            _dtoValidationServiceMock.Setup(s => s.ValidateOpenCardDto(cardDto)).Returns(validationResultFake);

            // Act
            var result = (BadRequestObjectResult)_controller.Post(cardDto).Result;

            // Assert
            _dtoValidationServiceMock.Verify(v => v.ValidateOpenCardDto(cardDto), Times.Once);
            _bankServiceMock.Verify(
                v => v.TryOpenNewCard(_user, cardDto.Name, (Currency)cardDto.Currency, (CardType)cardDto.Type),
                Times.Never);

            Assert.Equal(400, result.StatusCode);
        }
        /// <inheritdoc />
        public IEnumerable <CustomModelError> ValidateOpenCardDto(CardPostDto card)
        {
            var result = new List <CustomModelError>();

            result
            .AddError(() => card.Type <= 0 || card.Type > 4,
                      "type",
                      "Card type is invalid",
                      "Тип карты неверный",
                      TypeCriticalException.CARD)
            .AddError(() => card.Currency < 0 || card.Currency > 2,
                      "currency",
                      "Currency is invalid",
                      "Валюта карты неверная",
                      TypeCriticalException.CARD);

            return(result);
        }
Esempio n. 6
0
        public void PostCard_WrongType_ReturnBadRequest(int type)
        {
            // Arrange
            var cardDto = new CardPostDto
            {
                Name     = "name",
                Currency = 0,
                Type     = type
            };

            var validationResultFake = new List <CustomModelError>
            {
                new CustomModelError
                {
                    FieldName = "currency",
                    Message   = string.Empty
                }
            };

            _isUserCall = false;
            PostCard_Field_ReturnBadRequest(cardDto, validationResultFake);
        }
Esempio n. 7
0
        public void PostCard_InternalError_ReturnBadRequest()
        {
            // Arrange
            var cardDto = new CardPostDto
            {
                Name     = "my card",
                Currency = 0,
                Type     = 1
            };

            _dtoValidationServiceMock
            .Setup(m => m.ValidateOpenCardDto(cardDto)).Returns(Enumerable.Empty <CustomModelError>());

            _bankServiceMock
            .Setup(r => r.TryOpenNewCard(_user, cardDto.Name, (Currency)cardDto.Currency, (CardType)cardDto.Type))
            .Returns(
                (null, new List <CustomModelError>
            {
                new CustomModelError
                {
                    FieldName = "internal",
                    Message = "Add bonus to card failed",
                    LocalizedMessage = "Ошибка при открытии карты"
                }
            }));

            // Act
            var result = (BadRequestObjectResult)_controller.Post(cardDto).Result;

            // Assert
            _dtoValidationServiceMock.Verify(v => v.ValidateOpenCardDto(cardDto), Times.Once);
            _bankServiceMock.Verify(
                v => v.TryOpenNewCard(_user, cardDto.Name, (Currency)cardDto.Currency, (CardType)cardDto.Type),
                Times.Once);

            Assert.Equal(400, result.StatusCode);
        }
Esempio n. 8
0
        private CardPostDto PostCard_ValidDto()
        {
            var cardDto = new CardPostDto
            {
                Name     = "my card",
                Currency = 0,
                Type     = 1
            };

            var fakeCard       = _testDataGenerator.GenerateFakeCard(cardDto);
            var fakeCardGetDto = TestDataGenerator.GenerateFakeCardGetDto(fakeCard);

            _dtoValidationServiceMock
            .Setup(m => m.ValidateOpenCardDto(cardDto)).Returns(Enumerable.Empty <CustomModelError>());

            _bankServiceMock
            .Setup(r => r.TryOpenNewCard(_user, cardDto.Name, (Currency)cardDto.Currency, (CardType)cardDto.Type))
            .Returns((fakeCard, Enumerable.Empty <CustomModelError>()));

            _dtoFactoryMock.Setup(d => d.Map(fakeCard, It.IsAny <Func <CardGetDto, bool> >()))
            .Returns(fakeCardGetDto);

            return(cardDto);
        }