public async Task <SampleExam.Domain.UserExam> SelectUserExamAsync(int userExamId) { SampleExam.Domain.UserExam userExam = null; using (var dbContext = this.dbContextFactory.CreateDbContext()) { userExam = await dbContext.UserExams.FindAsync(userExamId); } return(userExam); }
public async Task <Tuple <int, int> > TakeExam(int userExamId, bool fail = false, bool skipSomeQuestions = false) { var link = "/questionanswers"; SampleExam.Domain.UserExam userExam = null; using (var context = dbContextFactory.CreateDbContext()) { userExam = context.UserExams .Include(e => e.Exam) .ThenInclude(e => e.Questions).ThenInclude(e => e.AnswerOptions) .Where(e => e.Id == userExamId).First(); } var questions = userExam.Exam.Questions.Shuffle().ToArray(); int rightAnswerCount = questions.Length * userExam.Exam.PassPercentage / 100; rightAnswerCount = fail ? Math.Max(0, rightAnswerCount - 2) : Math.Min(questions.Length, rightAnswerCount + 2); if (skipSomeQuestions) { var takePersentage = userExam.Exam.PassPercentage + ((100 - userExam.Exam.PassPercentage) / 2); var take = questions.Count() * takePersentage / 100; take = Math.Max(take, rightAnswerCount); questions = questions.Take(take).ToArray(); } Assert.True(questions.Count() > rightAnswerCount); var request = new Request(); request.UserExamQuestionAnswer = new UserExamQuestionAnswerData() { UserExamId = userExamId }; //answering questions randomly foreach (var question in questions) { request.UserExamQuestionAnswer.QuestionId = question.Id; request.UserExamQuestionAnswer.AnswerOptionIds = AnswerQuestion(question, AnswerType.Random); var questionAnswer = await client.PostQuestionAnswerSuccesfully(link, request); } //changing answers to fail/succeed var random = Utils.NewRandom(); for (int i = 0; i < questions.Length; i++) { var question = questions[i]; request.UserExamQuestionAnswer.QuestionId = question.Id; var answerType = i < rightAnswerCount ? AnswerType.Right : AnswerType.Wrong; request.UserExamQuestionAnswer.AnswerOptionIds = AnswerQuestion(question, answerType); var questionAnswer = await client.PostQuestionAnswerSuccesfully(link, request); } return(Tuple.Create(rightAnswerCount, questions.Count())); }
public async Task <SampleExam.Domain.UserExam> UpdateUserExamStartDate(int userExamId, int minutesToAdd) { SampleExam.Domain.UserExam userExam = null; using (var dbContext = this.dbContextFactory.CreateDbContext()) { userExam = await dbContext.UserExams.FindAsync(userExamId); userExam.StartedtedAt = userExam.StartedtedAt.AddMinutes(minutesToAdd); await dbContext.SaveChangesAsync(); } return(userExam); }