Пример #1
0
        public void TestSingleDependency()
        {
            JobSorter theSorter = new JobSorter();

            string jobList     = "a => , b => c, c => ";
            string orderedList = theSorter.SortJobs(jobList);

            Assert.AreEqual(orderedList, "a, c, b");
        }
Пример #2
0
        public void TestMultipleDependency()
        {
            JobSorter theSorter = new JobSorter();

            string jobList     = "a => , b => c, c => f, d => a, e => b, f => ";
            string orderedList = theSorter.SortJobs(jobList);

            Assert.AreEqual(orderedList, "a, d, f, c, b, e");
        }
Пример #3
0
        public void TestSingleJob()
        {
            JobSorter theSorter = new JobSorter();

            string jobList     = "a => ";
            string orderedList = theSorter.SortJobs(jobList);

            Assert.AreEqual(orderedList, "a");
        }
Пример #4
0
        public void TestNonRelatedJobs()
        {
            JobSorter theSorter = new JobSorter();

            string jobList     = "a => , b => , c => ";
            string orderedList = theSorter.SortJobs(jobList);

            Assert.AreEqual(orderedList, "a, b, c");
        }
Пример #5
0
        public void TestEmptyString()
        {
            JobSorter theSorter = new JobSorter();

            string jobList     = "";
            string orderedList = theSorter.SortJobs(jobList);

            Assert.AreEqual(jobList, orderedList);
        }
Пример #6
0
        public void TestMultipleDependencyDifferentOrder()
        {
            // The ordered list should be the same as the one for TestMultipleDependency above
            JobSorter theSorter = new JobSorter();

            string jobList     = "a =>, d => a, e => b, f => , c => f, b => c";
            string orderedList = theSorter.SortJobs(jobList);

            Assert.AreEqual(orderedList, "a, d, f, c, b, e");
        }
Пример #7
0
        public void TestCircularDependencies()
        {
            JobSorter theSorter = new JobSorter();

            string jobList     = "a => , b => c, c => f, d => a, e => , f => b";
            string orderedList = "";

            var ex = Assert.ThrowsException <Exception>(() => orderedList = theSorter.SortJobs(jobList));

            Assert.AreEqual("Jobs can't have circular dependencies.", ex.Message);
        }
Пример #8
0
        public void TestSelfDependency()
        {
            JobSorter theSorter = new JobSorter();

            string jobList     = "a =>, b =>, c => c";
            string orderedList = "";

            var ex = Assert.ThrowsException <Exception>(() => orderedList = theSorter.SortJobs(jobList));

            Assert.AreEqual("Jobs can't depend on themselves.", ex.Message);
        }
Пример #9
0
        public void TestCircularDependenciesInDifferentOrder()
        {
            // The job list is the same as for TestCircularDependencies above but in a different order
            JobSorter theSorter = new JobSorter();

            string jobList     = "d => a, a => , f => b, c => f, e => , b => c";
            string orderedList = "";

            var ex = Assert.ThrowsException <Exception>(() => orderedList = theSorter.SortJobs(jobList));

            Assert.AreEqual("Jobs can't have circular dependencies.", ex.Message);
        }
Пример #10
0
        public async Task <IActionResult> GetList([FromQuery] JobSorter sorter)
        {
            try
            {
                var jobFilter = new JobFilter();

                if (User.IsInRole("Company"))
                {
                    jobFilter.CompanyId = int.Parse(User.Identity.Name);
                }
                var result = await jobService.GetByFilterAsync(jobFilter, sorter);

                return(Ok(GetResponse(result)));
            }
            catch (System.Exception ex)
            {
                log.Error(ex.Message, ex);

                return(Ok(GetExceptionResponse <object>(ex)));
            }
        }
Пример #11
0
        public async Task <IActionResult> GetSuitable([FromQuery] JobSorter sorter)
        {
            try
            {
                var candidate = await candidateService.GetByIdAsync(int.Parse(User.Identity.Name));

                var result = await jobService.GetByFilterAsync(new JobFilter()
                {
                    EducationLevel  = candidate?.EducationLevel,
                    ExperienceYears = candidate?.Experince,
                }, sorter);

                return(Ok(GetResponse(result)));
            }
            catch (System.Exception ex)
            {
                log.Error(ex.Message, ex);

                return(Ok(GetExceptionResponse <object>(ex)));
            }
        }
Пример #12
0
        /// <summary>
        /// Jobs return their names
        /// </summary>
        /// <param name="jobBundleName">pass the job bundle number to starting parameter </param>
        private static String RunJobBundle(String jobBundleNumber)
        {
            if (String.IsNullOrEmpty(jobBundleNumber))
            {
                return(String.Empty);
            }

            JobSorter <Job> jobResolver      = new JobSorter <Job>();
            string          dependencyPatern = String.Empty;

            JobBundles.BundleDict.TryGetValue(jobBundleNumber, out dependencyPatern);
            string[] perSubDependencies = dependencyPatern.Split(';');
            char     tmpPrevious        = '@';
            string   depPatern          = String.Empty;
            var      result             = String.Empty;

            try
            {
                foreach (String perTaskDependency in perSubDependencies)
                {
                    depPatern = System.Text.RegularExpressions.Regex.Replace(perTaskDependency, @"\s+", "");
                    // here we detect dependend task/job was set or not that based on given task pattern
                    // if something was configured  for ex : as A => B
                    //for ex: this will find the depended task with name  " B "
                    if (Char.IsLetter(depPatern.Substring(depPatern.Length - 1, 1)[0]))
                    {
                        jobResolver.Add(new Job {
                            JobName = depPatern.Substring(0, 1)[0], Message = $"JobName : " + depPatern.Substring(0, 1)[0]
                        },

                                        new[] { new Job {
                                                    JobName = depPatern.Substring(depPatern.Length - 1, 1)[0], Message = $"JobName : " + depPatern.Substring(depPatern.Length - 1, 1)[0]
                                                } }
                                        );

                        tmpPrevious = depPatern.Substring(depPatern.Length - 1, 1)[0];
                    }
                    else
                    {
                        // if the task was added as a dependency should not add again .!!
                        if (tmpPrevious == depPatern.Substring(0, 1)[0])
                        {
                            continue;
                        }

                        jobResolver.Add(new Job {
                            JobName = depPatern.Substring(0, 1)[0], Message = $"JobName : " + depPatern.Trim().Substring(0, 1)[0]
                        });
                    }
                }

                //sorting the jobs with corresponding patterns sequence
                var sortedResult = jobResolver.Sort();
                var sorted       = sortedResult.Item1;
                var cycled       = sortedResult.Item2;
                if (!cycled.Any())
                {
                    result = String.Join(' ', sorted.ToArray <Job>().Select(j => j.Message));
                }
                else
                {
                    result = String.Format("Cycled dependencies detected: {0} ", String.Join(' ', cycled.ToArray <Job>().Select(j => j.Message)));
                }
            }
            catch (Exception ex) // beside the main duty : it do catch the self dependencies error.
            {
                result = ex.Message;
            }


            return(result);
        }
Пример #13
0
 public void Setup()
 {
     JobSorterObject = new JobSorter();
 }