Esempio n. 1
0
        /// <summary>
        /// Преобразование DTO сотрудника в бизнес модель
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static BaseEmployee ToBaseEmployee(this Employee e)
        {
            var          position = e.Positions;
            BaseEmployee employee = default;

            switch (position)
            {
            case Positions.None:
                break;

            case Positions.Director:
                employee = new DirectorEmployee(e.Id, e.NamePerson, e.SurnamePerson, e.Department, e.BaseSalary);
                break;

            case Positions.Developer:
                employee = new StaffEmployee(e.Id, e.NamePerson, e.SurnamePerson, e.Department, e.BaseSalary);
                break;

            case Positions.Freelance:
                employee = new FreeLancerEmployee(e.Id, e.NamePerson, e.SurnamePerson, e.Department, e.BaseSalary);
                break;

            default:
                break;
            }
            return(employee);
        }
        /// <summary>
        /// Получить асинхронно список всех сотрудников
        /// </summary>
        /// <returns></returns>
        public async Task <IEnumerable <BaseEmployee> > GetEmployeesListAsync()
        {
            //Создаем новый список сотрудников
            List <BaseEmployee> result = new List <BaseEmployee>();

            //Считываем все строки из файла в текстовый массив
            string[] dataLines = await base.ReadAsync();

            foreach (var line in dataLines)
            {
                //Получаем модель сотрудника в виде текстового массива
                string[] model = line.Split(DataSearator);
                //Преобразуем данные массива
                Guid.TryParse(model[0], out Guid id);
                string name          = model[1];
                string surnamePerson = model[2];
                var    department    = (Departments)Enum.Parse(typeof(Departments), model[3]);
                var    position      = (Positions)Enum.Parse(typeof(Positions), model[4]);
                decimal.TryParse(model[5], out decimal salary);

                //Создаем нового сотрудника и в зависимости от позиции создаем тип сотрудника
                BaseEmployee employee = null;
                switch (position)
                {
                case Positions.None:
                    employee = new StaffEmployee(id, name, surnamePerson, department, position, salary);
                    break;

                case Positions.Developer:
                    employee = new StaffEmployee(id, name, surnamePerson, department, salary);
                    break;

                case Positions.Director:
                    employee = new DirectorEmployee(id, name, surnamePerson, department, salary);
                    break;

                case Positions.Freelance:
                    employee = new FreeLancerEmployee(id, name, surnamePerson, department, salary);
                    break;

                default:
                    break;
                }

                //Если сотрудник создан, добавляем его в результирующий список
                if (employee != null)
                {
                    result.Add(employee);
                }
            }
            //Если результирующий список пустой, возвращаем null
            if (result.Count == 0)
            {
                return(null);
            }

            return(result);
        }
        /// <summary>
        /// При первом запуске приложения
        /// Создаем пустые файлы данных
        /// В файл сотрудников записываем сотрудника Admin
        /// </summary>
        /// <param name="file"></param>
        private void FileNotFound(string file)
        {
            //Создаем пустой файл
            new FileInfo(file).Create().Close();
            //Проверяем, если создается файл с сотрудниками, записываем в него учетную запись Admin
            if (file.Contains(FileCSVSettings.EMPLOYEES_LIST_FILENAME))
            {
                var admin = new DirectorEmployee(Guid.Empty, "Admin", null, Departments.Managment, 0);

                //Преобразуем сотрудника в строку используя модель
                string line = admin.ToFile(DataSearator);
                _ = WriteAsync(line).Result;
            }
        }
        public void E_GetEmployeeReportByStaffEmployee_ReturnNull(string _id, string name, string surname,
                                                                  Departments department, decimal baseSalary, Positions position)
        {
            var freelancerID = Guid.Parse("345f97a8-288c-4533-b976-b13d3c75188f");
            var id           = Guid.Parse(_id);
            var _autorize    = new AutorizeToken(Role.Freelancer, freelancerID);

            #region TestSetup
            //Настройка MOCK депозитария
            ICompletedTaskLogsService _serviceCompletedTaskLogs;
            ISalaryReportService      _salaryReportService;
            IEmployeeService          _employeeService;


            Mock <ICompletedTasksLogRepository> _repositoryCompletedTaskLog;
            _repositoryCompletedTaskLog = new Mock <ICompletedTasksLogRepository>();
            _repositoryCompletedTaskLog
            .Setup(method => method.GetCompletedTasksListByEmployeeAsync(id,
                                                                         DateTime.Now.Date.AddDays(-5), DateTime.Now.Date))
            .ReturnsAsync(() => new List <CompletedTaskLog> {
                new CompletedTaskLog(Guid.NewGuid(), id,
                                     DateTime.Now.Date.AddDays(-5), 5, "TestTask4"),
                new CompletedTaskLog(Guid.NewGuid(), id,
                                     DateTime.Now.Date.AddDays(-5), 3, "TestTask5"),
                new CompletedTaskLog(Guid.NewGuid(), id,
                                     DateTime.Now.Date.AddDays(-3), 9, "TestTask5"),
                new CompletedTaskLog(Guid.NewGuid(), id,
                                     DateTime.Now.Date.AddDays(-2), 3, "TestTask6"),
            })
            .Verifiable();

            var idEmp1 = Guid.Parse("345f97a8-287c-4533-b976-b13d3c75188f");

            Mock <IEmployeeRepository> _repositoryEmployee;
            _repositoryEmployee = new Mock <IEmployeeRepository>();
            _repositoryEmployee
            .Setup(method => method.GetEmployeeByIdAsync(idEmp1))
            .ReturnsAsync(new DirectorEmployee(idEmp1, name, surname, department, baseSalary));



            //Настройка сервисов
            _serviceCompletedTaskLogs = new CompletedTasksLogsService(_repositoryCompletedTaskLog.Object, _autorize);
            _employeeService          = new EmployeeService(_repositoryEmployee.Object, _autorize);
            _salaryReportService      = new SalaryReportService(_serviceCompletedTaskLogs, _employeeService);

            //Настройка сотрудника
            BaseEmployee employee = null;
            switch (position)
            {
            case Positions.None:
                break;

            case Positions.Director:
                employee = new DirectorEmployee(id, name, surname, department, baseSalary);
                break;

            case Positions.Developer:
                employee = new StaffEmployee(id, name, surname, department, baseSalary);
                break;

            case Positions.Freelance:
                employee = new FreeLancerEmployee(id, name, surname, department, baseSalary);
                break;

            default:
                break;
            }


            #endregion


            DateTime firstDay = DateTime.Now.Date.AddDays(-5);
            DateTime lastDay  = DateTime.Now.Date;


            var result = _salaryReportService.GetEmployeeSalaryReport(employee, (firstDay, lastDay)).Result;

            Assert.IsNull(result);
        }