public async Task GradeSubmissionAsync_AttemptsRemaining_UserQuestionDataUpdated(
            bool isInteractive)
        {
            var store = GetUserQuestionDataStore
                        (
                numAttempts: 1,
                numAttemptsRemaining: 1,
                interactive: isInteractive,
                cachedQuestionData: "Cached",
                seed: 12345
                        );

            var status           = CreateUserQuestionStatus(attemptsRemaining: true);
            var statusCalculator = GetMockQuestionStatusCalculator(store, status);
            var submission       = CreateQuestionSubmission(assignmentQuestionId: 1);
            var resolvedQuestion = new MethodQuestion();
            var resolverFactory  = GetMockQuestionResolverFactory(store, resolvedQuestion);
            var serializer       = GetMockJsonSerializer("Contents", submission);
            var graderFactory    = GetMockQuestionGraderFactory
                                   (
                resolvedQuestion,
                submission,
                new ScoredQuestionResult(result: null, score: 0.5)
                                   );

            var questionSolver = GetQuestionSolver
                                 (
                questionResolverFactory: resolverFactory,
                questionGraderFactory: graderFactory,
                questionStatusCalculator: statusCalculator,
                jsonSerializer: serializer
                                 );

            await questionSolver.GradeSubmissionAsync
            (
                store,
                submission,
                SubmissionDate
            );

            var userQuestionData = store.GetUserQuestionData
                                   (
                store.GetLoadedAssignmentQuestionIds()[0]
                                   );

            var expectedLastSubmission = isInteractive ? "Contents" : null;

            Assert.Equal(1, userQuestionData.Submissions.Count);
            Assert.Equal(0.5, userQuestionData.Submissions[0].Score);
            Assert.Equal(SubmissionDate, userQuestionData.Submissions[0].DateSubmitted);
            Assert.Equal(12345, userQuestionData.Submissions[0].Seed);
            Assert.Equal("Cached", userQuestionData.Submissions[0].CachedQuestionData);
            Assert.Equal("Contents", userQuestionData.Submissions[0].SubmissionContents);
            Assert.Equal(2, userQuestionData.NumAttempts);
            Assert.Null(userQuestionData.Seed);
            Assert.Equal(expectedLastSubmission, userQuestionData.LastQuestionSubmission);
        }
		public void GenerateConstructorInvocation_GeneratesCorrectInvocation()
		{
			var question = new MethodQuestion();
			var fileBuilder = new JavaFileBuilder();

			var questionGenerator = GetQuestionGenerator(question);
			questionGenerator.GenerateConstructorInvocation(question, fileBuilder);

			Assert.Equal("ConstructorInvocation\n", fileBuilder.GetFileContents());
		}
        public void GenerateConstructorInvocation_GeneratesCorrectInvocation()
        {
            var question    = new MethodQuestion();
            var fileBuilder = new JavaFileBuilder();

            var questionGenerator = GetQuestionGenerator(question);

            questionGenerator.GenerateConstructorInvocation(question, fileBuilder);

            Assert.Equal("ConstructorInvocation\n", fileBuilder.GetFileContents());
        }
        public async Task GetQuestionInstanceAsync_NoGenerationError_ReturnsQuestionInstance()
        {
            var database = new TestDatabaseBuilder()
                           .AddClassroom("Class1")
                           .AddQuestionCategory("Class1", "Category1")
                           .AddQuestion("Class1", "Category1", new GeneratedQuestionTemplate()
            {
                Name = "Question1"
            })
                           .Build();

            var questionId = database.Context
                             .Questions
                             .First()
                             .Id;

            var loaderFactory = GetMockQuestionLoaderFactory();
            var generator     = GetMockQuestionGenerator
                                (
                questionId,
                seed: 12345,
                error: false,
                result: "SerializedQuestion"
                                );

            var expectedResult = new MethodQuestion();
            var jsonSerializer = GetMockJsonSerializer <Question>
                                 (
                "SerializedQuestion",
                expectedResult
                                 );

            var questionService = CreateQuestionService
                                  (
                database.Context,
                questionLoaderFactory: loaderFactory.Object,
                questionGenerator: generator.Object,
                jsonSerializer: jsonSerializer.Object
                                  );

            var result = await questionService.GetQuestionInstanceAsync
                         (
                "Class1",
                id : 1,
                seed : 12345
                         );

            loaderFactory.Verify(LoadQuestionExpression);
            Assert.Equal(expectedResult, result.Question);
            Assert.Equal(12345, result.Seed);
        }
        /// <summary>
        /// Verifies that the given method question was correctly duplicated.
        /// </summary>
        private void VerifyMethodQuestion(
            DatabaseContext dbContext,
            MethodQuestion oldQuestion,
            MethodQuestion newQuestion)
        {
            VerifyCodeQuestion(dbContext, oldQuestion, newQuestion);

            VerifyCollectionDuplicated
            (
                dbContext,
                oldQuestion,
                newQuestion,
                q => q.Tests,
                t => t.Id,
                t => t.ParameterValues
            );
        }
        public async Task GradeSubmissionAsync_InteractiveAttemptsRemaining_ReturnsResultWithScore()
        {
            var store = GetUserQuestionDataStore
                        (
                numAttempts: 1,
                numAttemptsRemaining: 2,
                interactive: true
                        );

            var status               = CreateUserQuestionStatus(attemptsRemaining: true);
            var statusCalculator     = GetMockQuestionStatusCalculator(store, status);
            var submission           = CreateQuestionSubmission(assignmentQuestionId: 1);
            var resolvedQuestion     = new MethodQuestion();
            var scoredQuestionResult = new ScoredQuestionResult(result: null, score: 0.5);
            var resolverFactory      = GetMockQuestionResolverFactory(store, resolvedQuestion);
            var serializer           = GetMockJsonSerializer("Contents", submission);
            var graderFactory        = GetMockQuestionGraderFactory
                                       (
                resolvedQuestion,
                submission,
                scoredQuestionResult
                                       );

            var questionSolver = GetQuestionSolver
                                 (
                questionResolverFactory: resolverFactory,
                questionGraderFactory: graderFactory,
                questionStatusCalculator: statusCalculator,
                jsonSerializer: serializer
                                 );

            var result = await questionSolver.GradeSubmissionAsync
                         (
                store,
                submission,
                SubmissionDate
                         );

            Assert.Equal(scoredQuestionResult, result.ScoredQuestionResult);
            Assert.Null(result.SubmissionDate);
        }
        public async Task GetQuestionToSolveAsync_SimplePropertiesCorrect()
        {
            var user  = new User();
            var store = GetUserQuestionDataStore
                        (
                assignmentQuestionId: 1,
                assignmentQuestionName: "Question 1",
                user: user
                        );

            var status                      = CreateUserQuestionStatus();
            var statusCalculator            = GetMockQuestionStatusCalculator(store, status);
            var resolvedQuestion            = new MethodQuestion();
            var assignmentProgressRetriever = GetMockAssignmentProgressRetriever(store);
            var resolverFactory             = GetMockQuestionResolverFactory
                                              (
                store,
                resolvedQuestion
                                              );

            var questionSolver = GetQuestionSolver
                                 (
                questionResolverFactory: resolverFactory,
                questionStatusCalculator: statusCalculator,
                assignmentProgressRetriever: assignmentProgressRetriever
                                 );

            var result = await questionSolver.GetQuestionToSolveAsync
                         (
                store,
                assignmentQuestionId : 1
                         );

            Assert.Equal(1, result.AssignmentQuestionId);
            Assert.Equal("Question 1", result.Name);
            Assert.Equal(resolvedQuestion, result.Question);
            Assert.Equal(user, result.User);
            Assert.Equal(status, result.Status);
        }
 /// <summary>
 /// Creates a question loader for a method question.
 /// </summary>
 IQuestionResolver IQuestionResultVisitor <IQuestionResolver, UserQuestionData> .Visit(
     MethodQuestion question,
     UserQuestionData userQuestionData)
 {
     return(new DefaultQuestionResolver(userQuestionData));
 }
Exemple #9
0
 /// <summary>
 /// Creates a question loader for a method question.
 /// </summary>
 IQuestionLoader IQuestionResultVisitor <IQuestionLoader> .Visit(MethodQuestion question)
 {
     return(new MethodQuestionLoader(_dbContext, question));
 }
 /// <summary>
 /// Creates a question updater for a method question.
 /// </summary>
 IQuestionUpdater IQuestionResultVisitor <IQuestionUpdater, IModelErrorCollection> .Visit(
     MethodQuestion question,
     IModelErrorCollection errors)
 {
     return(new MethodQuestionUpdater(_dbContext, question, errors));
 }
Exemple #11
0
 /// <summary>
 /// Creates a question loader for a method question.
 /// </summary>
 IUserQuestionDataUpdater IQuestionResultVisitor <IUserQuestionDataUpdater> .Visit(
     MethodQuestion question)
 {
     return(_defaultUserQuestionDataUpdater);
 }
Exemple #12
0
 /// <summary>
 /// Creates a question duplicator for a method question.
 /// </summary>
 IQuestionDuplicator IQuestionResultVisitor <IQuestionDuplicator> .Visit(MethodQuestion question)
 {
     return(new MethodQuestionDuplicator(_dbContext, question));
 }
Exemple #13
0
 /// <summary>
 /// Creates a question grader for a method question.
 /// </summary>
 IQuestionGrader IQuestionResultVisitor <IQuestionGrader> .Visit(MethodQuestion question)
 {
     return(new MethodQuestionGrader(question, _codeRunnerService));
 }