public void CalculateResult_WhenCorrectTestAttemptViewModel_ShouldReturnJsonViewModel()
        {
            var viewModel = new TestAttemptViewModel()
            {
                TestId             = 1,
                Title              = "title1",
                TestAttemptEntries = new List <TestAttemptEntryViewModel>
                {
                    new TestAttemptEntryViewModel()
                }
            };

            var returnedViewModel = new TestAttemptResultViewModel()
            {
                TestId = 1,
                Title  = "title1",
                Score  = 10,
                MaximalPossibleScore = 15
            };

            _mockService.Setup(x => x.CalculateResult(It.IsAny <TestAttemptViewModel>())).Returns(returnedViewModel);

            var result = _sut.CalculateResult(viewModel) as JsonResult;

            Assert.IsNotNull(result);
            Assert.AreEqual(result.GetValueFromJsonResult <string>("Title"), returnedViewModel.Title);
            Assert.AreEqual(result.GetValueFromJsonResult <int>("TestId"), returnedViewModel.TestId);
            Assert.AreEqual(result.GetValueFromJsonResult <int>("Score"), returnedViewModel.Score);
            Assert.AreEqual(result.GetValueFromJsonResult <int>("MaximalPossibleScore"), returnedViewModel.MaximalPossibleScore);
        }
        public TestAttemptViewModel Convert(GetTestAttemptQueryResult testAttempt)
        {
            if (testAttempt.Test == null)
            {
                return(null);
            }

            var viewModel = new TestAttemptViewModel
            {
                TestId             = testAttempt.Test.Id,
                Title              = testAttempt.Test.Title,
                TestAttemptEntries = new List <TestAttemptEntryViewModel>()
            };

            foreach (var question in testAttempt.Questions)
            {
                viewModel.TestAttemptEntries.Add(new TestAttemptEntryViewModel
                {
                    Question = _questionViewModelConverter.Convert(question),
                    Answers  = _testAttemptAnswerViewModelConverter
                               .Convert(testAttempt.Answers.Where(a => a.QuestionId == question.Id))
                               .ToList()
                });
            }

            return(viewModel);
        }
Ejemplo n.º 3
0
        public TestAttemptViewModel Convert(Test test)
        {
            if (test == null)
            {
                return(null);
            }

            var viewModel = new TestAttemptViewModel
            {
                TestId             = test.Id,
                Title              = test.Title,
                TestAttemptEntries = new List <TestAttemptEntryViewModel>()
            };

            foreach (var question in test.Questions)
            {
                viewModel.TestAttemptEntries.Add(new TestAttemptEntryViewModel
                {
                    Question = question.Adapt <QuestionViewModel>(),
                    Answers  = question.Answers.Adapt <List <TestAttemptAnswerViewModel> >()
                });
            }

            return(viewModel);
        }
        public void CalculateResult_WhenCorrectTestAttemptViewModelErrorDuringCalculating_ThenReturnNotFound()
        {
            var viewModel = new TestAttemptViewModel()
            {
                TestId             = 1,
                Title              = "title1",
                TestAttemptEntries = new List <TestAttemptEntryViewModel>
                {
                    new TestAttemptEntryViewModel()
                }
            };

            _mockService.Setup(x => x.CalculateResult(It.IsAny <TestAttemptViewModel>())).Returns <TestAttemptResultViewModel>(null);

            var result = _sut.CalculateResult(viewModel) as StatusCodeResult;

            Assert.IsNotNull(result);
            Assert.AreEqual(result.StatusCode, 500);
        }
Ejemplo n.º 5
0
        public IActionResult CalculateResult([FromBody] TestAttemptViewModel viewModel)
        {
            if (viewModel == null)
            {
                return(NotFound(new
                {
                    Error = $"Error - argument is incorrect"
                }));
            }

            var resultViewModel = _service.CalculateResult(viewModel);

            if (resultViewModel == null)
            {
                return(new StatusCodeResult(500));
            }

            return(new JsonResult(resultViewModel, JsonSettings));
        }
        public void CalculateResult_WhenNullTestAttemptViewModel_ShouldReturnBadRequest()
        {
            var viewModel = new TestAttemptViewModel()
            {
                TestId             = 1,
                Title              = "title1",
                TestAttemptEntries = new List <TestAttemptEntryViewModel>
                {
                    new TestAttemptEntryViewModel()
                }
            };

            _mockService.Setup(x => x.CalculateResult(It.IsAny <TestAttemptViewModel>()))
            .Throws(new Exception());

            var result = _sut.CalculateResult(viewModel) as StatusCodeResult;

            Assert.IsNotNull(result);
            Assert.AreEqual(result.StatusCode, 500);
        }
        public TestAttemptResultViewModel CalculateResult(TestAttemptViewModel viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentException("ViewModel can't be NULL");
            }

            var maxScore = viewModel.TestAttemptEntries.Sum(e => e.Answers.Where(a => a.Value >= 0).Sum(a => a.Value));
            var score    = viewModel.TestAttemptEntries.Where(e => !e.IsMultipleChoice)
                           .Sum(e => e.Answers.Where(a => a.Checked).Sum(a => a.Value)) +
                           viewModel.TestAttemptEntries.Where(e => e.IsMultipleChoice && CheckIfAllAnswersCheckedAreCorrect(e.Answers))
                           .Sum(e => e.Answers.Where(a => a.Checked).Sum(a => a.Value));

            return(new TestAttemptResultViewModel
            {
                MaximalPossibleScore = maxScore,
                Score = score,
                TestId = viewModel.TestId,
                Title = viewModel.Title
            });
        }
        public IActionResult CalculateResult([FromBody] TestAttemptViewModel viewModel)
        {
            if (viewModel == null)
            {
                return(new BadRequestResult());
            }

            try
            {
                var resultViewModel = _service.CalculateResult(viewModel);

                if (resultViewModel == null)
                {
                    return(new StatusCodeResult(500));
                }

                return(new JsonResult(resultViewModel, JsonSettings));
            }
            catch (Exception e)
            {
                return(new StatusCodeResult(500));
            }
        }
Ejemplo n.º 9
0
        public void CalculateResult_CorrectViewModelWithMultipleChoicesDifferentAnswers_ReturnsTestAttemptResultViewModel()
        {
            ITestResultCalculationService service = new TestResultCalculationService();

            var viewModel = new TestAttemptViewModel
            {
                TestId             = 1,
                Title              = "title1",
                UserId             = Guid.NewGuid().ToString(),
                TestAttemptEntries = new List <TestAttemptEntryViewModel>
                {
                    new TestAttemptEntryViewModel
                    {
                        Question = new QuestionViewModel
                        {
                            Id = 1
                        },
                        Answers = new List <TestAttemptAnswerViewModel>
                        {
                            new TestAttemptAnswerViewModel
                            {
                                Checked = false,
                                Value   = 1
                            },
                            new TestAttemptAnswerViewModel
                            {
                                Checked = true,
                                Value   = 0
                            },
                            new TestAttemptAnswerViewModel
                            {
                                Checked = true,
                                Value   = 2
                            }
                        }
                    },
                    new TestAttemptEntryViewModel
                    {
                        Question = new QuestionViewModel
                        {
                            Id = 1
                        },
                        Answers = new List <TestAttemptAnswerViewModel>
                        {
                            new TestAttemptAnswerViewModel
                            {
                                Checked = true,
                                Value   = 1
                            },
                            new TestAttemptAnswerViewModel
                            {
                                Checked = false,
                                Value   = 0
                            },
                            new TestAttemptAnswerViewModel
                            {
                                Checked = true,
                                Value   = 1
                            }
                        }
                    }
                }
            };

            var result = service.CalculateResult(viewModel);

            Assert.IsNotNull(result);
            Assert.AreEqual(result.Title, viewModel.Title);
            Assert.AreEqual(result.TestId, viewModel.TestId);
            Assert.AreEqual(result.Score, 2);
            Assert.AreEqual(result.MaximalPossibleScore, 5);
        }