Example #1
0
        public void CalculateQuestionScore_OriginalQuestionIsNull_ThrowsArgumentNullException()
        {
            var receivedQuestion = new PayloadQuestion();

            Assert.ThrowsException <ArgumentNullException>(() =>
                                                           testCalculationService.CalculateQuestionScore(originalQuestion: null, receivedQuestion: receivedQuestion));
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }