public void PostAnswer_Incorrect_Answer_Does_Not_Increase_Level_And_Ends_Session_200()
        {
            // Arrange
            State.Exercises.Add(exercise);
            ExerciseController ec = new ExerciseController(_exerciseLogic.Object, _sessionLogic.Object);

            _sessionLogic.Setup(c => c.EndSession(session));

            // Act
            var incorrectAnswer = new Answer()
            {
                ExerciseId = exercise.Id, SessionId = session.Id, SubmittedAnswer = "50"
            };
            var result = (ObjectResult)ec.PostAnswer(exercise.Id.Value, incorrectAnswer);

            // Assert
            Assert.AreEqual(result.StatusCode, 200);
            var expectedResult = new Result()
            {
                AllLevelCompleted = false, AnswerCorrect = false, Rank = RankEnum.Beginner, Level = 1
            };

            Assert.AreEqual(expectedResult, result.Value);
            _sessionLogic.Verify(mock => mock.EndSession(session), Times.Once());
        }
        public void PostAnswer_Should_Remove_Question_After_Answer_Submission_400()
        {
            // Arrange
            State.Exercises.Clear();
            State.Exercises.Add(exercise);
            ExerciseController ec = new ExerciseController(_exerciseLogic.Object, _sessionLogic.Object);

            _exerciseLogic.Setup(e => e.RemoveExercise(exercise));

            // Act
            var correctAnswer = new Answer()
            {
                ExerciseId = exercise.Id, SessionId = session.Id, SubmittedAnswer = "5"
            };
            var result = (ObjectResult)ec.PostAnswer(exercise.Id.Value, correctAnswer);

            // Assert
            Assert.AreEqual(result.StatusCode, 200);
            _exerciseLogic.Verify(m => m.RemoveExercise(exercise), Times.Once());
        }
Example #3
0
        public void PostAnswer_RightAnswer_EndOfQuestions()
        {
            var exerciseHelper = Substitute.For <IExerciseHelper>();

            exerciseHelper.GetNextExercise(Arg.Any <Exercise>()).Returns(new Exercise {
                Rank = RankLevel.Advanced
            });
            var exerciseController = new ExerciseController(exerciseHelper);

            exerciseHelper.IsRightAnswer(Arg.Any <ExerciseAnswer>()).Returns(true);
            exerciseHelper.IsEndOfExercise(Arg.Any <RankLevel>()).Returns(true);

            var answer = new ExerciseAnswer {
                Exercise = new Exercise()
            };
            var wrapper = exerciseController.PostAnswer(answer);

            Assert.AreEqual(ExerciseStatus.EndOfExercise, wrapper.Status);
            Assert.IsNull(wrapper.Exercise);
        }
Example #4
0
        public void PostAnswerTest_Incorrect()
        {
            var exerciseHelper = Substitute.For <IExerciseHelper>();

            exerciseHelper.GetFirstExercise().Returns(new Exercise {
                Rank = RankLevel.Beginner
            });
            var exerciseController = new ExerciseController(exerciseHelper);

            exerciseHelper.IsRightAnswer(Arg.Any <ExerciseAnswer>()).Returns(false);
            exerciseHelper.IsEndOfExercise(Arg.Any <RankLevel>()).Returns(false);

            var answer = new ExerciseAnswer {
                Exercise = new Exercise()
            };
            var wrapper = exerciseController.PostAnswer(answer);

            Assert.AreEqual(ExerciseStatus.IncorrectAnswer, wrapper.Status);
            Assert.IsNull(wrapper.Exercise);
        }
        public void PostAnswer_Correct_Answer_Moves_To_Next_Level_200()
        {
            // Arrange
            State.Exercises.Add(exercise);
            ExerciseController ec = new ExerciseController(_exerciseLogic.Object, _sessionLogic.Object);

            // Act
            var correctAnswer = new Answer()
            {
                ExerciseId = exercise.Id, SessionId = session.Id, SubmittedAnswer = "5"
            };
            var result = (ObjectResult)ec.PostAnswer(exercise.Id.Value, correctAnswer);

            // Assert
            Assert.AreEqual(result.StatusCode, 200);
            var expectedResult = new Result()
            {
                AllLevelCompleted = false, AnswerCorrect = true, Rank = RankEnum.Beginner, Level = 2
            };

            Assert.AreEqual(expectedResult, result.Value);
        }
        public void PostAnswer_Last_Correct_Answer_Ends_Session_200()
        {
            // Arrange
            var newSession = new Session()
            {
                Id = Guid.NewGuid(), Rank = RankEnum.Expert, Level = 3
            };

            State.Sessions.Add(newSession);


            var lastExercise = new Exercise()
            {
                Id = Guid.NewGuid(), Expression1 = 2, Expression2 = 3, TimeLimit = 30, AssignedSession = newSession.Id, CreatedDateTime = DateTime.Now
            };

            State.Exercises.Add(lastExercise);
            ExerciseController ec = new ExerciseController(_exerciseLogic.Object, _sessionLogic.Object);

            _sessionLogic.Setup(c => c.EndSession(newSession));

            // Act
            var correctAnswer = new Answer()
            {
                ExerciseId = lastExercise.Id, SessionId = newSession.Id, SubmittedAnswer = "5"
            };
            var result = (ObjectResult)ec.PostAnswer(lastExercise.Id.Value, correctAnswer);

            // Assert
            Assert.AreEqual(result.StatusCode, 200);
            var expectedResult = new Result()
            {
                AllLevelCompleted = true, AnswerCorrect = true, Rank = RankEnum.Expert, Level = 3
            };

            Assert.AreEqual(expectedResult, result.Value);
            _sessionLogic.Verify(mock => mock.EndSession(newSession), Times.Once());
        }
        public void PostAnswer_Correct_Answer_Three_Times_Moves_To_Next_Rank_And_Reset_Level_200()
        {
            // Arrange
            ExerciseController ec = new ExerciseController(_exerciseLogic.Object, _sessionLogic.Object);
            var exercise1         = new Exercise()
            {
                Id = Guid.NewGuid(), Expression1 = 2, Expression2 = 3, TimeLimit = 30, AssignedSession = session.Id, CreatedDateTime = DateTime.Now
            };

            State.Exercises.Add(exercise1);


            // Act
            var correctAnswer1 = new Answer()
            {
                ExerciseId = exercise1.Id, SessionId = session.Id, SubmittedAnswer = "5"
            };
            var result = (ObjectResult)ec.PostAnswer(exercise1.Id.Value, correctAnswer1);

            // Assert
            Assert.AreEqual(result.StatusCode, 200);
            var expectedResult = new Result()
            {
                AllLevelCompleted = false, AnswerCorrect = true, Rank = RankEnum.Beginner, Level = 2
            };

            Assert.AreEqual(expectedResult, result.Value);

            // Arrange
            var exercise2 = new Exercise()
            {
                Id = Guid.NewGuid(), Expression1 = 23, Expression2 = 3, TimeLimit = 30, AssignedSession = session.Id, CreatedDateTime = DateTime.Now
            };

            State.Exercises.Add(exercise2);

            // Act
            var correctAnswer2 = new Answer()
            {
                ExerciseId = exercise2.Id, SessionId = session.Id, SubmittedAnswer = "26"
            };
            var result2 = (ObjectResult)ec.PostAnswer(exercise2.Id.Value, correctAnswer2);

            // Assert
            Assert.AreEqual(result2.StatusCode, 200);
            var expectedResult2 = new Result()
            {
                AllLevelCompleted = false, AnswerCorrect = true, Rank = RankEnum.Beginner, Level = 3
            };

            Assert.AreEqual(expectedResult2, result2.Value);

            // Arrange
            var exercise3 = new Exercise()
            {
                Id = Guid.NewGuid(), Expression1 = 2, Expression2 = 1, TimeLimit = 30, AssignedSession = session.Id, CreatedDateTime = DateTime.Now
            };

            State.Exercises.Add(exercise3);

            // Act
            var correctAnswer3 = new Answer()
            {
                ExerciseId = exercise3.Id, SessionId = session.Id, SubmittedAnswer = "3"
            };
            var result3 = (ObjectResult)ec.PostAnswer(exercise3.Id.Value, correctAnswer3);

            // Assert
            Assert.AreEqual(result3.StatusCode, 200);
            var expectedResult3 = new Result()
            {
                AllLevelCompleted = false, AnswerCorrect = true, Rank = RankEnum.Talented, Level = 1
            };

            Assert.AreEqual(expectedResult3, result3.Value);
        }