public async Task PostResults_ReturnsViewResultAgain_WhenModelStateIsInvalid()
        {
            // Arrange
            var mockUserManager   = new FakeUserManager();
            var mockLoggerFactory = new Mock <ILoggerFactory>();
            var mockLogger        = new Mock <ILogger>();

            mockLoggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>()))
            .Returns(mockLogger.Object);
            var mockMapper           = new Mock <IMapper>();
            var mockChallengeService = new Mock <IChallengeService>();

            var challengeResultViewModel = new ChallengeResultViewModel();

            var challengeController = new ChallengeController(
                mockUserManager,
                mockLoggerFactory.Object,
                mockMapper.Object,
                mockChallengeService.Object
                );

            challengeController.ModelState.AddModelError("", "");

            // Act
            var result = await challengeController.PostResults(challengeResultViewModel) as ViewResult;

            // Assert
            Assert.IsType <ViewResult>(result);
            var model = Assert.IsType <ChallengeResultViewModel>(result.Model);

            Assert.Equal(false, result.ViewData.ModelState.IsValid);
        }
        public async Task PostResults_ReturnsStatusCode500_IfChallengeEmpty()
        {
            // Arrange
            var mockUserManager   = new FakeUserManager();
            var mockLoggerFactory = new Mock <ILoggerFactory>();
            var mockLogger        = new Mock <ILogger>();

            mockLoggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>()))
            .Returns(mockLogger.Object);
            var mockMapper               = new Mock <IMapper>();
            var mockChallengeService     = new Mock <IChallengeService>();
            var challengeResultViewModel = new ChallengeResultViewModel();

            var challengeController = new ChallengeController(
                mockUserManager,
                mockLoggerFactory.Object,
                mockMapper.Object,
                mockChallengeService.Object
                );

            // Act
            var result = await challengeController.PostResults(It.IsAny <int>()) as StatusCodeResult;

            // Assert
            Assert.IsType <StatusCodeResult>(result);
            Assert.Equal(500, result.StatusCode);
        }
        public async Task PostResults_RedirectToAction_WhenDatabaseSuccess()
        {
            // Arrange
            var mockUserManager   = new FakeUserManager();
            var mockLoggerFactory = new Mock <ILoggerFactory>();
            var mockLogger        = new Mock <ILogger>();

            mockLoggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>()))
            .Returns(mockLogger.Object);
            var mockMapper = new Mock <IMapper>();

            mockMapper.Setup(m => m.Map <ChallengeResultDto>(It.IsAny <ChallengeResultViewModel>()))
            .Returns(new ChallengeResultDto())
            .Verifiable();
            var mockChallengeService = new Mock <IChallengeService>();

            mockChallengeService.Setup(c => c.SetResultAsync(It.IsAny <ChallengeResultDto>()))
            .ReturnsAsync(true)
            .Verifiable();
            var challengeResultViewModel = new ChallengeResultViewModel();

            var challengeController = new ChallengeController(
                mockUserManager,
                mockLoggerFactory.Object,
                mockMapper.Object,
                mockChallengeService.Object
                );

            // Act
            var result = await challengeController.PostResults(challengeResultViewModel) as RedirectToActionResult;

            // Assert
            Assert.IsType <RedirectToActionResult>(result);
            Assert.Equal("Challenges", result.ActionName);
        }
        public async Task PostResults_ReturnsViewResult_IfChallengeExists()
        {
            // Arrange
            var mockUserManager   = new FakeUserManager();
            var mockLoggerFactory = new Mock <ILoggerFactory>();
            var mockLogger        = new Mock <ILogger>();

            mockLoggerFactory.Setup(f => f.CreateLogger(It.IsAny <string>()))
            .Returns(mockLogger.Object);
            var challengeResultViewModel = new ChallengeResultViewModel();
            var mockMapper = new Mock <IMapper>();

            mockMapper.Setup(m => m.Map <ChallengeResultViewModel>(It.IsAny <ChallengeDto>()))
            .Returns(challengeResultViewModel)
            .Verifiable();
            var mockChallengeService = new Mock <IChallengeService>();

            mockChallengeService.Setup(c => c.GetChallengeAsync(It.IsAny <int>()))
            .ReturnsAsync(new ChallengeDto())
            .Verifiable();


            var challengeController = new ChallengeController(
                mockUserManager,
                mockLoggerFactory.Object,
                mockMapper.Object,
                mockChallengeService.Object
                );

            // Act
            var result = await challengeController.PostResults(It.IsAny <int>()) as ViewResult;

            // Assert
            Assert.IsType <ViewResult>(result);
            var model = Assert.IsType <ChallengeResultViewModel>(result.Model);
            // Assert.Equal(0, model.Id); TODO test model properties
        }