コード例 #1
0
        public void ReceiptOneElite()
        {
            IDiscountHandler discount = GetDefaultDiscountHandler();
            var order = new Order("Anywhere Bike Shop", discount);

            order.AddLine(new Line(Elite, 1));
            Assert.AreEqual(ResultStatementOneElite, order.Receipt());
        }
コード例 #2
0
        public void HtmlReceiptOneDuraAce()
        {
            IDiscountHandler discount = GetDefaultDiscountHandler();
            var order = new Order("Anywhere Bike Shop", discount);

            order.AddLine(new Line(DuraAce, 1));
            Assert.AreEqual(HtmlResultStatementOneDuraAce, order.Receipt(new HtmlFormatter()));
        }
コード例 #3
0
 public Order(string company, IDiscountHandler discountHandler)
 {
     Company          = company;
     _discountHandler = discountHandler;
 }
コード例 #4
0
        public async Task CalculateBenefits_GivenInput_ReturnsExpectedCosts()
        {
            //Arrange
            string  name1      = "Name1";
            string  name2      = "Name2";
            decimal discount   = 0.5M;
            int     payPeriods = 10;

            decimal employeeYearCost  = 400M;
            decimal dependentYearCost = 200M;

            decimal employeeDiscountYearCost  = (1 - discount) * employeeYearCost;
            decimal dependentDiscountYearCost = (1 - discount) * dependentYearCost;

            List <BeneficiaryRequestModel> testRequest = new List <BeneficiaryRequestModel>
            {
                new BeneficiaryRequestModel
                {
                    Name = name1,
                    Type = BenefitsData.Employee
                },
                new BeneficiaryRequestModel
                {
                    Name = name2,
                    Type = BenefitsData.Dependent
                }
            };

            BenefitCalculator calculator          = new BenefitCalculator();
            IDiscountHandler  fakeDiscountHandler = A.Fake <IDiscountHandler>();
            IDataAccessor     fakeDataAccess      = A.Fake <IDataAccessor>();

            calculator.DiscountHandler = fakeDiscountHandler;
            calculator.DataAccess      = fakeDataAccess;
            A.CallTo(() => fakeDiscountHandler.EligibleForDiscount(A <string> .Ignored)).Returns(true);
            A.CallTo(() => fakeDataAccess.GetBenefitCostsAsync(BenefitsData.Employee)).Returns(Task.FromResult(employeeYearCost));
            A.CallTo(() => fakeDataAccess.GetBenefitCostsAsync(BenefitsData.Dependent)).Returns(Task.FromResult(dependentYearCost));
            A.CallTo(() => fakeDataAccess.GetDiscountAsync()).Returns(Task.FromResult(discount));
            A.CallTo(() => fakeDataAccess.GetPayPeriodsAsync()).Returns(Task.FromResult(payPeriods));

            //Act
            var response = await calculator.CalculateBenefits(testRequest);

            //Assert
            A.CallTo(() => fakeDiscountHandler.EligibleForDiscount(name1)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeDiscountHandler.EligibleForDiscount(name2)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeDataAccess.GetDiscountAsync()).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeDataAccess.GetPayPeriodsAsync()).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeDataAccess.GetBenefitCostsAsync(BenefitsData.Employee)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeDataAccess.GetBenefitCostsAsync(BenefitsData.Dependent)).MustHaveHappenedOnceExactly();

            BeneficiaryResponseModel expected1 = new BeneficiaryResponseModel
            {
                Name       = name1,
                Type       = BenefitsData.Employee,
                YearCost   = employeeDiscountYearCost,
                PeriodCost = decimal.Round((employeeDiscountYearCost / payPeriods), 2)
            };

            BeneficiaryResponseModel expected2 = new BeneficiaryResponseModel
            {
                Name       = name2,
                Type       = BenefitsData.Dependent,
                YearCost   = dependentDiscountYearCost,
                PeriodCost = decimal.Round((dependentDiscountYearCost / payPeriods), 2)
            };

            Assert.AreEqual(2, response.Count, "Expected the response to contain the same number of entries as input");

            var bene1 = response.Where(b =>
            {
                return(b.Name.Equals(expected1.Name) && b.Type.Equals(expected1.Type) && b.YearCost == expected1.YearCost && b.PeriodCost == expected1.PeriodCost);
            });

            var bene2 = response.Where(b =>
            {
                return(b.Name.Equals(expected2.Name) && b.Type.Equals(expected2.Type) && b.YearCost == expected2.YearCost && b.PeriodCost == expected2.PeriodCost);
            });

            Assert.AreEqual(1, bene1.Count(), "Expected the response to contain expected1 model");
            Assert.AreEqual(1, bene2.Count(), "Expected the response to contain expected2 model");
        }
コード例 #5
0
 public HandlersStart(decimal maxDiscount)
 {
     _shipmentHandler = new ShipmentHandler();
     _rulesHandler    = new RulesHandler();
     _discountHandler = new DiscountHandler(maxDiscount);
 }
コード例 #6
0
 public HandlersStart()
 {
     _shipmentHandler = new ShipmentHandler();
     _rulesHandler    = new RulesHandler();
     _discountHandler = new DiscountHandler();
 }
コード例 #7
0
 public Discounts(List <CartItem> cartItems)
 {
     cartItems.ForEach(item => this.cartPrice += (item.ItemPrice * item.ItemCount));
     this.discountHandler = new DiscountHandler();
 }
コード例 #8
0
 public IDiscountHandler SetNext(IDiscountHandler handler)
 {
     _nextHandler = handler;
     return(handler);
 }