public void Should_GetMockUserTokenFunction_Return_ValidToken()
        {
            //Arrange
            var         _configuration = new Mock <IConfiguration>();
            var         _mockRepo      = new Mock <IRepositoryWrapper>();
            var         _mockLogger    = new Mock <ILoggerManager>();
            var         _mockToken     = new Mock <IToken>();
            string      generatedToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiYWRtaW4iLCJpc19hZG1pbiI6IlRydWUiLCJleHAiOjE1NjcwMjkwNDAsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.cqBycJ7bWw7bTCtnw8V0tQGA-XOdsCo6K_CimzPQd5Q";
            List <User> userResult     = new List <User>();

            userResult.Add(new User
            {
                Id       = 1,
                Name     = "Admin",
                Family   = "",
                UserName = "******",
                Email    = "*****@*****.**",
                IsAdmin  = true,
                IsActive = false,
                Password = "******"
            });


            var user = new LoginVM()
            {
                UserName = "******",
                Password = "******"
            };

            _mockToken.Setup(x => x.GenerateJSONWebToken(userResult[0])).Returns(generatedToken);
            _mockToken.Setup(x => x.AuthenticateUser(user)).Returns(userResult[0]);
            _mockRepo.Setup(x => x.User.FindByCondition(It.IsAny <Expression <Func <User, bool> > >())).Returns(userResult.AsQueryable());

            var controller = new JWTAuthenticationController(_configuration.Object, _mockRepo.Object, _mockLogger.Object, _mockToken.Object);

            //Act
            var actual = controller.Post(user);

            //Assert
            var actualParsed = (((ResponseVM)((OkObjectResult)actual).Value).Data);

            System.Reflection.PropertyInfo pi = actualParsed.GetType().GetProperty("token");
            string token = (string)(pi.GetValue(actualParsed, null));

            Assert.Equal(generatedToken, token);
        }
        public void Should_PasswordNotValid_MockFunction_Return_NotFound()
        {
            //Arrange
            var _configuration = new Mock <IConfiguration>();

            _configuration.SetupGet(x => x[It.Is <string>(s => s == "Jwt:Key")]).Returns("ThisismySecretKey");
            _configuration.SetupGet(x => x[It.Is <string>(s => s == "Jwt:Issuer")]).Returns("Test.com");
            var _mockToken  = new Mock <IToken>();
            var _mockRepo   = new Mock <IRepositoryWrapper>();
            var _mockLogger = new Mock <ILoggerManager>();

            List <User> userResult = new List <User>();

            userResult.Add(new User
            {
                Id       = 1,
                Name     = "Admin",
                Family   = "",
                UserName = "******",
                Email    = "*****@*****.**",
                IsAdmin  = true,
                IsActive = false,
                Password = "******"
            });

            var user = new LoginVM()
            {
                UserName = "******",
                Password = "******"
            };

            _mockRepo.Setup(x => x.User.FindByCondition(y => y.UserName == user.UserName && y.Password == user.Password)).Returns((new List <User>()).AsQueryable());
            var controller = new JWTAuthenticationController(_configuration.Object, _mockRepo.Object, _mockLogger.Object, _mockToken.Object);

            //Act
            var actual = controller.Post(user);

            //Assert
            Assert.Same(typeof(NotFoundObjectResult), actual.GetType());
        }