コード例 #1
0
        public async Task Edit_action_result_method_should_return_ViewResult_with_correct_Model_type()
        {
            // Arrange
            var id = 1;

            var expectedQuiz = _testData.GetTestQuizzes().FirstOrDefault(q => q.QuizId == id);

            _quizRepository.Setup(repo => repo.GetById(id)).ReturnsAsync(expectedQuiz);

            var expectedQuestions = _testData.GetTestQuestions().Where(q => q.QuizId == id);

            _questionRepository.Setup(repo => repo.GetByQuizId(id)).ReturnsAsync(expectedQuestions);

            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            // Act
            var result = await controller.Edit(id);

            // Assert
            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <EditQuizViewModel>(viewResult.ViewData.Model);

            Assert.NotNull(result);
            Assert.Equal(expectedQuiz.QuizId, model.Quiz.QuizId);
            Assert.Equal(2, model.Questions.Count());
        }
コード例 #2
0
        public async Task Get()
        {
            const int userId  = 56;
            var       quizzes = new List <Quiz>
            {
                new Quiz(),
                new Quiz()
            };

            var quizManager = new Mock <IQuizManager>();

            quizManager.Setup(c => c.GetAdminQuizList(userId))
            .Returns(Task.FromResult(quizzes));

            var sut = new QuizzesController(quizManager.Object);

            sut.Token = new AuthToken
            {
                Token      = "token",
                UserId     = userId,
                ValidUntil = DateTime.Now.AddDays(1),
                IsVerified = true
            };

            var result = await sut.Get();

            Assert.AreEqual(quizzes.Count, result.ToList().Count);
        }
コード例 #3
0
        public async Task Posting_quizzes_should_save_to_database()
        {
            using var context = CreateContextWithData();
            var quizzesController = new QuizzesController(context);
            var actionResult      = await quizzesController.PostQuizAsync(testData.GetDefaultBackendQuiz());

            Assert.AreEqual(201, (actionResult.Result as CreatedAtActionResult)?.StatusCode);
            await context.Database.EnsureDeletedAsync();
        }
コード例 #4
0
        public async Task Get_quiz_with_nonexistant_id_should_return_expected_result()
        {
            using var context = CreateContextWithData();
            var quizzesController = new QuizzesController(context);
            var quizzes           = await quizzesController.GetQuizAsync(2);

            Assert.AreEqual(404, (quizzes.Result as NotFoundResult)?.StatusCode);
            await context.Database.EnsureDeletedAsync();
        }
コード例 #5
0
        public async Task Get_random_quiz_Should_return_expected_result_If_no_quiz_exists()
        {
            using var context = CreateContextWithData();
            var quizzesController = new QuizzesController(context);
            var quizzes           = await quizzesController.GetRandomQuizAsync();

            Assert.AreEqual(404, (quizzes.Result as NotFoundResult).StatusCode);
            await context.Database.EnsureDeletedAsync();
        }
コード例 #6
0
        public void SetUp()
        {
            var options = new DbContextOptionsBuilder <QuizManagerContext>()
                          .UseInMemoryDatabase(databaseName: "QuizzesControllerTests")
                          .Options;

            _quizManagerContext = new QuizManagerContext(options);

            _quizzesController = new QuizzesController(_quizManagerContext);
        }
コード例 #7
0
        public async Task Get_random_quiz_Should_return_expected_result()
        {
            var quiz = testData.GetDefaultBackendQuizzes(1);

            using var context = CreateContextWithData(quiz);
            var quizzesController = new QuizzesController(context);
            var quizzes           = await quizzesController.GetRandomQuizAsync();

            Assert.AreEqual(1, quizzes.Value.Id);
            await context.Database.EnsureDeletedAsync();
        }
コード例 #8
0
        public async Task Get_quiz_with_id_should_return_the_specified_quiz_from_database()
        {
            var quiz = testData.GetDefaultBackendQuizzes(2);

            using var context = CreateContextWithData(quiz);
            var quizzesController = new QuizzesController(context);
            var quizzes           = await quizzesController.GetQuizAsync(2);

            Assert.AreEqual(2, quizzes.Value.Id);
            await context.Database.EnsureDeletedAsync();
        }
コード例 #9
0
        public void Create_action_should_return_Create_View_with_correct_model()
        {
            // Arrange
            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            // act
            var result = controller.Create();

            // assert
            Assert.IsType <ViewResult>(result);
            Assert.NotNull(result);
        }
コード例 #10
0
        public QuizzesController CreateQuizzesController()
        {
            var c = new QuizzesController(
                _mockRepo.AnswerService,
                _mockRepo.QuestionService,
                _mockRepo.QuizCategoryService,
                _mockRepo.QuizRatingRepo,
                _mockRepo.QuizResultService,
                _mockRepo.QuizService);

            return(c);
        }
コード例 #11
0
        public async Task Quiz_returned_by_details_view_has_all_associated_questions()
        {
            using (var context = new ApplicationDbContext(_dbContextOptions))
            {
                var sut = new QuizzesController(context);

                var actionResult = await sut.Details(1);

                var viewResult = actionResult as ViewResult;
                var quiz       = viewResult.Model as Quiz;

                quiz.Questions.Count.Should().Be(QuestionsPerQuiz);
            }
        }
コード例 #12
0
        public async Task Delete_quiz_should_return_expected_result()
        {
            var quiz = testData.GetDefaultBackendQuizzes(2);

            using var context = CreateContextWithData(quiz);
            var quizzesController = new QuizzesController(context);
            var actualSuccess     = await quizzesController.DeleteQuizAsync(2);

            var actualFail = await quizzesController.DeleteQuizAsync(2);

            Assert.AreEqual(204, (actualSuccess as NoContentResult)?.StatusCode);
            Assert.AreEqual(404, (actualFail as NotFoundResult)?.StatusCode);
            await context.Database.EnsureDeletedAsync();
        }
コード例 #13
0
        public async Task Index_returns_view_result_with_two_quizVM_objects()
        {
            using (var context = new ApplicationDbContext(_dbContextOptions))
            {
                var sut = new QuizzesController(context);

                var actionResult = await sut.Index();

                var viewResult = (ViewResult)actionResult;
                var quizList   = viewResult.Model as List <Quiz>;

                quizList.Count.Should().Be(2);
            }
        }
コード例 #14
0
        public async Task Questions_returned_with_quiz_all_have_correct_quiz_id()
        {
            using (var context = new ApplicationDbContext(_dbContextOptions))
            {
                var sut = new QuizzesController(context);

                var actionResult = await sut.Details(1);

                var viewResult = actionResult as ViewResult;
                var quiz       = viewResult.Model as Quiz;

                quiz.Questions.Should().OnlyContain(question => question.QuizId == quiz.QuizId);
            }
        }
コード例 #15
0
        public QuizzesController CreateQuizzesController()
        {
            var c = new QuizzesController(
                _mockRepo.AnswerService,
                _mockRepo.QuestionService,
                _mockRepo.QuizCategoryService,
                _mockRepo.QuizService,
                _mockRepo.UserActivityService,
                _mockRepo.ModelConverter,
                _mockRepo.ViewModelConverter);

            MockUser(c);
            return(c);
        }
コード例 #16
0
        public async Task Get_quiz_should_return_a_list_from_database()
        {
            var quiz = new List <Quiz>()
            {
                testData.GetDefaultBackendQuiz(),
                testData.GetDefaultBackendQuiz()
            };

            using var context = CreateContextWithData(quiz);
            var quizzesController = new QuizzesController(context);
            var quizzes           = await quizzesController.GetQuizAsync();

            Assert.AreEqual(2, (quizzes.Value as List <Quiz>)?.Count);
            await context.Database.EnsureDeletedAsync();
        }
コード例 #17
0
        public async Task Details_action_result_method_should_return_BadRequest_when_quiz_id_is_null()
        {
            // Arrange
            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            // Act
            var result = await controller.Details(null);

            // Assert
            var badRequestObjectResult = Assert.IsType <BadRequestObjectResult>(result);
            var model = Assert.IsAssignableFrom <BadRequestObjectResult>(badRequestObjectResult);

            Assert.Equal(model.StatusCode, badRequestObjectResult.StatusCode);
            Assert.NotNull(result);
        }
コード例 #18
0
        public async Task DeleteThrowsException()
        {
            const int userId = 56;
            const int quizId = 56;

            var quizManager = new Mock <IQuizManager>();

            quizManager.Setup(c => c.DeleteQuiz(userId, quizId))
            .Returns(Task.FromResult(true));

            var sut = new QuizzesController(quizManager.Object);

            var result = await sut.Delete(quizId);

            Assert.AreEqual(HttpStatusCode.OK, (HttpStatusCode)result.StatusCode);
        }
コード例 #19
0
        public async Task Index_action_result_get_method_should_return_ViewResult_with_correct_Model_type()
        {
            // Arrange
            _quizRepository.Setup(repo => repo.GetAll()).ReturnsAsync(_testData.GetTestQuizzes);

            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            // Act
            var result = await controller.Index();

            // Assert
            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <IEnumerable <Quiz> >(viewResult.ViewData.Model);

            Assert.Equal(2, model.Count());
        }
コード例 #20
0
        public async Task Details_returns_view_result_with_correct_quiz()
        {
            using (var context = new ApplicationDbContext(_dbContextOptions))
            {
                var sut = new QuizzesController(context);

                var actionResult = await sut.Details(1);

                actionResult.Should().BeOfType(typeof(ViewResult));

                var viewResult = actionResult as ViewResult;
                var quiz       = viewResult.Model as Quiz;

                quiz.QuizId.Should().Be(1);
            }
        }
コード例 #21
0
        public async Task Questions_returned_with_quiz_have_all_associated_answers()
        {
            using (var context = new ApplicationDbContext(_dbContextOptions))
            {
                var sut = new QuizzesController(context);

                var actionResult = await sut.Details(1);

                var viewResult = actionResult as ViewResult;
                var quiz       = viewResult.Model as Quiz;
                var questions  = quiz.Questions;
                foreach (var question in questions)
                {
                    question.AnswerOptions.Count.Should().Be(AnswersPerQuestion);
                    question.AnswerOptions.Should().OnlyContain(answer => answer.QuestionId == question.QuestionId);
                }
            }
        }
コード例 #22
0
        public async Task Index_action_result_method_should_return_an_empty_list_when_there_are_no_quizzes()
        {
            // Arrange
            var emptyList = new List <Quiz>();

            _quizRepository.Setup(repo => repo.GetAll()).ReturnsAsync(emptyList);

            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            // Act
            var result = await controller.Index();

            // Assert

            var viewResult = Assert.IsType <ViewResult>(result);

            Assert.IsAssignableFrom <IEnumerable <Quiz> >(viewResult.ViewData.Model);
        }
コード例 #23
0
        public async Task Edit_post_action_result_should_return_ViewResult_with_correct_Model_type_when_modelState_not_valid()
        {
            // Arrange
            var quiz = new Quiz
            {
                QuizId = 3
            };

            // Arrange
            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            controller.ModelState.AddModelError("Title", "Title is required");

            // Act
            var result = await controller.Edit(quiz.QuizId, quiz);

            // Assert
            Assert.IsType <ViewResult>(result);
        }
コード例 #24
0
        public async Task DeleteConfirmed_post_action_result_should_redirect_to_action_when_modelState_valid()
        {
            var id = 1;

            var httpContext = new DefaultHttpContext();

            var tempData = new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>());

            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object)
            {
                TempData = tempData
            };

            // Act
            var result = await controller.DeleteConfirmed(id);

            // Assert
            Assert.IsType <RedirectToActionResult>(result);
        }
コード例 #25
0
        public async Task Updating_a_quiz_should_return_expected_result()
        {
            var quiz = testData.GetDefaultBackendQuizzes(2);

            using var context = CreateContextWithData(quiz);
            var quizzesController = new QuizzesController(context);

            quiz[1].Questions[0].Text = "How many Trumpets does it take to blow the vote blue in USA?";
            var quizzes = await quizzesController.PutQuizAsync(2, quiz[1]);

            var badResultQuizzes = await quizzesController.PutQuizAsync(3, quiz[1]);

            var notFoundQuizzes = await quizzesController.PutQuizAsync(12, quiz[1]);

            Assert.AreEqual(204, (quizzes as NoContentResult)?.StatusCode);
            Assert.AreEqual(400, (badResultQuizzes as BadRequestResult)?.StatusCode);
            // We would like to test DBUpdateConcurrencyException but cannot find a feasable way to test this within scope of this assignment (need to install separate testing framework)
            await context.Database.EnsureDeletedAsync();
        }
コード例 #26
0
        public async Task PutInsertThrowsException()
        {
            const int userId   = 56;
            var       response = new SaveQuizResult
            {
                Result = 5,
                Status = SaveQuizResultStatus.Success
            };

            var quizManager = new Mock <IQuizManager>();

            quizManager.Setup(c => c.InsertQuiz(userId, It.IsAny <Quiz>()))
            .Returns(Task.FromResult(response));

            var sut = new QuizzesController(quizManager.Object);

            var result = await sut.PutInsertQuiz(new Quiz());

            Assert.AreEqual(HttpStatusCode.OK, (HttpStatusCode)result.StatusCode);
        }
コード例 #27
0
        public async Task Delete_action_result_method_should_return_NotFound_when_no_quiz_found_for_id()
        {
            // Arrange
            var id           = 0;
            var expectedQuiz = _testData.GetTestQuizzes().FirstOrDefault(q => q.QuizId == id);

            _quizRepository.Setup(repo => repo.GetById(id)).ReturnsAsync(expectedQuiz);
            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            // Act
            var result = await controller.Delete(id);

            // Assert
            var notFoundObjectResult = Assert.IsType <NotFoundObjectResult>(result);
            var model = Assert.IsAssignableFrom <NotFoundObjectResult>(notFoundObjectResult);

            Assert.Equal(model.StatusCode, notFoundObjectResult.StatusCode);
            Assert.Equal(model.Value, notFoundObjectResult.Value);
            Assert.NotNull(result);
        }
コード例 #28
0
        public async Task GetThrowsException()
        {
            const int userId  = 56;
            var       quizzes = new List <Quiz>
            {
                new Quiz(),
                new Quiz()
            };

            var quizManager = new Mock <IQuizManager>();

            quizManager.Setup(c => c.GetAdminQuizList(userId))
            .Returns(Task.FromResult(quizzes));

            var sut = new QuizzesController(quizManager.Object);

            var result = await sut.Get();

            Assert.AreEqual(quizzes.Count, result.ToList().Count);
        }
コード例 #29
0
        public async Task Create_post_action_result_should_return_ViewResult_with_correct_Model_type_when_modelState_not_valid()
        {
            // Arrange
            var quiz = new Quiz
            {
                QuizId = 3
            };

            // Arrange
            var controller = new QuizzesController(_quizRepository.Object, _questionRepository.Object);

            controller.ModelState.AddModelError("Title", "Title is required");

            // Act
            var result = await controller.Create(quiz);

            // Assert
            var viewResult = Assert.IsType <ViewResult>(result);

            Assert.IsAssignableFrom <Quiz>(viewResult.ViewData.Model);
        }
コード例 #30
0
        public async Task PostUpdate(int saveResult, SaveQuizResultStatus status, HttpStatusCode expectedResponse)
        {
            const int userId = 56;
            const int quizId = 154;
            var       quiz   = new Quiz
            {
                Id    = quizId,
                Title = "Test",
                Intro = "Intro"
            };

            var response = new SaveQuizResult
            {
                Result = saveResult,
                Status = status
            };

            var quizManager = new Mock <IQuizManager>();

            quizManager
            .Setup(c => c.UpdateQuiz(userId, quizId, quiz))
            .Returns(Task.FromResult(response));

            var sut = new QuizzesController(quizManager.Object);

            sut.Token = new AuthToken
            {
                Token      = "token",
                UserId     = userId,
                ValidUntil = DateTime.Now.AddDays(1),
                IsVerified = true
            };

            var result = await sut.PostUpdateQuiz(quizId, quiz);

            Assert.AreEqual(expectedResponse, (HttpStatusCode)result.StatusCode);
            Assert.IsTrue((HttpStatusCode)result.StatusCode != HttpStatusCode.OK || ((GenericWrapper <int>)result.Value).Value == saveResult);
        }