public void CalculateQuestionScore_OriginalQuestionIsNull_ThrowsArgumentNullException() { var receivedQuestion = new PayloadQuestion(); Assert.ThrowsException <ArgumentNullException>(() => testCalculationService.CalculateQuestionScore(originalQuestion: null, receivedQuestion: receivedQuestion)); }
public void CalculateQuestionScore_NoneOptionsSelectedAndQuestionOptionsAreNotEmpty_ReturnsZero() { var receivedQuestion = new PayloadQuestion { SelectedOptionsId = new List <int> { } }; var expectedQuestionScore = 0; var actualQuestionScore = testCalculationService.CalculateQuestionScore(originalQuestion: originalQuestion, receivedQuestion: receivedQuestion); Assert.AreEqual(expected: expectedQuestionScore, actual: actualQuestionScore); }
public void CalculateQuestionScore_MoreThanAllOptionsSelected_ReturnsNotMaximumScore() { var receivedQuestion = new PayloadQuestion { SelectedOptionsId = new List <int> { 1, 2, 3, 4 } }; var expectedQuestionScore = 0; var actualQuestionScore = testCalculationService.CalculateQuestionScore(originalQuestion: originalQuestion, receivedQuestion: receivedQuestion); Assert.AreEqual(expected: expectedQuestionScore, actual: actualQuestionScore); }
public void CalculateQuestionScore_AllOptionsSelectedWithWrong_ReturnsNotMaximumScore() { var receivedQuestion = new PayloadQuestion { SelectedOptionsId = new List <int> { 1, 2, 3 } }; var expectedQuestionScore = 1.0; var expectedQuestionScoreCoef = expectedQuestionScore / originalQuestion.TestQuestionOptions.Count(o => o.IsRight); var actualQuestionScoreCoef = testCalculationService.CalculateQuestionScore(originalQuestion: originalQuestion, receivedQuestion: receivedQuestion); Assert.AreEqual(expected: expectedQuestionScoreCoef, actual: actualQuestionScoreCoef); }
private ResultAnswer CreateResultAnswerWithOptions(PayloadQuestion receivedQuestion, int receivedQuestionIndex, List <TestEvent> eventsQuestionAnswered, TestEvent eventTestStarted) { var resultAnswer = new ResultAnswer(); if (receivedQuestionIndex >= 0) { resultAnswer.TimeTakenSeconds = receivedQuestionIndex == 0 ? eventsQuestionAnswered[receivedQuestionIndex].StartTime - eventTestStarted.StartTime : eventsQuestionAnswered[receivedQuestionIndex].StartTime - eventsQuestionAnswered[receivedQuestionIndex - 1].StartTime; resultAnswer.ResultAnswerOptions = receivedQuestion.SelectedOptionsId.Select(selectedOptionId => new ResultAnswerOption { OptionId = selectedOptionId }).ToList(); } else { resultAnswer.TimeTakenSeconds = TimeSpan.Zero; } return(resultAnswer); }
public double CalculateQuestionScore(TestQuestion originalQuestion, PayloadQuestion receivedQuestion) { if (originalQuestion == null) { throw new ArgumentNullException(nameof(originalQuestion)); } if (receivedQuestion != null) { var rightQuestionOptions = originalQuestion.TestQuestionOptions.Where(o => o.IsRight); int rightOptionsAmount = rightQuestionOptions.Count(), selectedRightOptionsAmount = 0; foreach (var id in receivedQuestion.SelectedOptionsId) { selectedRightOptionsAmount = rightQuestionOptions.Any(o => o.Id == id) ? ++selectedRightOptionsAmount : --selectedRightOptionsAmount; } // Сalculate question score. return(selectedRightOptionsAmount >= 0 ? (rightOptionsAmount == 0 && selectedRightOptionsAmount == 0 ? 1 : (double)selectedRightOptionsAmount / rightOptionsAmount) : 0); } return(0); }