public async Task Should_Finish_Quiz()
        {
            var command = new FinishQuizCommand()
            {
                UserName = "******",
                Answers  = new List <QuizAnswerDto>()
                {
                    new QuizAnswerDto()
                    {
                        QuestionId = _question1Id, AnswerId = _answer1Id
                    },
                    new QuizAnswerDto()
                    {
                        QuestionId = _question2Id, AnswerId = _answer2Id
                    },
                    new QuizAnswerDto()
                    {
                        QuestionId = _question3Id, AnswerId = _answer3Id
                    },
                    new QuizAnswerDto()
                    {
                        QuestionId = _question4Id, AnswerId = _answer4Id
                    },
                }
            };

            var result = await _service.FinishQuiz(command);

            result.Success.Should().BeTrue();
        }
        public async Task Should_Calculate_Quiz_Result_75_Percent()
        {
            var command = new FinishQuizCommand()
            {
                UserName = "******",
                Answers  = new List <QuizAnswerDto>()
                {
                    new QuizAnswerDto()
                    {
                        QuestionId = _question1Id, AnswerId = _answer1Id
                    },
                    new QuizAnswerDto()
                    {
                        QuestionId = _question2Id, AnswerId = _answer1Id
                    },
                    new QuizAnswerDto()
                    {
                        QuestionId = _question3Id, AnswerId = _answer3Id
                    },
                    new QuizAnswerDto()
                    {
                        QuestionId = _question4Id, AnswerId = _answer4Id
                    },
                }
            };
            var result = await _service.CalculateResult(command);

            result.Should().Be(75);
        }
        public async Task <double> CalculateResult(FinishQuizCommand command)
        {
            var questionIds    = command.Answers.Select(question => question.QuestionId).ToList();
            var questionsQuery = await _questionRepository.GetAll(questionIds);

            var questions = questionsQuery.Select(question => new
            {
                QuestionId = question.Id,
                AnswerId   = question.Answers.FirstOrDefault(answer => answer.Correct).Answer.Id
            });

            var rightAnswers = questions.Count(question => command.Answers.Any(answer => answer.QuestionId == question.QuestionId && answer.AnswerId == question.AnswerId));

            return(((double)rightAnswers / questionIds.Count) * 100);
        }
        public async Task <Result <QuizResultResponse> > FinishQuiz(FinishQuizCommand command)
        {
            var validationResult = Validate(_finishQuizCommandValidator.Validate(command));

            if (!validationResult.Success)
            {
                return(validationResult);
            }

            var quizResult = await CalculateResult(command);

            var quiz = new Quiz(command.UserName, quizResult);
            await _quizRepository.Add(quiz);

            return(new Result <QuizResultResponse>(QuizResultResponse.ToResponse(quiz)));
        }
        public ValidationResult Validate(FinishQuizCommand command)
        {
            var result = new ValidationResult();

            if (string.IsNullOrEmpty(command.UserName))
            {
                result.AddMessage(QuizValidationMessages.NAME);
            }

            if (!command.Answers.Any())
            {
                result.AddMessage(QuizValidationMessages.NO_ANSWERS);
            }
            if (command.Answers.Any(answer => answer.AnswerId == null || answer.AnswerId.Equals(Guid.Empty)))
            {
                result.AddMessage(QuizValidationMessages.ANSWER);
            }

            return(result);
        }
Esempio n. 6
0
 public async Task <Result <QuizResultResponse> > Finish([FromBody] FinishQuizCommand command) => await _quizResultService.FinishQuiz(command);