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