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);
                }
            }
        }