public void UpdateJobCategoryQuestionCount_DoesNotUpdateJobCategoryStateIfNoFilteredState() { var jc = new JobCategoryResult { JobCategoryName = "Animal Care", TotalQuestions = 3 }; var sut = new UserSession { ResultData = new ResultData { JobCategories = new [] { jc } }, FilteredAssessmentState = new FilteredAssessmentState { RecordedAnswers = new [] { new Answer { TraitCode = "A" }, new Answer { TraitCode = "B" }, }, JobCategoryStates = {} } }; sut.UpdateJobCategoryQuestionCount(); Assert.Equal(3, jc.TotalQuestions); }
public IEnumerable <JobCategoryResult> CalculateJobFamilyRelevance(IEnumerable <JobCategory> jobFamilies, IEnumerable <TraitResult> userTraits, string languageCode) { var traitLookup = userTraits.Where(r => r.TotalScore > 0) .ToDictionary(r => r.TraitCode, StringComparer.InvariantCultureIgnoreCase); var results = new List <JobCategoryResult>(); foreach (var jobFamily in jobFamilies) { if (jobFamily.Traits.All(tc => traitLookup.ContainsKey(tc))) { var jfText = jobFamily.Texts.FirstOrDefault(t => t.LanguageCode.ToLower() == languageCode?.ToLower()); var uTraits = jobFamily.Traits.Select(tc => { var trait = traitLookup[tc]; return(new TraitValue() { TraitCode = trait.TraitCode, Total = trait.TotalScore, NormalizedTotal = jobFamily.ResultMultiplier * Convert.ToDecimal(trait.TotalScore) }); }).ToArray(); var traitsTotal = uTraits.Sum(r => r.Total); var jcResult = new JobCategoryResult() { JobCategoryName = jobFamily.Name, JobCategoryText = jfText?.Text, Url = jfText?.Url, TraitsTotal = traitsTotal, TraitValues = uTraits, NormalizedTotal = uTraits.Sum(r => r.NormalizedTotal), Total = traitsTotal, TotalQuestions = jobFamily.Skills.Count, }; results.Add(jcResult); } } return(results.OrderByDescending(t => t.Total).Take(10)); }
public void UpdateJobCategoryQuestionCount_UpdatesJobCategoryState() { var jc = new JobCategoryResult { JobCategoryName = "Animal Care", TotalQuestions = 3 }; var sut = new UserSession { ResultData = new ResultData { JobCategories = new [] { jc } }, FilteredAssessmentState = new FilteredAssessmentState { RecordedAnswers = new [] { new Answer { TraitCode = "A" }, new Answer { TraitCode = "B" }, }, JobCategoryStates = new List <JobCategoryState> { new JobCategoryState("AC", "Animal Care", "QS-1", new[] { new JobCategorySkill { Skill = "A", QuestionNumber = 1, QuestionId = "11" }, new JobCategorySkill { Skill = "B", QuestionNumber = 2, QuestionId = "12" }, new JobCategorySkill { Skill = "C", QuestionNumber = 3, QuestionId = "23" } }) } } }; sut.UpdateJobCategoryQuestionCount(); Assert.Equal(1, jc.TotalQuestions); }
public async Task UMB_518_Invalid_Job_Profiles_Selected() { var _jobCategories = JsonConvert.DeserializeObject <JobCategory[]>(File.ReadAllText("Data/Cosmos/jobcategories.json")); var _questions = JsonConvert.DeserializeObject <Question[]>(File.ReadAllText("Data/Cosmos/questions.json")); _jobCategoryRepository.GetJobCategory("RAS") .Returns(Task.FromResult(_jobCategories.First(r => r.Code == "RAS"))); _questionRepository.GetQuestions("filtered-default-71") .Returns(Task.FromResult(_questions.Where(q => q.PartitionKey == "filtered-default-71").ToArray())); var categoryResult = new JobCategoryResult { JobCategoryName = "Retail and sales" }; var session = new UserSession { ResultData = new ResultData { JobCategories = new [] { categoryResult } }, AssessmentState = new AssessmentState("q-1", 1) { RecordedAnswers = new [] { new Answer { QuestionNumber = 1, SelectedOption = AnswerOption.Agree }, }, CurrentQuestion = 1 }, FilteredAssessmentState = new FilteredAssessmentState { CurrentFilterAssessmentCode = "RAS", RecordedAnswers = new[] { new Answer { TraitCode = "Speaking, Verbal Abilities", SelectedOption = AnswerOption.Yes }, new Answer { TraitCode = "Cooperation", SelectedOption = AnswerOption.No }, new Answer { TraitCode = "Self Control", SelectedOption = AnswerOption.No }, new Answer { TraitCode = "Stress Tolerance", SelectedOption = AnswerOption.Yes } }, JobCategoryStates = new List <JobCategoryState> { new JobCategoryState("RAS", "Retail and Sales", "filtered-default-71", new[] { new JobCategorySkill { QuestionNumber = 1, Skill = "Speaking, Verbal Abilities", QuestionId = "filtered-default-71-46" }, new JobCategorySkill { QuestionNumber = 2, Skill = "Cooperation", QuestionId = "filtered-default-71-4" }, new JobCategorySkill { QuestionNumber = 3, Skill = "Self Control", QuestionId = "filtered-default-71-42" }, new JobCategorySkill { QuestionNumber = 4, Skill = "Stress Tolerance", QuestionId = "filtered-default-71-47" }, }) } } }; await _sut.CalculateAssessment(session, _logger); Assert.Contains("E-commerce manager", categoryResult.FilterAssessmentResult.SuggestedJobProfiles); }
public async Task CalculateAssessement_ShouldReturn_CorrectSelectedJobProfiles(AnswerOption a, AnswerOption b, AnswerOption c, AnswerOption d, string profiles) { _questionRepository.GetQuestions("qs-1").Returns(Task.FromResult(new [] { new Question { QuestionId = "1", TraitCode = "A" }, new Question { QuestionId = "2", TraitCode = "B" }, new Question { QuestionId = "3", TraitCode = "C" }, new Question { QuestionId = "4", TraitCode = "D" } })); _jobCategoryRepository.GetJobCategory("AC").Returns(Task.FromResult(new JobCategory { Name = "Animal Care", Skills = new List <JobProfileSkillMapping> { new JobProfileSkillMapping { ONetAttribute = "A", JobProfiles = new List <JobProfileMapping> { new JobProfileMapping { JobProfile = "JP1", Included = true }, new JobProfileMapping { JobProfile = "JP2", Included = true }, new JobProfileMapping { JobProfile = "JP3", Included = true }, new JobProfileMapping { JobProfile = "JP4", Included = false }, new JobProfileMapping { JobProfile = "JP5", Included = true }, } }, new JobProfileSkillMapping { ONetAttribute = "B", JobProfiles = new List <JobProfileMapping> { new JobProfileMapping { JobProfile = "JP1", Included = true }, new JobProfileMapping { JobProfile = "JP2", Included = false }, new JobProfileMapping { JobProfile = "JP3", Included = true }, new JobProfileMapping { JobProfile = "JP4", Included = false }, new JobProfileMapping { JobProfile = "JP5", Included = true }, } }, new JobProfileSkillMapping { ONetAttribute = "C", JobProfiles = new List <JobProfileMapping> { new JobProfileMapping { JobProfile = "JP1", Included = false }, new JobProfileMapping { JobProfile = "JP2", Included = false }, new JobProfileMapping { JobProfile = "JP3", Included = true }, new JobProfileMapping { JobProfile = "JP4", Included = false }, new JobProfileMapping { JobProfile = "JP5", Included = true }, } }, new JobProfileSkillMapping { ONetAttribute = "D", JobProfiles = new List <JobProfileMapping> { new JobProfileMapping { JobProfile = "JP1", Included = false }, new JobProfileMapping { JobProfile = "JP2", Included = true }, new JobProfileMapping { JobProfile = "JP3", Included = true }, new JobProfileMapping { JobProfile = "JP4", Included = false }, new JobProfileMapping { JobProfile = "JP5", Included = true }, } } } })); var categoryResult = new JobCategoryResult { JobCategoryName = "Animal Care" }; var session = new UserSession { ResultData = new ResultData { JobCategories = new [] { categoryResult } }, AssessmentState = new AssessmentState("q-1", 1) { RecordedAnswers = new [] { new Answer { QuestionNumber = 1, SelectedOption = AnswerOption.Agree }, }, CurrentQuestion = 1 }, FilteredAssessmentState = new FilteredAssessmentState { CurrentFilterAssessmentCode = "AC", RecordedAnswers = new[] { new Answer { TraitCode = "A", SelectedOption = a }, new Answer { TraitCode = "B", SelectedOption = b }, new Answer { TraitCode = "C", SelectedOption = c }, new Answer { TraitCode = "D", SelectedOption = d } }, JobCategoryStates = new List <JobCategoryState> { new JobCategoryState("AC", "Animal Care", "qs-1", new[] { new JobCategorySkill { QuestionNumber = 1, Skill = "A" }, new JobCategorySkill { QuestionNumber = 2, Skill = "B" }, new JobCategorySkill { QuestionNumber = 3, Skill = "C" }, new JobCategorySkill { QuestionNumber = 4, Skill = "D" }, }) } } }; await _sut.CalculateAssessment(session, _logger); if (String.IsNullOrEmpty(profiles)) { Assert.Empty(categoryResult.FilterAssessmentResult.SuggestedJobProfiles); } else { foreach (var profile in profiles.Split(",", StringSplitOptions.RemoveEmptyEntries)) { Assert.Contains(profile, categoryResult.FilterAssessmentResult.SuggestedJobProfiles); } } }