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