예제 #1
0
        public void Auth_WhenBodyViewModelWithPasswordGrantTypeAndUserName_ShouldReturnTokenResponse()
        {
            //Arrange
            var userName = _fixture.Create <string>();
            var password = _fixture.Create <string>();
            var token    = _fixture.Create <Token>();

            var tokenData = new TokenData
            {
                ExporationTimeInMinutes = 60,
                EncodedToken            = token.Value
            };

            TokenRequestViewModel viewModel = new TokenRequestViewModel
            {
                Username  = userName,
                ClientId  = token.ClientId,
                Password  = password,
                GrantType = "password"
            };
            var userResult = new GetUserQueryResult
            {
                User = new ApplicationUser
                {
                    Id       = token.UserId,
                    UserName = userName
                }
            };

            _serviceMock.Setup(x => x.GenerateRefreshToken(token.ClientId, token.UserId)).Returns(token);
            _serviceMock.Setup(x => x.CreateAccessToken(token.UserId)).Returns(tokenData);

            _queryDispatcherMock.Setup(x => x.DispatchAsync <GetUserByNameQuery, GetUserQueryResult>(It.IsAny <GetUserByNameQuery>()))
            .Returns(Task.FromResult(userResult));
            _queryDispatcherMock.Setup(x => x.DispatchAsync <CheckUserPasswordQuery, CheckUserPasswordQueryResult>(It.IsAny <CheckUserPasswordQuery>()))
            .Returns(Task.FromResult(new CheckUserPasswordQueryResult
            {
                IsCorrect = true
            }));

            _commandDispatcherMock.Setup(x => x.DispatchAsync <AddTokenCommand>(It.IsAny <AddTokenCommand>()))
            .Returns(Task.CompletedTask);

            //Act
            var result = _controller.Auth(viewModel).Result as JsonResult;

            //Assert
            Assert.IsNotNull(result);

            var json = new JsonResult(new TokenResponseViewModel
            {
                Expiration   = tokenData.ExporationTimeInMinutes,
                RefreshToken = tokenData.EncodedToken,
                Token        = token.Value
            });

            Assert.AreEqual(result.Value.ToString(), json.Value.ToString());
        }
예제 #2
0
        public void Auth_WhenBodyViewModelWithPasswordGrantTypeWrongPassword_ShouldReturnUnauthorizedResult()
        {
            var username = "******";
            var userId   = Guid.NewGuid().ToString();
            var clientId = Guid.NewGuid().ToString();

            TokenRequestViewModel viewModel = new TokenRequestViewModel
            {
                Username  = username,
                ClientId  = clientId,
                Password  = "******",
                GrantType = "password"
            };
            ApplicationUser user = new ApplicationUser
            {
                Id       = userId,
                UserName = username
            };


            var mockUserAndRolesRepo = new Mock <IUserAndRoleRepository>();

            mockUserAndRolesRepo.Setup(x => x.GetUserByNameAsync(username)).Returns(Task.FromResult(user));
            mockUserAndRolesRepo.Setup(x => x.CheckPasswordAsync(user, It.IsAny <string>())).Returns(Task.FromResult(false));

            var mockTokenRepo = new Mock <ITokenRepository>();

            mockTokenRepo.Setup(x => x.AddRefreshToken(It.IsAny <Token>())).Verifiable();


            var controller = new TokenController(mockUserAndRolesRepo.Object, mockTokenRepo.Object, null);

            Assert.IsInstanceOf <UnauthorizedResult>(controller.Auth(viewModel).Result);
        }
예제 #3
0
        public void Auth_WhenNullViewModel_ShouldReturnBadRequest()
        {
            var controller = new TokenController(null, null, null);

            var result = controller.Auth(null).Result as BadRequestResult;

            Assert.IsNotNull(result);
            Assert.AreEqual(result.StatusCode, 400);
        }
예제 #4
0
        public void Auth_WhenInvalidViewModelWithRefreshTokenGrantType_ShouldReturnUnauthorizedResult()
        {
            TokenRequestViewModel viewModel = new TokenRequestViewModel
            {
                Username  = null,
                ClientId  = null,
                Password  = "******",
                GrantType = "refresh_token"
            };

            var mockTokenRepo = new Mock <ITokenRepository>();

            mockTokenRepo.Setup(x => x.CheckRefreshTokenForClient(viewModel.ClientId, It.IsAny <string>()))
            .Returns(Task.FromResult((Token)null));

            var controller = new TokenController(null, mockTokenRepo.Object, null);

            Assert.IsInstanceOf <UnauthorizedResult>(controller.Auth(viewModel).Result);
        }
        public void Auth(IOptions <Audience> settings, IRTokenRepository repo)
        {
            //Arrage
            Parameters parameters = new Parameters();

            parameters.grant_type = "password";
            parameters.username   = "******";
            parameters.fullname   = "Sample User";
            TokenController controller = new TokenController(settings, repo);

            //Act
            var result     = controller.Auth(parameters) as ActionResult;
            var viewResult = result.ToBsonDocument();
            var filter     = viewResult["Value"].AsBsonDocument;
            var code       = filter["Code"].AsString;
            var message    = filter["Message"].AsString;

            //Assert
            Assert.IsNotNull(result);
            Assert.AreEqual("999", code);
        }
예제 #6
0
        public void Auth_WhenBodyViewModelWithRefreshTokenGrantTypeAndWrongUserName_ShouldReturnUnauthorizedResult()
        {
            var username = "******";
            var userId   = Guid.NewGuid().ToString();
            var clientId = Guid.NewGuid().ToString();

            var refreshToken = new Token
            {
                ClientId     = clientId,
                UserId       = userId,
                Id           = 1,
                CreationDate = DateTime.Now,
                Value        = Guid.NewGuid().ToString()
            };

            TokenRequestViewModel viewModel = new TokenRequestViewModel
            {
                Username  = username,
                ClientId  = clientId,
                Password  = "******",
                GrantType = "refresh_token"
            };

            var mockUserAndRolesRepo = new Mock <IUserAndRoleRepository>();

            mockUserAndRolesRepo.Setup(x => x.GetUserById(userId)).Returns(Task.FromResult <ApplicationUser>(null));

            var mockTokenRepo = new Mock <ITokenRepository>();

            mockTokenRepo.Setup(x => x.CheckRefreshTokenForClient(viewModel.ClientId, It.IsAny <string>()))
            .Returns(Task.FromResult(refreshToken));

            var controller = new TokenController(mockUserAndRolesRepo.Object, mockTokenRepo.Object, null);

            Assert.IsInstanceOf <UnauthorizedResult>(controller.Auth(viewModel).Result);
        }
예제 #7
0
        public void Auth_WhenBodyViewModelWithPasswordGrantTypeAndEmail_ShouldReturnTokenResponse()
        {
            var username = "******";
            var userId   = Guid.NewGuid().ToString();
            var clientId = Guid.NewGuid().ToString();

            var token = new Token
            {
                ClientId     = clientId,
                UserId       = userId,
                Id           = 1,
                CreationDate = DateTime.Now,
                Value        = Guid.NewGuid().ToString()
            };

            var tokenData = new TokenData
            {
                ExporationTimeInMinutes = 60,
                EncodedToken            = token.Value
            };

            TokenRequestViewModel viewModel = new TokenRequestViewModel
            {
                Username  = username,
                ClientId  = clientId,
                Password  = "******",
                GrantType = "password"
            };
            ApplicationUser user = new ApplicationUser
            {
                Id       = userId,
                UserName = username
            };


            var mockServie = new Mock <ITokenService>();

            mockServie.Setup(x => x.GenerateRefreshToken(clientId, userId)).Returns(token);
            mockServie.Setup(x => x.CreateAccessToken(userId)).Returns(tokenData);

            var mockUserAndRolesRepo = new Mock <IUserAndRoleRepository>();

            mockUserAndRolesRepo.Setup(x => x.GetUserByNameAsync(username)).Returns(Task.FromResult <ApplicationUser>(null));
            mockUserAndRolesRepo.Setup(x => x.GetUserByEmailAsync(username)).Returns(Task.FromResult(user));
            mockUserAndRolesRepo.Setup(x => x.CheckPasswordAsync(user, It.IsAny <string>())).Returns(Task.FromResult(true));

            var mockTokenRepo = new Mock <ITokenRepository>();

            mockTokenRepo.Setup(x => x.AddRefreshToken(It.IsAny <Token>())).Verifiable();


            var controller = new TokenController(mockUserAndRolesRepo.Object, mockTokenRepo.Object, mockServie.Object);

            var result = controller.Auth(viewModel).Result as JsonResult;

            Assert.IsNotNull(result);

            var json = new JsonResult(new TokenResponseViewModel
            {
                Expiration   = tokenData.ExporationTimeInMinutes,
                RefreshToken = tokenData.EncodedToken,
                Token        = token.Value
            });

            Assert.AreEqual(result.Value.ToString(), json.Value.ToString());
        }