Beispiel #1
0
        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);
        }
Beispiel #3
0
        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"));
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #10
0
 public async Task AnswerQuestionAsync(QuestionAnswerDto answer)
 {
     await SaveAnswers(answer);
 }
Beispiel #11
0
 public async Task <CourseInstanceDto> AnswerQuestionAndGetNextQuestion([FromBody] QuestionAnswerDto vm)
 {
     return(await _courseInstanceService.AnswerQuestionAndGetNextQuestionAsync(vm));
 }
Beispiel #12
0
        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);
        }