Beispiel #1
0
        public async Task UpdateAmount(int id, decimal amount)
        {
            Statement dbStatement = await statementRepository.Get(id);

            dbStatement.UpdateAmount(MoneyAmount.Create(amount));
            await statementRepository.Save(dbStatement);
        }
Beispiel #2
0
        public void Return_a_failed_result_when_using_a_value_less_than_or_equal_to_0(string stringValue)
        {
            decimal value = decimal.Parse(stringValue);

            var result = MoneyAmount.Create(value);

            Assert.IsTrue(result.IsFailure);
            Assert.IsNull(result.Value);
        }
Beispiel #3
0
        public void Return_a_succesful_result_when_using_a_value_higher_than_0(string stringValue)
        {
            decimal value = decimal.Parse(stringValue);

            var result = MoneyAmount.Create(value);

            Assert.IsTrue(result.Success);
            Assert.AreEqual(value, result.Value.Value);
        }
        private BankStatement BuildBankStatement(decimal balance, DateTime date)
        {
            var bankStatement = new BankStatement();

            bankStatement.SetProperty("Amount", MoneyAmount.Create(balance));
            bankStatement.SetProperty("ExecutionDate", date);

            return(bankStatement);
        }
        public void Create_a_succesful_result_given_valid_VatRate_and_VatAmount()
        {
            VatRate     vatRate   = VatRate.Create(0.10m).Value;
            MoneyAmount vatAmount = MoneyAmount.Create(1).Value;

            var result = PurchaseInfo.CreateWithVatAmount(vatRate, vatAmount);

            Assert.AreEqual(vatRate.Value, result.VatRate.Value);
            Assert.AreEqual(vatAmount.Value, result.VatAmount.Value);
            Assert.AreEqual(11.0m, result.GrossAmount.Value);
            Assert.AreEqual(10.0m, result.NetAmount.Value);
        }
        public void Create_a_purchase_info_given_valid_VatRate_and_GrossAmount()
        {
            VatRate     vatRate     = VatRate.Create(0.10m).Value;
            MoneyAmount grossAmount = MoneyAmount.Create(1.10m).Value;

            var result = PurchaseInfo.CreateWithGrossAmount(vatRate, grossAmount);

            Assert.AreEqual(vatRate.Value, result.VatRate.Value);
            Assert.AreEqual(grossAmount.Value, result.GrossAmount.Value);
            Assert.AreEqual(1.0m, result.NetAmount.Value);
            Assert.AreEqual(0.10m, result.VatAmount.Value);
        }
        public string RefillBalance(int customerId, decimal moneyAmount)
        {
            var moneyToCharge = MoneyAmount.Create(moneyAmount);
            var customer      = customerRepositoryAfterAfter.GetById(customerId).ToResult("Customer can't be found");

            return(Result.Combine(moneyToCharge, customer)
                   .OnSuccess(() => customer.Value !.AddBalance(moneyToCharge.Value))
                   .OnSuccess(() => paymentServiceAfter.ChargePayment(customer.Value !.BillingInfo, moneyToCharge.Value))
                   .OnSuccess(
                       () => customerRepositoryAfterAfter.Save(customer.Value !)
                       .OnFailure(() => paymentServiceAfter.RollbackLastTransaction()))
                   .OnBoth(result => Log(result))
                   .OnBoth(result => result.IsSuccess ? "OK" : result.Error));
        }
Beispiel #8
0
        public void CreateBankStatement_BankShouldHaveId()
        {
            // Arrange
            MoneyAmount amount = MoneyAmount.Create(12.50m);
            DateTime    date   = DateTime.Parse("2018-04-28 18:35:27");

            Bank bank = new Bank();

            // Act
            Action createStatement = () => bank.NewBankStatement(amount, date);

            // Assert
            Assert.Throws <ArgumentException>(createStatement);
        }
Beispiel #9
0
        public void Create_CreditCardStatement_BillShoudHaveId()
        {
            // Arrange
            string   description = "test description";
            decimal  amount      = 100m;
            DateTime date        = DateTime.Parse("2018-05-02");

            CreditCardBill billWithoutId = new CreditCardBill();

            // Act
            Action createStatement = () => CreditCardStatement.Create(
                billWithoutId, StatementDescription.Create(description), MoneyAmount.Create(amount), date);

            // Assert
            Assert.Throws <ArgumentException>(createStatement);
        }
Beispiel #10
0
        public void Create_CreditCardStatement_BillShoudNotBeNull()
        {
            // Arrange
            string   description = "test description";
            decimal  amount      = 100m;
            DateTime date        = DateTime.Parse("2018-05-02");

            CreditCardBill nullBill = null;

            // Act
            Action createStatement = () => CreditCardStatement.Create(
                nullBill, StatementDescription.Create(description), MoneyAmount.Create(amount), date);

            // Assert
            Assert.Throws <ArgumentNullException>(createStatement);
        }
Beispiel #11
0
        public void CreateBankStatement()
        {
            // Arrange
            int         bankId = 10;
            MoneyAmount amount = MoneyAmount.Create(12.50m);
            DateTime    date   = DateTime.Parse("2018-04-28 18:35:27");

            Bank bank = new Bank();

            bank.SetId(bankId);

            // Act
            BankStatement statement = bank.NewBankStatement(amount, date);

            // Assert
            Assert.Equal(bankId, statement.Bank.Id);
            Assert.Equal(date, statement.ExecutionDate);
            Assert.Equal(amount, statement.Amount);
        }
        public Result <PurchaseInfoDto> Handle(GetPurchaseInfoQuery query)
        {
            List <string> errors = new List <string>();

            var vatRateResult = VatRate.Create(query.VatRate);

            if (vatRateResult.IsFailure)
            {
                errors.AddRange(vatRateResult.Errors);
            }

            var amountResult = MoneyAmount.Create(query.Amount);

            if (amountResult.IsFailure)
            {
                errors.AddRange(amountResult.Errors);
                return(Result <PurchaseInfoDto> .ResultFail(errors));
            }

            if (errors.Any())
            {
                return(Result <PurchaseInfoDto> .ResultFail(errors));
            }

            if (query.AmountType == AmountType.Gross)
            {
                return(MapPurchaseInfoToDto(PurchaseInfo.CreateWithGrossAmount(vatRateResult.Value, amountResult.Value)));
            }
            else if (query.AmountType == AmountType.Net)
            {
                return(MapPurchaseInfoToDto(PurchaseInfo.CreateWithNetAmount(vatRateResult.Value, amountResult.Value)));
            }
            else if (query.AmountType == AmountType.Vat)
            {
                return(MapPurchaseInfoToDto(PurchaseInfo.CreateWithVatAmount(vatRateResult.Value, amountResult.Value)));
            }
            else
            {
                throw new ArgumentException(nameof(AmountType));
            }
        }
Beispiel #13
0
        public void Create_CreditCardStatement()
        {
            // Arrange
            string   description = "test description";
            decimal  amount      = 100m;
            DateTime date        = DateTime.Parse("2018-05-02");
            int      id          = 10;

            CreditCardBill bill = new CreditCardBill();

            bill.SetId(id);

            // Act
            CreditCardStatement statement = CreditCardStatement.Create(
                bill, StatementDescription.Create(description), MoneyAmount.Create(amount), date);

            // Assert
            Assert.Equal(id, statement.Bill.Id);
            Assert.Equal(description, statement.Description.Value);
            Assert.Equal(amount, statement.Amount.Value);
            Assert.Equal(date, statement.BuyDate);
        }
Beispiel #14
0
        public void CreateOutcome()
        {
            // Arrange
            var amount      = MoneyAmount.Create(10m);
            var description = StatementDescription.Create("test");
            var date        = DateTime.Parse("2018-04-14");
            var category    = Category.Create("category");

            category.SetId(1);

            // Act
            var statement = Statement.CreateOutcome(description, amount, date, category);

            // Assert
            Assert.Equal(0, statement.Id);
            Assert.Equal(amount, statement.Amount);
            Assert.Equal(description, statement.Description);
            Assert.Equal(category, statement.Category);
            Assert.Equal(date, statement.DueDate);
            Assert.Null(statement.PaymentDate);
            Assert.False(statement.Paid);
            Assert.Equal(StatementDirection.Outcome, statement.Direction);
        }
Beispiel #15
0
        public void MarkAsPaidShouldSavePaymentDate()
        {
            // Arrange
            var date     = DateTime.Parse("2018-04-14");
            var category = Category.Create("category");

            category.SetId(1);

            var statement = Statement.CreateOutcome(StatementDescription.Create("test"), MoneyAmount.Create(10m), date, category);

            // Act
            statement.MarkAsPaid(date);

            // Assert
            Assert.Equal(date, statement.PaymentDate);
            Assert.True(statement.Paid);
        }
Beispiel #16
0
        public void ShouldNotCreateStatementWithCategoryWithoutId()
        {
            // Arrange
            var date     = DateTime.Parse("2018-04-14");
            var category = Category.Create("category");

            // Act
            Action create = () => Statement.CreateOutcome(StatementDescription.Create("test"), MoneyAmount.Create(10m), date, category);

            //Assert
            Assert.Throws <ArgumentException>(create);
        }
        private Statement CreateIncome(decimal amount)
        {
            var date     = DateTime.Parse("2018-04-14");
            var category = Category.Create("income-category");

            category.SetId(1);

            var statement = Statement.CreateOutcome(StatementDescription.Create("Income"), MoneyAmount.Create(amount), date, category);

            statement.SetProperty("Direction", StatementDirection.Income);

            return(statement);
        }
        private Statement CreatePaidOutcome(decimal amount)
        {
            var date     = DateTime.Parse("2018-04-16");
            var category = Category.Create(IncomePaidCategoryName);

            category.SetId(1);

            var statement = Statement.CreateOutcome(StatementDescription.Create("Income"), MoneyAmount.Create(amount), date, category);

            statement.MarkAsPaid(date);

            return(statement);
        }