public async Task DeleteChallenge_ReturnsStatusCode500_IfChallengeNotDeleted()
        {
            // 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>();

            mockChallengeService.Setup(c => c.DeleteChallengeAsync(It.IsAny <int>(), It.IsAny <int>()))
            .ReturnsAsync(false)     // Delete challenge error
            .Verifiable();

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

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

            // Assert
            Assert.IsType <StatusCodeResult>(result);
            Assert.Equal(500, result.StatusCode);
        }
        public async Task DeleteChallenge_ReturnsRedirectAction_IfChallengeDeleted()
        {
            // 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>();

            mockChallengeService.Setup(c => c.DeleteChallengeAsync(It.IsAny <int>(), It.IsAny <int>()))
            .ReturnsAsync(true)     // Delete challenge success
            .Verifiable();

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

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

            // Assert
            Assert.IsType <RedirectToActionResult>(result);
            Assert.Equal("Challenges", result.ActionName);
        }