コード例 #1
0
        public async Task CheckQuiz_PostAnswers_NotAllAnswersCorrect_ShouldPass()
        {
            const int quizId = 1;

            // TODO (DKA): Make new quiz here with separate requests.

            var questionsWithAnswers = new QuizCheckRequestModel
            {
                QuestionsWithAnswers = new List <QuestionAnswerPair>
                {
                    new QuestionAnswerPair {
                        QuestionId = 1, AnswerId = 1
                    },
                    new QuestionAnswerPair {
                        QuestionId = 2, AnswerId = 4
                    }
                }
            };

            using (var testHost = new TestServer(new WebHostBuilder().UseStartup <Startup>()))
            {
                var client  = testHost.CreateClient();
                var content = new StringContent(JsonConvert.SerializeObject(questionsWithAnswers));
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                var response = await client.PostAsync(new Uri(testHost.BaseAddress, $"{QuizApiEndPoint}{quizId}/check"), content);

                var quizResult = JsonConvert.DeserializeObject <QuizCheckResponseModel>(await response.Content.ReadAsStringAsync());

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                Assert.Equal(2, quizResult.TotalNumberOfAnswers);
                Assert.Equal(1, quizResult.NumberOfCorrectAnswers);
                Assert.True(quizResult.NumberOfCorrectAnswers < quizResult.TotalNumberOfAnswers);
            }
        }
コード例 #2
0
        public IActionResult CheckQuiz(int id, [FromBody] QuizCheckRequestModel questionsWithAnswers)
        {
            var numberOfCorrectAnswers = 0;

            if (questionsWithAnswers == null ||
                questionsWithAnswers.QuestionsWithAnswers == null ||
                !questionsWithAnswers.QuestionsWithAnswers.Any())
            {
                return(BadRequest());
            }

            const string query = "SELECT * FROM Question WHERE QuizId = @Id;";

            var questions = _connection.Query <Question>(query, new { Id = id });

            if (questions == null)
            {
                return(NotFound());
            }

            var totalNumberOfAnswers = questions.Count();

            foreach (var questionWithAnswer in questionsWithAnswers.QuestionsWithAnswers)
            {
                if (questions.Any(question => question.Id == questionWithAnswer.QuestionId &&
                                  question.CorrectAnswerId == questionWithAnswer.AnswerId))
                {
                    numberOfCorrectAnswers++;
                }
            }

            return(Ok(new QuizCheckResponseModel
            {
                NumberOfCorrectAnswers = numberOfCorrectAnswers,
                TotalNumberOfAnswers = totalNumberOfAnswers
            }));
        }