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); }
public async Task <Result <QuizResultResponse> > Finish([FromBody] FinishQuizCommand command) => await _quizResultService.FinishQuiz(command);