Exemple #1
0
        public void Return_a_failed_result_when_using_a_value_less_than_or_equal_to_0_or_higher_than_or_equal_to_1(string stringValue)
        {
            decimal value = decimal.Parse(stringValue);

            var result = VatRate.Create(value);

            Assert.IsTrue(result.IsFailure);
            Assert.IsNull(result.Value);
        }
Exemple #2
0
        public void Return_a_succesful_result_when_using_a_value_between_0_and_1(string stringValue)
        {
            decimal value = decimal.Parse(stringValue);

            var result = VatRate.Create(value);

            Assert.IsTrue(result.Success);
            Assert.AreEqual(value, result.Value.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 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 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));
            }
        }