private decimal CalculateSalary(ManagerEmployee manager) { var longevityBonus = _arguments.BaseRate * GetLongevityBonus(manager.ExperienceYears, _arguments.ManagerBonusPerYear, _arguments.ManagerBonusLimit); var leadershipBonus = manager.Subordinates.Sum(CalculateSalary) * _arguments.ManagerLeadershipBonus; return(_arguments.BaseRate + longevityBonus + leadershipBonus); }
public void TestManager() { var c = new SalaryCalculator(SalaryArgs); var m = new ManagerEmployee("John Doe", DateTime.Now, null); var e = new Employee("Jane Doe", DateTime.Now, m); var eSalary = c.CalculateSalary(e); var actualSalary = c.CalculateSalary(m); var expectedSalary = SalaryArgs.BaseRate + SalaryArgs.ManagerLeadershipBonus * eSalary; Assert.AreEqual(expectedSalary, actualSalary); }
public void TestSales() { var c = new SalaryCalculator(SalaryArgs); var s = new SalesEmployee("John Doe", DateTime.Now, null); var m = new ManagerEmployee("Jane Doe", DateTime.Now, s); var e = new Employee("John Smith", DateTime.Now, m); var eSalary = c.CalculateSalary(e); var mSsalary = c.CalculateSalary(m); var actualSalary = c.CalculateSalary(s); var expectedSalary = SalaryArgs.BaseRate + SalaryArgs.SalesLeadershipBonus * (eSalary + mSsalary); Assert.AreEqual(expectedSalary, actualSalary); }
public void TestTotal() { var c = new SalaryCalculator(SalaryArgs); var s = new SalesEmployee("John Doe", DateTime.Now, null); var m = new ManagerEmployee("Jane Doe", DateTime.Now, s); var e = new Employee("John Smith", DateTime.Now, m); var eSalary = c.CalculateSalary(e); var mSsalary = c.CalculateSalary(m); var sSalary = c.CalculateSalary(s); var actualSalary = c.CalculateSalary(new List <Employee> { s, m, e }); var expectedSalary = eSalary + mSsalary + sSalary; Assert.AreEqual(expectedSalary, actualSalary); }
private static void Hire() { var r = new Random(); var start = Employee.CompanyFoundationDate; var totalDays = (DateTime.Now - start).TotalDays; var president = new SalesEmployee("John Smith", start); Staff.Add(president); var productionVisePresident = new ManagerEmployee("Jack Doe", start, president); Staff.Add(productionVisePresident); for (var i = 0; i < 5; i++) { var pmName = $"pm{i:D4}"; var pmDate = start.AddDays(r.NextDouble() * totalDays); var pm = new ManagerEmployee(pmName, pmDate, productionVisePresident); Staff.Add(pm); for (var j = 0; j < 5; j++) { var peName = $"pe{i:D2}{j:D2}"; var peDate = start.AddDays(r.NextDouble() * totalDays); Staff.Add(new Employee(peName, peDate, pm)); } } var salesVicePresident = new SalesEmployee("Mary Good", start, president); Staff.Add(salesVicePresident); for (var i = 0; i < 5; i++) { var smName = $"sm{i:D4}"; var smDate = start.AddDays(r.NextDouble() * totalDays); var sm = new ManagerEmployee(smName, smDate, salesVicePresident); Staff.Add(sm); for (var j = 0; j < 5; j++) { var seName = $"se{i:D2}{j:D2}"; var seDate = start.AddDays(r.NextDouble() * totalDays); Staff.Add(new Employee(seName, seDate, sm)); } } }