public void PayIntervalShouldMatchPaycheckCount()
        {
            var expectedPaycheckCounts = new List <int>()
            {
                12 /*monthly*/, 26 /*biweekly*/, 52                                            /*weekly*/
            };

            expectedPaycheckCounts.ForEach(expectedPaycheckCount =>
            {
                var employee = new Employee(1, "Alan", "Smith");
                var salary   = new Salary()
                {
                    PerPeriod = 1000, Interval = (PayInterval)expectedPaycheckCount
                };
                var benefit = new Benefit()
                {
                    Beneficiary = employee, GrossCost = 1000
                };
                var benefitPackage = new BenefitPackage();
                benefitPackage.Benefits.Add(benefit);

                var mockSalaryLogic = new Mock <ISalaryLogic>();
                mockSalaryLogic.Setup(x => x.GetItem(employee)).Returns(salary);

                var mockBenefitLogic = new Mock <IBenefitPackageLogic>();
                mockBenefitLogic.Setup(x => x.GetItem(employee)).Returns(benefitPackage);

                var payrollLogic = new PayrollLogic(mockSalaryLogic.Object, mockBenefitLogic.Object);

                Payroll payroll = payrollLogic.Calculate(employee);

                Assert.AreEqual(expectedPaycheckCount, payroll.PaySchedule.Count);
            });
        }
        public void SalaryShouldMatchPayScheduleSummation()
        {
            var employee = new Employee(1, "Alan", "Smith");
            var salary   = new Salary()
            {
                PerPeriod = 1000, Interval = PayInterval.Weekly
            };
            var benefit = new Benefit()
            {
                Beneficiary = employee, GrossCost = 1000
            };
            var benefitPackage = new BenefitPackage();

            benefitPackage.Benefits.Add(benefit);

            var mockSalaryLogic = new Mock <ISalaryLogic>();

            mockSalaryLogic.Setup(x => x.GetItem(employee)).Returns(salary);

            var mockBenefitLogic = new Mock <IBenefitPackageLogic>();

            mockBenefitLogic.Setup(x => x.GetItem(employee)).Returns(benefitPackage);

            var payrollLogic = new PayrollLogic(mockSalaryLogic.Object, mockBenefitLogic.Object);

            Payroll payroll = payrollLogic.Calculate(employee);

            Assert.AreEqual(payroll.Salary.Yearly, payroll.PaySchedule.Sum(x => x.GrossPay));
            Assert.AreEqual(payroll.NetYearlySalary, payroll.PaySchedule.Sum(x => x.NetPay));
        }