public AccountCredentialsViewModel LoginUser(LoginUserBindingModel bm)
        {
            string tokenBearer = string.Empty;
            Guid   userId      = Guid.Empty;
            string name        = string.Empty;
            string email       = string.Empty;

            try
            {
                var user = this.Context
                           .Users
                           .Where(u => u.Email == bm.Email)
                           .First();

                // taking the user data to send it to the client
                userId = user.Id;
                name   = user.Name;
                email  = user.Email;

                var passwordHash = GenerateHashOfPassword(bm.Password, user.Salt);

                if (user.PasswordHash == passwordHash)
                {
                    tokenBearer = GenerateToken();
                    TokenManager newToken = new TokenManager()
                    {
                        Value     = tokenBearer,
                        CreatedOn = DateTime.Now,
                    };
                    newToken.User = user;

                    this.Context.Tokens.Add(newToken);
                    this.Context.SaveChanges();
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception)
            {
                return(null);
            }

            AccountCredentialsViewModel viewModel = new AccountCredentialsViewModel()
            {
                UserId = userId,
                Token  = tokenBearer,
                Name   = name,
                Email  = email
            };

            return(viewModel);
        }
        public void Post_RegisterAndLogin_ShouldReturnStatusCode201()
        {
            // Arrange
            var userId = "12354321-3123-1122-4332-123456789231";

            var bidingModel = new RegisterUserBindingModel()
            {
                Name            = "Gosho",
                Email           = "*****@*****.**",
                Password        = "******",
                ConfirmPassword = "******"
            };
            var userCredentials = new AccountCredentialsViewModel()
            {
                UserId = new Guid(userId),
                Token  = "Token-Token-Token"
            };

            var serviceMock = new Mock <IAccountService>();

            serviceMock
            .Setup(s => s.CreateNewUserAccount(bidingModel))
            .Returns(userCredentials);

            var loggerMock = new Mock <ILogger>();

            var controller = new AccountController(serviceMock.Object, loggerMock.Object);

            // Act
            var response = controller.RegisterAndLogin(bidingModel);

            // Assert
            Assert.NotNull(response);
            Assert.IsType <OkObjectResult>(response);
            var result  = response as OkObjectResult;
            var model   = result.Value as AccountCredentialsViewModel;
            var modelId = model.UserId;

            Assert.Equal(new Guid(userId), modelId);
        }
        public void LoginUser_CalledWithRelevantInputData_ShouldReturnTokenBearer()
        {
            // Arrange
            var userCredentials = new AccountCredentialsViewModel();
            var db      = this.GetDatabase();
            var service = new AccountService(db);

            RegisterUserBindingModel bm = new RegisterUserBindingModel()
            {
                Name            = "Gosho",
                Email           = "*****@*****.**",
                Password        = "******",
                ConfirmPassword = "******"
            };

            LoginUserBindingModel loginForm = new LoginUserBindingModel()
            {
                Email    = "*****@*****.**",
                Password = "******"
            };

            // Act
            var isUserCreated = service.CreateNewUserAccount(bm);

            if (isUserCreated != null)
            {
                userCredentials = service.LoginUser(loginForm);
            }

            // Assert
            Assert.NotNull(userCredentials);
            var userId = userCredentials.UserId;

            Assert.IsType <Guid>(userId);
            Assert.NotEqual(0, userId.ToString().Length);
            var token = userCredentials.Token;

            Assert.NotEqual(0, token.Length);
        }