/// <summary> /// Generate a Junior Level Test /// </summary> /// <param name="numberOfQuestions">Number of questions</param> /// <param name="category">Test category</param> /// <returns>Generated Test</returns> public TestModel GetTestWith(int numberOfQuestions, CategoryModel category) { var juniorTestQuestions = new List<TestQuestionModel>(); var difficultyEasy = _difficultyLevelRepository.Get(d => d.Difficulty == DifficultyLevelEnum.Easy).SingleOrDefault(); var difficultyMedium = _difficultyLevelRepository.Get(d => d.Difficulty == DifficultyLevelEnum.Medium).SingleOrDefault(); var numberOfEasyQuestions = 70.FloorPercentageOf(numberOfQuestions); var numberOfMediumQuestions = 30.FloorPercentageOf(numberOfQuestions); numberOfEasyQuestions += numberOfQuestions - (numberOfEasyQuestions + numberOfMediumQuestions); var easyQuestions = _questionRepository .Get(q => q.CategoryID == category.Id && q.DifficultyLevelID == difficultyEasy.Id) .Take(numberOfEasyQuestions); var mediumQuestions = _questionRepository .Get(q => q.CategoryID == category.Id && q.DifficultyLevelID == difficultyMedium.Id) .Take(numberOfMediumQuestions); juniorTestQuestions = easyQuestions.Union(mediumQuestions).Shuffle().ToList(); return new TestModel() { Id = Guid.NewGuid(), Name = string.Format("{0} Test", category.Name), Questions = juniorTestQuestions, }; }
public TestQuestionModel(TestQuestion question) { this.Id = question.Id; CategoryID = question.CategoryID; Question = question.Question; DifficultyLevelID = question.DifficultyLevelID; QuestionAnswerModel = new QuestionAnswerModel(question.QuestionAnswer); CategoryModel = new CategoryModel(question.Category); DifficultyLevelModel = new DifficultyLevelModel(question.DifficultyLevel); }
/// <summary> /// Generate an Intern Level Test /// </summary> /// <param name="numberOfQuestions">Number of questions</param> /// <param name="category">Test category</param> /// <returns>Generated Test</returns> public TestModel GetTestWith(int numberOfQuestions, CategoryModel category) { var difficulty = _difficultyLevelRepository.Get(d => d.Difficulty == DifficultyLevelEnum.Easy).SingleOrDefault(); var questions = _questionRepository .Get(q => q.CategoryID == category.Id && q.DifficultyLevelID == difficulty.Id) .Take(numberOfQuestions).ToList(); return new TestModel() { Id = Guid.NewGuid(), Name = string.Format("{0} Test", category.Name), Questions = questions, }; }
/// <summary> /// Generate a Senior Level Test /// </summary> /// <param name="numberOfQuestions">Number of questions</param> /// <param name="category">Test category</param> /// <returns>Generated Test</returns> public TestModel GetTestWith(int numberOfQuestions, CategoryModel category) { var seniorTestQuestions = new List<TestQuestionModel>(); var difficultyEasy = _difficultyLevelRepository.Get(d => d.Difficulty == DifficultyLevelEnum.Easy).SingleOrDefault(); var difficultyMedium = _difficultyLevelRepository.Get(d => d.Difficulty == DifficultyLevelEnum.Medium).SingleOrDefault(); var difficultyHard = _difficultyLevelRepository.Get(d => d.Difficulty == DifficultyLevelEnum.Hard).SingleOrDefault(); var difficultyVeryHard = _difficultyLevelRepository.Get(d => d.Difficulty == DifficultyLevelEnum.VeryHard).SingleOrDefault(); ///TODO: we can refine this more by making a testgenerateRuleEngine so could ask to generate 10% easy, 50% hard, 30% hard, 10% very hard and TestGenerateFactory basically /// generates it. Eliminates all these classes var numberOfEasyQuestions = 10.FloorPercentageOf(numberOfQuestions); var numberOfMediumQuestions = 50.FloorPercentageOf(numberOfQuestions); var numberOfHardQuestions = 30.FloorPercentageOf(numberOfQuestions); var numberOfVeryHardQuestions = 10.FloorPercentageOf(numberOfQuestions); numberOfHardQuestions += numberOfQuestions - (numberOfEasyQuestions + numberOfMediumQuestions + numberOfHardQuestions + numberOfVeryHardQuestions); IList<TestQuestionModel> easyQuestions = new List<TestQuestionModel>(); if (difficultyEasy != null) { easyQuestions = _questionRepository .Get(q => q.CategoryID == category.Id && q.DifficultyLevelID == difficultyEasy.Id) .Take(numberOfEasyQuestions) .ToList(); } IList<TestQuestionModel> mediumQuestions = new List<TestQuestionModel>(); if (difficultyMedium != null) { mediumQuestions = _questionRepository .Get(q => q.CategoryID == category.Id && q.DifficultyLevelID == difficultyMedium.Id) .Take(numberOfMediumQuestions) .ToList(); } IList<TestQuestionModel> hardQuestions = new List<TestQuestionModel>(); if (difficultyHard != null) { hardQuestions = _questionRepository .Get(q => q.CategoryID == category.Id && q.DifficultyLevelID == difficultyHard.Id) .Take(numberOfHardQuestions) .ToList(); } IList<TestQuestionModel> veryHardQuestions = new List<TestQuestionModel>(); if (difficultyVeryHard != null) { veryHardQuestions = _questionRepository .Get(q => q.CategoryID == category.Id && q.DifficultyLevelID == difficultyVeryHard.Id) .Take(numberOfVeryHardQuestions) .ToList(); } seniorTestQuestions = easyQuestions .Union(mediumQuestions) .Union(hardQuestions) .Union(veryHardQuestions).Shuffle().ToList(); return new TestModel() { Id = Guid.NewGuid(), Name = string.Format("{0} Test", category.Name), Questions = seniorTestQuestions, }; }