public void GetEmployees_TestWithValidContractType()
        {
            var employeeRepositoryMock      = new Mock <IEmployeeRepository>();
            var employeeFactory             = new EmployeeFactory();
            var hourlysalaryCalculatorMock  = new Mock <ISalaryCalculator>();
            var monthlysalaryCalculatorMock = new Mock <ISalaryCalculator>();
            Func <string, ISalaryCalculator> salaryCalculatorFactory = delegate(string name)
            {
                if (name == EmployeeTypeContract.Hourly)
                {
                    return(hourlysalaryCalculatorMock.Object);
                }
                else if (name == EmployeeTypeContract.Monthy)
                {
                    return(monthlysalaryCalculatorMock.Object);
                }

                return(null);
            };


            EmployeeManagement employeeManagementTest = new EmployeeManagement(employeeRepositoryMock.Object, employeeFactory,
                                                                               salaryCalculatorFactory, mapper);


            List <HandsOnTest.DbModels.Employee> dbEmployees = new List <DbModels.Employee>();

            dbEmployees.Add(new DbModels.Employee()
            {
                Id = 1, Name = "Emp1", ContractTypeName = EmployeeTypeContract.Hourly, HourlySalary = 200.00
            });
            dbEmployees.Add(new DbModels.Employee()
            {
                Id = 2, Name = "Emp2", ContractTypeName = EmployeeTypeContract.Monthy, MonthlySalary = 2000.00
            });
            employeeRepositoryMock.Setup(t => t.GetAll()).Returns(dbEmployees);
            hourlysalaryCalculatorMock.Setup(t => t.GetAnnualSalary(It.IsAny <double?>())).Returns(400);
            monthlysalaryCalculatorMock.Setup(t => t.GetAnnualSalary(It.IsAny <double?>())).Returns(100);

            var employees = employeeManagementTest.GetEmployees(1);

            Assert.AreEqual(1, employees.Count);
            Assert.AreEqual(400, employees[0].AnnualSalary);



            employees = employeeManagementTest.GetEmployees(2);
            Assert.AreEqual(1, employees.Count);
            Assert.AreEqual(100, employees[0].AnnualSalary);

            employees = employeeManagementTest.GetEmployees(null);
            Assert.AreEqual(2, employees.Count);
            Assert.AreEqual(400, employees[0].AnnualSalary);
            Assert.AreEqual(100, employees[1].AnnualSalary);
            //employeeManagementTest.GetEmployees()
        }
 public List <Employee> GetEmployees()
 {
     return(employeeManagement.GetEmployees());
 }