public async Task <IActionResult> Edit(string id)
        {
            var choice = await this.choicesService.GetChoiceByIdAsync(id);

            var question = await this.questionsService.GetQuestionByIdAsync(choice.QuestionId);

            var exam = await this.examsService.GetExamByIdAsync(question.ExamId);

            var user = await this.userManager.GetUserAsync(this.HttpContext.User);

            await this.examsService.CheckForPermissions(exam, user);

            this.ViewData["QuestionId"]   = question.Id;
            this.ViewData["QuestionText"] = question.Text;
            this.ViewData["ExamName"]     = exam.Name;
            this.ViewData["CourseName"]   = exam.Course.Name;

            var viewModel = new EditChoiceViewModel
            {
                Id     = choice.Id,
                Text   = choice.Text,
                IsTrue = choice.IsTrue,
            };

            return(this.View(viewModel));
        }
        public async Task <IActionResult> Edit(EditChoiceViewModel viewModel)
        {
            var choice = await this.choicesService.GetChoiceByIdAsync(viewModel.Id);

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

            await this.choicesService.EditChoiceAsync(viewModel);

            return(this.RedirectToAction("Details", "Questions", new { id = choice.QuestionId }));
        }
        public async Task EditChoiceAsync(EditChoiceViewModel model)
        {
            var choice = await this.choiceRepository.All()
                         .FirstOrDefaultAsync(x => x.Id == model.Id);

            if (choice == null)
            {
                throw new ArgumentException("There is no choice with this id.");
            }

            choice.Text   = model.Text;
            choice.IsTrue = model.IsTrue;

            this.choiceRepository.Update(choice);
            await this.choiceRepository.SaveChangesAsync();
        }
        public async Task EditChoiceAsyncShouldEditCorrectly()
        {
            var newText   = "New Choice Text";
            var newIsTrue = false;

            var choice = await this.AddChoiceAsync();

            var editChoiceViewModel = new EditChoiceViewModel
            {
                Id     = choice.Id,
                Text   = newText,
                IsTrue = newIsTrue,
            };

            await this.Service.EditChoiceAsync(editChoiceViewModel);

            var editedChoice = await this.DbContext.Choices.FirstOrDefaultAsync(x => x.Id == choice.Id);

            Assert.Equal(newText, editedChoice.Text);
            Assert.False(editedChoice.IsTrue);
        }