public void TestSingleDependency() { JobSorter theSorter = new JobSorter(); string jobList = "a => , b => c, c => "; string orderedList = theSorter.SortJobs(jobList); Assert.AreEqual(orderedList, "a, c, b"); }
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"); }
public void TestSingleJob() { JobSorter theSorter = new JobSorter(); string jobList = "a => "; string orderedList = theSorter.SortJobs(jobList); Assert.AreEqual(orderedList, "a"); }
public void TestNonRelatedJobs() { JobSorter theSorter = new JobSorter(); string jobList = "a => , b => , c => "; string orderedList = theSorter.SortJobs(jobList); Assert.AreEqual(orderedList, "a, b, c"); }
public void TestEmptyString() { JobSorter theSorter = new JobSorter(); string jobList = ""; string orderedList = theSorter.SortJobs(jobList); Assert.AreEqual(jobList, orderedList); }
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"); }
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); }
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); }
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); }
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))); } }
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))); } }
/// <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); }
public void Setup() { JobSorterObject = new JobSorter(); }