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