Beispiel #1
0
        public async Task <IActionResult> PostQuiz(SaveQuiz_QuizDTO quizReceived)
        {
            var result = await _quizService.SaveQuizAsync(quizReceived);

            switch (result._result)
            {
            case SaveQuizResponseDTO.RequestResult.Success: return(Ok(result));

            case SaveQuizResponseDTO.RequestResult.OwnerNotFound: return(NotFound(result));

            default: return(BadRequest(result));
            }
        }
Beispiel #2
0
        public async Task <SaveQuizResponseDTO> SaveQuizAsync(SaveQuiz_QuizDTO quizReceived)
        {
            var result = new SaveQuizResponseDTO();

            var quiz = _mapper.Map <Quiz>(quizReceived);

            quiz.Owner = await _characterRepo.GetCharacterAllAsync(quizReceived.OwnerId);

            if (quiz.Owner == null)
            {
                result._result = SaveQuizResponseDTO.RequestResult.OwnerNotFound;
                return(result);
            }

            if (quiz.Questions.Count == 0)
            {
                result._result = SaveQuizResponseDTO.RequestResult.EmptyAtribute;
                return(result);
            }

            foreach (var question in quiz.Questions)
            {
                if (question.Answers.Count == 0)
                {
                    result._result = SaveQuizResponseDTO.RequestResult.EmptyAtribute;
                    return(result);
                }

                if (!ValidateQuestion(question))
                {
                    result._result = SaveQuizResponseDTO.RequestResult.QuestionWithoutCorrectAnswer;
                    return(result);
                }
            }

            _quizRepo.AddQuiz(quiz);

            try
            {
                await _quizRepo.SaveChangesAsync();

                result._result = SaveQuizResponseDTO.RequestResult.Success;
                result.Quiz    = _mapper.Map <QuizReadDTO>(quiz);
            }
            catch (Exception)
            {
                result._result = SaveQuizResponseDTO.RequestResult.BadRequest;
            }

            return(result);
        }
Beispiel #3
0
        public async Task Test_PostQuiz_Success(long ownerId)
        {
            var context    = GetQuizTestsDatabaseContext();
            var controller = new QuizController(new QuizService(new QuizRepository(context), new CharacterRepository(context),
                                                                new CharacterService(new CharacterRepository(context), new ItemRepository(context), Mapper), Mapper));

            var quizDTO = new SaveQuiz_QuizDTO
            {
                Title   = "Teste",
                OwnerId = ownerId,
            };

            var question1DTO = new SaveQuiz_QuestionDTO
            {
                Text    = "Test Question",
                Answers = new List <SaveQuiz_AnswerDTO>()
                {
                    new SaveQuiz_AnswerDTO {
                        Text = "Empty", IsCorrect = true
                    },

                    new SaveQuiz_AnswerDTO {
                        Text = "Empty", IsCorrect = true
                    }
                }
            };

            var question2DTO = new SaveQuiz_QuestionDTO
            {
                Text    = "Test Question",
                Answers = new List <SaveQuiz_AnswerDTO>()
                {
                    new SaveQuiz_AnswerDTO {
                        Text = "Empty", IsCorrect = false
                    },

                    new SaveQuiz_AnswerDTO {
                        Text = "Empty", IsCorrect = true
                    }
                }
            };

            quizDTO.Questions.Add(question1DTO);
            quizDTO.Questions.Add(question2DTO);

            var quizCountBefore = await context.Quizzes.CountAsync();

            var questionCountBefore = await context.Questions.CountAsync();

            var answerCountBefore = await context.Answers.CountAsync();

            var actionResult = await controller.PostQuiz(quizDTO);

            Assert.IsInstanceOf <OkObjectResult>(actionResult);

            var quizCountAfter = await context.Quizzes.CountAsync();

            var questionCountAfter = await context.Questions.CountAsync();

            var answerCountAfter = await context.Answers.CountAsync();

            var okResult = actionResult as OkObjectResult;
            var response = okResult.Value as SaveQuizResponseDTO;

            Assert.NotNull(response);
            Assert.AreEqual(SaveQuizResponseDTO.RequestResult.Success.ToString(), response.Result);

            Assert.AreEqual(quizCountBefore + 1, quizCountAfter);
            Assert.AreEqual(questionCountBefore + 2, questionCountAfter);
            Assert.AreEqual(answerCountBefore + 4, answerCountAfter);
        }