public void GetLoadedAssignmentQuestionIds_ReturnsIdsInCorrectOrder()
        {
            var uqds = new Dictionary <int, UserQuestionData>()
            {
                [1] = new UserQuestionData()
                {
                    AssignmentQuestion = new AssignmentQuestion()
                    {
                        Id    = 1,
                        Order = 2
                    }
                },
                [2] = new UserQuestionData()
                {
                    AssignmentQuestion = new AssignmentQuestion()
                    {
                        Id    = 2,
                        Order = 1
                    }
                },
            };

            var store = new UserQuestionDataStore(uqds);

            Assert.Equal(new List <int> {
                2, 1
            }, store.GetLoadedAssignmentQuestionIds());
        }
        /// <summary>
        /// Returns a mock QuestionResolver.
        /// </summary>
        private IQuestionResolverFactory GetMockQuestionResolverFactory(
            UserQuestionDataStore store,
            Question resolvedQuestion         = null,
            UserQuestionSubmission submission = null)
        {
            var questionResolverFactory = new Mock <IQuestionResolverFactory>();

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

            if (submission != null)
            {
                questionResolverFactory
                .Setup
                (
                    m => m
                    .CreateQuestionResolver(userQuestionData)
                    .ResolveSolvedQuestionAsync(submission)
                ).ReturnsAsync(resolvedQuestion);
            }
            else
            {
                questionResolverFactory
                .Setup
                (
                    m => m
                    .CreateQuestionResolver(userQuestionData)
                    .ResolveUnsolvedQuestionAsync()
                ).ReturnsAsync(resolvedQuestion);
            }

            return(questionResolverFactory.Object);
        }
        /// <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>
        /// Returns a mock assignment progress retriever.
        /// </summary>
        private IAssignmentProgressRetriever GetMockAssignmentProgressRetriever(
            UserQuestionDataStore store,
            AssignmentProgress assignmentProgress = null)
        {
            var assignmentProgressRetriever = new Mock <IAssignmentProgressRetriever>();

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

            assignmentProgressRetriever
            .Setup
            (
                m => m.GetAssignmentProgressAsync
                (
                    uqd.AssignmentQuestion.AssignmentId,
                    uqd.AssignmentQuestionId,
                    uqd.UserId
                )
            ).ReturnsAsync(assignmentProgress);

            return(assignmentProgressRetriever.Object);
        }