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); } }
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 })); }