Exemple #1
0
        public (bool, int) CheckQuizResults(QuizInputModel input, QuizViewModel realQuiz)
        {
            var isPassed       = true;
            var correctAnswers = 0;

            for (int i = 0; i < input.Questions.Count; i++)
            {
                var question     = input.Questions[i];
                var userQuestion = realQuiz.Questions[i];

                for (int j = 0; j < question.Answers.Count; j++)
                {
                    var quizAnswer = question.Answers[j];
                    var userAnswer = userQuestion.Answers[j];

                    if (quizAnswer.IsCorrectAnswer != userAnswer.IsCorrectAnswer)
                    {
                        isPassed = false;
                    }
                    else if (userAnswer.IsCorrectAnswer == true)
                    {
                        correctAnswers++;
                    }
                }
            }

            return(isPassed, correctAnswers);
        }
Exemple #2
0
        public async Task <IActionResult> Make()
        {
            var model = new QuizInputModel()
            {
                Quiz         = await this.quizService.GetQuizAsync <QuestionQuizViewModel>(),
                SkinProblems = await this.skinProblemsService.GetAllAsync <SkinProblemViewModel>(),
            };

            return(this.View(model));
        }
        public void BulkAddUserAnswer(QuizInputModel quizInputModel)
        {
            var userAnswers = new List <UserAnswer>();

            foreach (var item in quizInputModel.Questions)
            {
                var userAnswer = new UserAnswer
                {
                    IdentityUserId = quizInputModel.UserId,
                    AnswerId       = item.AnswerId,
                };
                userAnswers.Add(userAnswer);
            }
            this.applicationDbContext.UsersAnswers.AddRange(userAnswers);
            this.applicationDbContext.SaveChanges();
        }
Exemple #4
0
        public async Task <IActionResult> Submit(QuizInputModel input, string id)
        {
            var quizFromDb = await this.quizService.GetQuizByIdAsync(id);

            var userId = this.userManager.GetUserId(this.User);

            var result = this.resultsService.CheckQuizResults(input, quizFromDb);

            if (this.resultsService.UserHasPassedQuizWithId(id, userId))
            {
                quizFromDb.Trophies = -1;
            }

            var resultId = await this.resultsService.AddResultAsync(result.Item1, quizFromDb.Id, quizFromDb.Trophies, userId, result.Item2);

            return(this.RedirectToAction("QuizResult", "Quizes", new { resultId }));
        }
Exemple #5
0
        public async Task <IActionResult> Create(QuizInputModel input)
        {
            string picturePath = null;

            if (input.Picture != null)
            {
                if (!(input.Picture.FileName.EndsWith(".png") ||
                      input.Picture.FileName.EndsWith(".jpeg") ||
                      input.Picture.FileName.EndsWith(".jpg")))
                {
                    this.ModelState.AddModelError("Picture", "Picture must be file with extension jpeg, jpg png");
                }

                if (input.Picture.Length > 10 * 102 * 1024)
                {
                    this.ModelState.AddModelError("Picture", "Picture is too large - Max 10Mb");
                }

                picturePath = await CloudinaryService
                              .UploadPicture(this.cloudinary, input.Picture, input.Name.Replace(" ", "") + this.userManager.GetUserId(this.User), GlobalConstants.CloudinaryQuizFolder);
            }

            if (!this.ModelState.IsValid)
            {
                return(this.View());
            }

            var userId = this.userManager.GetUserId(this.User);

            input.CreatorId   = userId;
            input.PicturePath = picturePath;

            var quizId = await this.quizService.CreateQuizAsync(input);

            if (quizId == null)
            {
                return(this.View());
            }

            await this.quizService.UpdateQuizTrophiesAsync(quizId);

            return(this.RedirectToAction("Create", "Questions", new { id = quizId }));
        }
        public void BulkAddUserAnswer(QuizInputModel quizInputModel)
        {
            var userAnswers = new List <UserAnswer>();

            foreach (var question in quizInputModel.Questions)
            {
                var userAnswer = new UserAnswer
                {
                    IdentityUserId = quizInputModel.UserId,
                    AnswerId       = question.AnswerId,
                    QuestionId     = question.QuestionId
                };

                userAnswers.Add(userAnswer);
            }

            this.dbContext.AddRange(userAnswers);
            this.dbContext.SaveChanges();
        }
Exemple #7
0
        public async Task <string> CreateQuizAsync(QuizInputModel input)
        {
            var category = this.categoriesRepo.All().Where(x => x.Title == input.Category.ToString()).FirstOrDefault();

            if (category == null)
            {
                throw new Exception("Category does not exist!");
            }

            var picture = new Picture()
            {
                Url = input.PicturePath
            };

            if (input.PicturePath == null)
            {
                picture.Url = GlobalConstants.DefaultQuizPicturePath;
            }

            var quiz = new Quiz
            {
                CreatorId           = input.CreatorId,
                Name                = input.Name,
                Description         = input.Description,
                Picture             = picture,
                TotalTimeToComplete = input.TotalTimeToComplete,
                CategoryId          = category.Id,
                Trophies            = GlobalConstants.InitialQuizTrophies,
            };

            quiz.QuizTag = await this.tagsService.CreateTagsAsync(input.Tags, quiz.Id, category.Id, quiz);

            await this.quizesRepo.AddAsync(quiz);

            await this.quizesRepo.SaveChangesAsync();

            return(quiz.Id);
        }
        public void CheckQuizResultShouldReturnTrueIFPassedAndNumberOfCorrectAnswers()
        {
            var quizViewModel = new QuizViewModel();

            quizViewModel.Questions = new List <QuestionViewModel>();

            var question = new QuestionViewModel()
            {
                QuestionText = "Question test",
            };

            var answer = new AnswerViewModel()
            {
                AnswerText      = "A",
                QuestionId      = question.Id,
                IsCorrectAnswer = true,
            };

            var anotherAnswer = new AnswerViewModel()
            {
                AnswerText      = "B",
                QuestionId      = question.Id,
                IsCorrectAnswer = false,
            };

            question.Answers = new List <AnswerViewModel>();
            question.Answers.Add(answer);
            question.Answers.Add(anotherAnswer);

            quizViewModel.Questions.Add(question);

            var questionInput = new QuestionInputModel()
            {
                QuestionText = "B??",
                QuizId       = "123",
            };
            var firstNewAnswer = new AnswerInputModel()
            {
                AnswerText      = "A",
                IsCorrectAnswer = true,
            };
            var secondNewAnswer = new AnswerInputModel()
            {
                AnswerText      = "B",
                IsCorrectAnswer = false,
            };

            questionInput.Answers = new List <AnswerInputModel>();
            questionInput.Answers.Add(firstNewAnswer);
            questionInput.Answers.Add(secondNewAnswer);

            var quizInputModel = new QuizInputModel();

            quizInputModel.Questions = new List <QuestionInputModel>();
            quizInputModel.Questions.Add(questionInput);

            var result = this.Service.CheckQuizResults(quizInputModel, quizViewModel);

            Assert.True(result.Item1);
            Assert.Equal(1, result.Item2);
        }