/// <summary> /// Here we use the factory method pattern to calculate the employee's AnnualSalary /// </summary> /// <param name="employee">Employee</param> private static void ProcessEmployee(Employee employee) { IEmployeeFactory employeeFactory = null; var salary = 0m; switch (employee.ContractTypeName) { case "HourlySalaryEmployee": employeeFactory = new HourlyEmployeeFactory(); salary = employee.HourlySalary; break; case "MonthlySalaryEmployee": employeeFactory = new MonthlyEmployeeFactory(); salary = employee.MonthlySalary; break; default: break; } if (employeeFactory != null) { employee.AnnualSalary = employeeFactory.GetEmployee().CalculateAnnualSalary(salary); } }
public void HourlyEmployeeFactory_Create_CreatesEmployee() { // arrange var basicEmployee = new BasicEmployee { Id = 100, Name = "Employee X", ContractTypeName = "HourlySalaryEmployee", RoleId = 300, RoleName = "Role Name", RoleDescription = "Role Description", HourlySalary = 150, MonthlySalary = 200 }; var expectedSalary = basicEmployee.HourlySalary * 120 * 12; var factory = new HourlyEmployeeFactory(); // act var hourlyEmployee = factory.Create(basicEmployee); // assert Assert.IsNotNull(hourlyEmployee); Assert.IsInstanceOfType(hourlyEmployee, typeof(HourlyEmployee)); Assert.AreEqual(basicEmployee.Id, hourlyEmployee.Id); Assert.AreEqual(basicEmployee.RoleId, hourlyEmployee.Role.Id); Assert.AreEqual(expectedSalary, hourlyEmployee.AnnualSalary); }
public void HourlyEmployeeFactoryShouldCreateHourlySalaryEmployeeDTO() { var employee = new Employee(); // arrange var factory = new HourlyEmployeeFactory(employee); // act var dto = factory.GetEmployeeDto(); //assert Assert.IsInstanceOfType(dto, typeof(HourlySalaryEmployeeDTO)); }
public void HourlyEmployeeRateShouldBeOk() { //arrange var employee = new Employee(); employee.HourlySalary = 10; employee.ContractTypeName = "HourlySalaryEmployee"; //act var factory = new HourlyEmployeeFactory(employee); var dto = factory.GetEmployeeDto(); //assert Assert.AreEqual(dto.AnnualRate, 120 * employee.HourlySalary * 12); }