/// <summary>
        /// Returns a mock QuestionStatusCalculator.
        /// </summary>
        private IQuestionStatusCalculator GetMockQuestionStatusCalculator(
            UserQuestionDataStore store,
            UserQuestionStatus userQuestionStatus = null)
        {
            var userQuestionData = store.GetUserQuestionData
                                   (
                store.GetLoadedAssignmentQuestionIds()[0]
                                   );

            var statusCalculator = new Mock <IQuestionStatusCalculator>();

            statusCalculator
            .Setup(m => m.GetQuestionStatus(userQuestionData))
            .Returns(userQuestionStatus ?? CreateUserQuestionStatus());

            return(statusCalculator.Object);
        }
예제 #2
0
        /// <summary>
        /// Grades the submission.
        /// </summary>
        private async Task <ScoredQuestionResult> GradeSubmission(
            QuestionSubmission submission,
            Question resolvedQuestion,
            UserQuestionData userQuestionData,
            UserQuestionStatus userQuestionStatus,
            DateTime submissionDate)
        {
            if (!userQuestionStatus.AllowNewAttempt)
            {
                throw new InvalidOperationException("No attempts remaining.");
            }

            var scoredQuestionResult = await GradeQuestionAsync
                                       (
                resolvedQuestion,
                submission
                                       );

            if (userQuestionData.Submissions == null)
            {
                userQuestionData.Submissions = new List <UserQuestionSubmission>();
            }

            var submissionContents = _jsonSerializer.Serialize(submission);
            var savedSubmission    = new UserQuestionSubmission()
            {
                Score              = scoredQuestionResult.Score,
                DateSubmitted      = submissionDate,
                Seed               = userQuestionData.Seed,
                CachedQuestionData = userQuestionData.CachedQuestionData,
                SubmissionContents = submissionContents
            };

            userQuestionData.Submissions.Add(savedSubmission);
            userQuestionData.NumAttempts++;
            userQuestionData.Seed = null;

            if (userQuestionData.AssignmentQuestion.IsInteractive())
            {
                userQuestionData.LastQuestionSubmission = submissionContents;
            }

            return(scoredQuestionResult);
        }