private async Task SaveAnswers(QuestionAnswerDto answer) { CourseInstanceQuestion courseInstanceQuestionEntity = await _context.FindAsync <CourseInstanceQuestion>(answer.IdCourseInstanceQuestion); //Check if already answered. if (courseInstanceQuestionEntity.AnsweredAt.HasValue && courseInstanceQuestionEntity.AnswerShown) { return; } IList <CourseInstanceQuestionOption> options = await _context.CourseInstancesQuestionOption .Where(x => x.CourseInstanceQuestion.Id == courseInstanceQuestionEntity.Id) .OrderBy(x => x.Id) .Include(x => x.QuestionOption).ToListAsync(); if (options.Count != answer.Answers.Count) { throw new InvalidOperationException($"Num options in client-answer and database do not match"); } for (int i = 0; i < options.Count; i++) { CourseInstanceQuestionOption optionInstanceEntity = options[i]; bool thisAnswer = answer.Answers[i]; bool optioncorrect = optionInstanceEntity.QuestionOption.IsTrue == thisAnswer; optionInstanceEntity.Checked = thisAnswer; optionInstanceEntity.Correct = optioncorrect; } courseInstanceQuestionEntity.Correct = options.All(x => x.Correct); courseInstanceQuestionEntity.AnsweredAt = DateTime.Now; await SaveChangesAsync(); }
public IEnumerable <QuestionAnswerDto> PullQuestions() { List <QuestionAnswerDto> QuestionAnswerList = new List <QuestionAnswerDto>(); List <Answers> AnswerList = new List <Answers>(); var questionsMapper = _unitOfWork.QuestionAnswer.GetAll(); foreach (var item in questionsMapper) { Answers answer = new Answers() { AnswerId = item.AnswerId, AnswerDescription = _unitOfWork.Answer.GetById(item.AnswerId).AnswerDescription, Points = _unitOfWork.Answer.GetById(item.AnswerId).Points }; AnswerList.Add(answer); QuestionAnswerDto questionAnswerDto = new QuestionAnswerDto() { QuestionAnswerMappingId = item.QuestionAnswerMappingId, QuestionId = item.QuestionId, Description = _unitOfWork.Question.GetById(item.QuestionId).Description, Answers = AnswerList }; QuestionAnswerList.Add(questionAnswerDto); } return(QuestionAnswerList); }
public IActionResult SaveAnswer(QuestionAnswerDto questionAnswerDto) { //save logic int questionId = HttpContext.Session.Get <int>("CurrentQuestionId"); int surveyId = HttpContext.Session.Get <int>("CurrentSurveyId"); UserResponse userResponse = new UserResponse() { SurveyId = surveyId, AnswerId = questionAnswerDto.SelectedAnswer, QuestionId = questionId, UserId = 1, IsValid = true }; _unitOfWork.UserResponse.Add(userResponse); _unitOfWork.Save(); //Get Question From Session List <QuestionAnswerDto> questionAnswerList = HttpContext.Session.Get <List <QuestionAnswerDto> >("QuestionAnswerDto"); if (questionAnswerList.Count != 0) { QuestionAnswerDto question = questionAnswerList.FirstOrDefault(); questionAnswerList.Remove(question); HttpContext.Session.Set("QuestionAnswerDto", questionAnswerList); HttpContext.Session.Set("CurrentQuestionId", question.QuestionId); HttpContext.Session.Set("CurrentSurveyId", question.SurveyId); return(View("Index", question)); } return(View("Privacy")); }
public async Task <CourseInstanceDto> AnswerQuestionAndGetNextQuestionAsync(QuestionAnswerDto answer) { await SaveAnswers(answer); //Nächste Frage vorbereiten. CourseInstanceQuestion courseInstanceQuestionEntity = await _context.FindAsync <CourseInstanceQuestion>(answer.IdCourseInstanceQuestion); CourseInstance courseInstanceEntity = await _context.FindAsync <CourseInstance>(courseInstanceQuestionEntity.IdCourseInstance); CourseInstanceDto result = await GetNextQuestion(courseInstanceEntity); result.AnsweredCorrectly = courseInstanceQuestionEntity.Correct; return(result); }
public IActionResult GetQuestion() { QuestionAnswerDto question = null; List <QuestionAnswerDto> questionAnswerList = _QuestionnaireService.PullQuestions().OrderBy(x => x.SurveyId).ToList(); question = questionAnswerList.First(); questionAnswerList.Remove(question); HttpContext.Session.Set("QuestionAnswerDto", questionAnswerList); HttpContext.Session.Set("CurrentQuestionId", question.QuestionId); HttpContext.Session.Set("CurrentSurveyId", question.SurveyId); return(View("Index", question)); }
public async Task <QuestionDto> AnswerQuestionAndGetSolutionAsync(QuestionAnswerDto answer) { await SaveAnswers(answer); int questionId = await _context.CourseInstancesQuestion.Where(x => x.Id == answer.IdCourseInstanceQuestion) .Select(x => x.Question.Id).SingleAsync(); CourseInstanceQuestion courseInstanceQuestion = await _context.FindAsync <CourseInstanceQuestion>(answer.IdCourseInstanceQuestion); courseInstanceQuestion.AnswerShown = true; await SaveChangesAsync(); return(await _questionService.GetQuestionAsync(questionId)); }
public void Order_Of_JSON_Properties_Should_Not_Matter_When_Read(string jsonString, QuestionAnswerDto expectedObject) { var converter = new QuestionAnswerDtoConverter(); var utf8JsonReader = new Utf8JsonReader(Encoding.UTF8.GetBytes(jsonString), false, new JsonReaderState(new JsonReaderOptions())); while (utf8JsonReader.Read()) { if (utf8JsonReader.TokenType == JsonTokenType.StartObject) { break; } } QuestionAnswerDto obj = converter.Read(ref utf8JsonReader, typeof(QuestionAnswerDto), null); obj.Should().BeEquivalentTo(expectedObject); }
private QuestionAnswerDto SelectQuestionAnswer(Survey survey, Question question, Answer answer) { var questionAnswer = new QuestionAnswerDto(); if (survey.Anonymous) { questionAnswer.Respondent = answer.SurveyResponse.Id.Value.ToString(); questionAnswer.RespondentId = answer.SurveyResponse.Id.Value; } else { questionAnswer.Respondent = answer.SurveyResponse.Respondent.FirstName + " " + answer.SurveyResponse.Respondent.LastName; questionAnswer.RespondentId = answer.SurveyResponse.RespondentId.Value; } if (question.QuestionType == QuestionType.MultipleSelect) { var list = JsonConvert.DeserializeObject <List <(string, double?)> >(answer.Value).Select(x => x.Item1).ToList(); questionAnswer.Value = string.Join(',', list); } else if (question.QuestionType == QuestionType.ValuedSingleSelect) { var tuple = JsonConvert.DeserializeObject <(string, double?)>(answer.Value); questionAnswer.Value = tuple.Item1 + " : " + tuple.Item2; } else if (question.QuestionType == QuestionType.SingleSelect) { var tuple = JsonConvert.DeserializeObject <(string, double?)>(answer.Value); questionAnswer.Value = tuple.Item1; } else { questionAnswer.Value = answer.Value; } return(questionAnswer); }
public IEnumerable <QuestionAnswerDto> PullQuestions() { List <QuestionAnswerDto> QuestionAnswerList = new List <QuestionAnswerDto>(); List <QuestionAnswerMapping> questionAnswerMapping = _unitOfWork.QuestionAnswer.GetAll().Where(x => (x.SurveyId == 1) || (x.SurveyId == 2)).ToList(); var QuestionList = questionAnswerMapping.GroupBy(x => x.QuestionId).Select(a => a.FirstOrDefault()).ToList(); foreach (var question in QuestionList) { var QuestionAnswersList = _unitOfWork.QuestionAnswer.GetAllByQuestionId(question.QuestionId); List <Answers> answerDtoList = new List <Answers>(); foreach (var ques in QuestionAnswersList) { Answers answerDto = new Answers() { AnswerId = ques.AnswerId, AnswerDescription = _unitOfWork.Answer.GetById(ques.AnswerId).AnswerDescription, Points = _unitOfWork.Answer.GetById(ques.AnswerId).Points }; answerDtoList.Add(answerDto); } var quest = _unitOfWork.Question.GetById(question.QuestionId); QuestionAnswerDto questionDto = new QuestionAnswerDto() { QuestionId = quest.QuestionId, Description = quest.Description, IsValid = quest.IsValid, Answers = answerDtoList, SurveyId = question.SurveyId }; QuestionAnswerList.Add(questionDto); } return(QuestionAnswerList); }
public async Task AnswerQuestionAsync(QuestionAnswerDto answer) { await SaveAnswers(answer); }
public async Task <CourseInstanceDto> AnswerQuestionAndGetNextQuestion([FromBody] QuestionAnswerDto vm) { return(await _courseInstanceService.AnswerQuestionAndGetNextQuestionAsync(vm)); }
public async Task <JsonResult> AnswerQuestion([FromBody] QuestionAnswerDto vm) { await _courseInstanceService.AnswerQuestionAsync(vm); return(Json(OkReturnString)); }
public async Task TestStartTest() { TestingContext testingContext = new TestingContext(); InitTestingContext(testingContext); ICourseService courseService = testingContext.GetService <CourseService>(); testingContext.DependencyMap[typeof(ICourseService)] = courseService; ICourseInstanceService courseInstanceService = testingContext.GetService <CourseInstanceService>(); var courses = await courseService.GetCoursesAsync(0); int courseId = courses.Data.Select(x => x.Id).First(); //Act CourseInstanceDto result = await courseInstanceService.StartCourseAsync(courseId); Assert.True(result.IdCourseInstance > 0); Assert.True(result.IdCourse == courseId); Assert.True(result.IdCourseInstanceQuestion > 0); Assert.True(result.NumQuestionsAlreadyAsked == 0); Assert.True(result.NumQuestionsTotal > 0); CourseInstanceDto result2 = await courseInstanceService.NextQuestion(result.IdCourseInstance); Assert.True(result2.IdCourse == courseId); Assert.True(result2.IdCourseInstanceQuestion > 0); Assert.True(result2.NumQuestionsAlreadyAsked == 1); Assert.True(result2.NumQuestionsTotal > 0); CourseInstanceDto result3 = await courseInstanceService.NextQuestion(result.IdCourseInstance); Assert.True(result3.IdCourse == courseId); Assert.True(result3.IdCourseInstanceQuestion > 0); Assert.True(result3.NumQuestionsAlreadyAsked == 2); Assert.True(result3.NumQuestionsTotal > 0); QuestionToAskDto result4 = await courseInstanceService.GetQuestionToAskAsync(result.IdCourseInstanceQuestion); Assert.Equal(QuestionType.MultipleChoice, result4.QuestionType); QuestionAnswerDto answer = new QuestionAnswerDto(); answer.IdCourseInstanceQuestion = result.IdCourseInstanceQuestion; answer.Answers.Add(false); answer.Answers.Add(true); answer.Answers.Add(false); answer.Answers.Add(true); QuestionDto result5 = await courseInstanceService.AnswerQuestionAndGetSolutionAsync(answer); Assert.True(result5.Explanation != null); Assert.Equal(4, result5.Options.Count); Assert.True(result5.Options[1].IsTrue); Assert.True(result5.Options[3].IsTrue); CourseInstanceDto result6 = await courseInstanceService.AnswerQuestionAndGetNextQuestionAsync(answer); Assert.True(result6.AnsweredCorrectly); Assert.True(result6.Done); Assert.Equal(3, result6.NumQuestionsAlreadyAsked); Assert.Equal(3, result6.NumQuestionsTotal); }