Example #1
0
        private async Task AddTestTemplate()
        {
            var questions = new List <Question>
            {
                new Question("QContent", new WrittenAnswer("Answer", 1f), fixture.UserId),
                new Question("QContent2", new WrittenAnswer("Answer2", 1f), fixture.UserId),
            };
            await fixture.ExecuteDbContext(db =>
            {
                db.Questions.AddRange(questions);
                return(db.SaveChangesAsync());
            });

            TestTemplate = new TestTemplate("TestTemplate#1", fixture.UserId, questions.Select(x => x.Id));
            await fixture.ExecuteDbContext(db =>
            {
                db.TestTemplates.Add(TestTemplate);
                return(db.SaveChangesAsync());
            });
        }
Example #2
0
        private async Task AddPublishedTestWithAnswers()
        {
            var questionWithSingleValidChoice = Questions[0];
            var questionWith3ValidChoices     = Questions[1];
            var questionWithWrittenAnswer     = Questions[2];
            var testTemplateQuestions         = new Dictionary <int, Question>
            {
                [questionWithSingleValidChoice.Id] = questionWithSingleValidChoice,
                [questionWith3ValidChoices.Id]     = questionWith3ValidChoices,
                [questionWithWrittenAnswer.Id]     = questionWithWrittenAnswer
            };

            var student1 = fixture.OrganizationOwnerMembers[fixture.UserId][0];
            var student2 = fixture.OrganizationOwnerMembers[fixture.UserId][1];

            var testPublishDate           = new DateTime(2021, 1, 7, 6, 0, 0, DateTimeKind.Utc);
            var startDate                 = testPublishDate.AddDays(1);
            var endDate                   = startDate.AddHours(3);
            var durationInMinutes         = 30;
            IEnumerable <int> studentsIds = new List <int> {
                student1.Id, student2.Id
            };

            ScheduledTest = new ScheduledTest(TestTemplate.Id, testPublishDate, startDate, endDate, durationInMinutes, studentsIds);
            var userTestStartDate = startDate.AddMinutes(10);

            foreach (var userTest in ScheduledTest.UserTests)
            {
                userTest.SetStartDate(userTestStartDate);
                userTest.SetEndDate(userTestStartDate.AddMinutes(5));
            }

            await fixture.ExecuteDbContext(db =>
            {
                db.ScheduledTests.Add(ScheduledTest);
                return(db.SaveChangesAsync());
            });

            int scheduledTestId = ScheduledTest.Id;

            //student1:
            UserAnswers.Add(
                UserAnswerGenerator.GenerateValidAnswer(questionWithSingleValidChoice, scheduledTestId, student1.Id));
            UserAnswers.Add(
                UserAnswerGenerator.GenerateValidAnswer(questionWith3ValidChoices, scheduledTestId, student1.Id));
            UserAnswers.Add(
                UserAnswerGenerator.GenerateValidAnswer(questionWithWrittenAnswer, scheduledTestId, student1.Id));

            //student2:
            UserAnswers.Add(
                UserAnswerGenerator.GenerateInvalidAnswer(questionWithSingleValidChoice, scheduledTestId, student2.Id));
            UserAnswers.Add(
                UserAnswerGenerator.GenerateUserAnswerWithNValidChoices(questionWith3ValidChoices, 1, scheduledTestId, student2.Id));
            UserAnswers.Add(
                UserAnswerGenerator.GenerateInvalidAnswer(questionWithWrittenAnswer, scheduledTestId, student2.Id));

            await fixture.ExecuteDbContext(db =>
            {
                db.UserAnswers.AddRange(UserAnswers);
                return(db.SaveChangesAsync());
            });

            foreach (var userTest in ScheduledTest.UserTests)
            {
                float studentScore = 0f;
                foreach (var studentAnswer in UserAnswers.Where(x => x.UserId == userTest.UserId))
                {
                    var   question      = testTemplateQuestions[studentAnswer.QuestionId];
                    float questionScore = question.Answer.GetScore(studentAnswer);
                    studentScore += questionScore;
                }
                StudentIdTestScore.Add(userTest.UserId, studentScore);
            }

            TestMaxScore = testTemplateQuestions.Values.Select(x => x.Answer.MaxScore).Aggregate((x, y) => x + y);
        }