public async Task InsertAnswerUnauthorized() { UpdateQuizAttemptStatusResult result; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var quizData = await ManagerTestHelper.CreateQuizAsync(context, 3, 5); var quiz = await context.Quizes.FindAsync(quizData.QuizId); var userId = await ManagerTestHelper.AssignQuizAsync(context, quiz.QuizIdentityId); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); result = await sut.InsertAnswerAsync(userId, 8, new Models.TransferObjects.Answer { QuestionId = quizData.QuestionIds[0], Options = quizData.OptionIds.Take(2), TimeSpent = 40 }); } Assert.AreEqual(UpdateQuizAttemptStatusResult.NotAuthorized, result); }
public async Task InsertAnswer() { UpdateQuizAttemptStatusResult result; QuizAttempt attempt; List <int> optionIds; List <int> answers; List <int> answersOtherQuestion; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var quizData = await ManagerTestHelper.CreateQuizAsync(context, 3, 5); var quiz = await context.Quizes.FindAsync(quizData.QuizId); var userId = await ManagerTestHelper.AssignQuizAsync(context, quiz.QuizIdentityId); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); var createAttemptResult = await sut.CreateAttempt(userId, quiz.Id); attempt = createAttemptResult.Attempt; optionIds = quizData.OptionIds.Skip(2).Take(2).ToList(); await sut.InsertAnswerAsync(userId, attempt.Id, new Models.TransferObjects.Answer { QuestionId = quizData.QuestionIds[0], Options = quizData.OptionIds.Take(2), TimeSpent = 40 }); result = await sut.InsertAnswerAsync(userId, attempt.Id, new Models.TransferObjects.Answer { QuestionId = quizData.QuestionIds[0], Options = optionIds, TimeSpent = 40 }); answers = context.Answers .Where(a => a.AttemptId == attempt.Id && a.QuestionId == quizData.QuestionIds[0]) .Select(a => a.OptionId) .ToList(); answersOtherQuestion = context.Answers .Where(a => a.AttemptId == attempt.Id && a.QuestionId == quizData.QuestionIds[1]) .Select(a => a.OptionId) .ToList(); } Assert.AreEqual(UpdateQuizAttemptStatusResult.Success, result); Assert.AreEqual(0, optionIds.Except(answers).ToList().Count); Assert.AreEqual(0, answers.Except(optionIds).ToList().Count); Assert.AreEqual(0, answersOtherQuestion.Count); Assert.AreEqual(40, attempt.TimeSpent); }
public async Task FinishQuizNull() { var sut = new QuizAttemptManager(null, null, Mock.Of <ILogManager>()); var result = await sut.FinishQuizAsync(new QuizAttempt { Status = QuizAttemptStatus.Completed }, null, 0); Assert.IsFalse(result); }
public async Task CreateAttemptQuizNotFound() { CreateAttemptResponse result; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); result = await sut.CreateAttempt(3, 5); } Assert.AreEqual(CreateAttemptResult.NotAuthorized, result.Result); Assert.IsNull(result.Attempt); }
public async Task UpdateStatusNull() { UpdateQuizAttemptResponse result; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); result = await sut.UpdateStatus(2, 0, new UpdateQuizAttemptStatus { EndQuiz = false, TimeSpent = 10 }); } Assert.AreEqual(UpdateQuizAttemptStatusResult.NotAuthorized, result.Result); Assert.IsNull(result.Attempt); }
public async Task UpdateStatusAvailableIntervalPassed() { UpdateQuizAttemptResponse result; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); var quiz = new Quiz { Title = "title", Intro = "intro", TimeConstraint = true, TimeLimitInSeconds = 40, AvailableTo = DateTime.Now.AddDays(-1) }; var testData = await ManagerTestHelper.CreateAndAssignQuizAsync(context, quiz, true); var attempt = await context.QuizAttempts.AddAsync( new QuizAttempt { QuizId = testData.QuizId, UserId = testData.UserId, Status = QuizAttemptStatus.Incomplete, StartDate = DateTime.Now }); await context.SaveChangesAsync(); result = await sut.UpdateStatus(testData.UserId, attempt.Entity.Id, new UpdateQuizAttemptStatus { TimeSpent = 30, EndQuiz = false }); } Assert.AreEqual(UpdateQuizAttemptStatusResult.DateError, result.Result); Assert.AreNotEqual(QuizAttemptStatus.Incomplete, result.Attempt.Status); }
public async Task CreateAttemptQuizRepeatable() { CreateAttemptResponse result; QuizAttempt previousAttempt; var quiz = new Quiz { Title = "title", Intro = "intro", Repeatable = true }; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var testData = await ManagerTestHelper.CreateAndAssignQuizAsync(context, quiz, true); var attempt = await context.QuizAttempts.AddAsync( new QuizAttempt { QuizId = testData.QuizId, UserId = testData.UserId, StartDate = DateTime.Now, Status = QuizAttemptStatus.Incomplete, TimeSpent = 10 }); await context.SaveChangesAsync(); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); result = await sut.CreateAttempt(testData.UserId, testData.QuizId); previousAttempt = await context.QuizAttempts.FindAsync(attempt.Entity.Id); } Assert.AreEqual(CreateAttemptResult.Success, result.Result); Assert.AreEqual(QuizAttemptStatus.Completed, previousAttempt.Status); Assert.AreEqual(QuizAttemptStatus.Incomplete, result.Attempt.Status); }
public async Task CreateAttemptQuizNotAssigned() { CreateAttemptResponse result; var quiz = new Quiz { Title = "title", Intro = "intro" }; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var testData = await ManagerTestHelper.CreateAndAssignQuizAsync(context, quiz, false); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); result = await sut.CreateAttempt(testData.UserId, testData.QuizId); } Assert.AreEqual(CreateAttemptResult.NotAuthorized, result.Result); Assert.IsNull(result.Attempt); }
public async Task FinishQuiz() { CreateAttemptResponse result; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var quizData = await ManagerTestHelper.CreateQuizAsync(context, 3, 5); var quiz = await context.Quizes.FindAsync(quizData.QuizId); var userId = await ManagerTestHelper.AssignQuizAsync(context, quiz.QuizIdentityId); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); result = await sut.CreateAttempt(userId, quiz.Id); await sut.FinishQuizAsync(result.Attempt, quiz.PassScore, 30); } Assert.AreEqual(CreateAttemptResult.Success, result.Result); Assert.AreEqual(QuizAttemptStatus.Completed, result.Attempt.Status); Assert.IsNotNull(result.Attempt.EndDate); }
public async Task CreateAttemptQuizNotAvailable() { CreateAttemptResponse result; var quiz = new Quiz { Title = "title", Intro = "intro", AvailableTo = DateTime.Now.AddDays(-1) }; using (var context = new QuizContext(ManagerTestHelper.Options)) { var logManager = Mock.Of <ILogManager>(); var testData = await ManagerTestHelper.CreateAndAssignQuizAsync(context, quiz, true); var sut = new QuizAttemptManager(context, new QuestionManager(context, logManager), logManager); result = await sut.CreateAttempt(testData.UserId, testData.QuizId); } Assert.AreEqual(CreateAttemptResult.DateError, result.Result); Assert.IsNull(result.Attempt); }
public void EvaluateStatus(QuizAttemptStatus expected, int userScore, int?passScore) { var actual = QuizAttemptManager.EvaluateStatus(userScore, passScore); Assert.AreEqual(expected, actual); }
public void EvaluateQuizSuccess() { var options = new List <QuestionAnswer>(); options.Add(new QuestionAnswer { QuestionId = 1, IsCorrect = false, IsMarked = false }); options.Add(new QuestionAnswer { QuestionId = 1, IsCorrect = true, IsMarked = false }); options.Add(new QuestionAnswer { QuestionId = 2, IsCorrect = false, IsMarked = false }); options.Add(new QuestionAnswer { QuestionId = 2, IsCorrect = true, IsMarked = true }); options.Add(new QuestionAnswer { QuestionId = 2, IsCorrect = true, IsMarked = true }); options.Add(new QuestionAnswer { QuestionId = 2, IsCorrect = false, IsMarked = false }); options.Add(new QuestionAnswer { QuestionId = 3, IsCorrect = false, IsMarked = false }); options.Add(new QuestionAnswer { QuestionId = 3, IsCorrect = false, IsMarked = false }); options.Add(new QuestionAnswer { QuestionId = 3, IsCorrect = true, IsMarked = true }); options.Add(new QuestionAnswer { QuestionId = 4, IsCorrect = false, IsMarked = true }); options.Add(new QuestionAnswer { QuestionId = 4, IsCorrect = true, IsMarked = false }); options.Add(new QuestionAnswer { QuestionId = 5, IsCorrect = true, IsMarked = true }); options.Add(new QuestionAnswer { QuestionId = 5, IsCorrect = true, IsMarked = true }); options.Add(new QuestionAnswer { QuestionId = 5, IsCorrect = false, IsMarked = true }); var questions = new List <Question>(); questions.Add(new Question { Id = 1, Level = 4 }); questions.Add(new Question { Id = 2, Level = 2 }); questions.Add(new Question { Id = 3, Level = 5 }); questions.Add(new Question { Id = 4, Level = 2 }); questions.Add(new Question { Id = 5, Level = 5 }); var result = QuizAttemptManager.EvaluateQuiz(questions, options); Assert.AreEqual(2, result.CorrectCount); Assert.AreEqual(2, result.IncorrectCount); Assert.AreEqual(38.89M, result.Score); }
public void RoundScore(int userScore, int totalScore, string expected) { var actual = QuizAttemptManager.RoundScore(userScore, totalScore); Assert.AreEqual(Convert.ToDecimal(expected), actual); }