예제 #1
0
        public async Task <IActionResult> InsertMoney([FromBody] InsertMoneyModel.MoneyRequest request)
        {
            if (request == null)
            {
                return(this.BadRequest($"Request {nameof(InsertMoneyModel.MoneyRequest)} is null"));
            }

            var maybeAccount = await this.accountRepository.GetAccountAsync();

            if (!maybeAccount.TryGetValue(out var account))
            {
                return(this.NotFound("No account available"));
            }

            var money          = Money.CreateInstance(request.Amount);
            var canInsertMoney = account.CanInsertMoney(money);

            if (!canInsertMoney.Success)
            {
                return(this.BadRequest($"{canInsertMoney.Code}: coin not registered"));
            }

            account.InsertMoney(money);

            await this.accountRepository.UpdateAccountAsync(account);

            return(this.NoContent());
        }
예제 #2
0
        public async Task Create_NotFound_result_when_no_account_is_available(
            [Frozen] Mock <IAccountRepository> accountRepositoryMock,
            InsertMoneyModel.MoneyRequest request,
            AccountController sut)
        {
            // Act
            var result = await sut.InsertMoney(request);

            // Assert
            accountRepositoryMock.Verify(x => x.UpdateAccountAsync(It.IsAny <Account>()), Times.Never);
            result.Should().BeOfType <NotFoundObjectResult>();
            ((ObjectResult)result).Value.ToString().Should().Be("No account available");
        }
예제 #3
0
        public async Task Create_Ok_result_when_inserting_allowed_money(
            [Frozen] Mock <IAccountRepository> accountRepositoryMock,
            AccountController sut)
        {
            // Arrange
            var request = new InsertMoneyModel.MoneyRequest(0.50m);

            // Act
            var result = await sut.InsertMoney(request);

            // Assert
            accountRepositoryMock.Verify(x => x.UpdateAccountAsync(It.IsAny <Account>()), Times.Once);
            result.Should().BeOfType <NoContentResult>();
        }
예제 #4
0
        public async Task Create_BadRequest_result_when_inserting_not_allowed_money(
            [Frozen] Mock <IAccountRepository> accountRepositoryMock,
            AccountController sut)
        {
            // Arrange
            var request = new InsertMoneyModel.MoneyRequest(0.75m);

            // Act
            var result = await sut.InsertMoney(request);

            // Assert
            accountRepositoryMock.Verify(x => x.UpdateAccountAsync(It.IsAny <Account>()), Times.Never);
            result.Should().BeOfType <BadRequestObjectResult>();
            ((ObjectResult)result).Value.ToString().Should().Be($"{AccountCode.CoinNotRegistered}: coin not registered");
        }