public async Task Login_Deve_Bloquear_Usuario_Apos_Cinco_Tentativas_Incorretas()
        {
            // Arrange
            RegisterUserViewModel registroVM = UserViewModelTestsHelper.ObterInstanciaRegistroUsuario("*****@*****.**", "GMfks123$5555");

            await RegistrarUsuarioParaTestes(registroVM);

            LoginUserViewModel LoginVM     = UserViewModelTestsHelper.ObterInstanciaLoginUsuario("*****@*****.**", "Fmfks123&4322");
            HttpContent        dataRequest = ContentHelper.CreateJsonContent(LoginVM);

            // Act
            HttpResponseMessage response = null;

            for (int i = 0; i <= 4; i++)
            {
                response?.Dispose();
                response = await base.Client.PostAsync($"{CommonUri}/entrar", dataRequest);
            }

            // Assert
            var result = await ContentHelper.ExtractObject <ResponseViewModel>(response.Content);

            Assert.False(response.IsSuccessStatusCode);
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.Single(result.Errors);
            Assert.Equal("Usuário temporiariamente bloqueado por ter feito várias tentativas de entrada inválidas!", result.Errors.SingleOrDefault());
        }
        public async Task Login_Usuario_Com_Propriedades_Invalidas()
        {
            // Arrange
            LoginUserViewModel LoginVM     = UserViewModelTestsHelper.ObterInstanciaLoginUsuario("hsantos", string.Empty);
            HttpContent        dataRequest = ContentHelper.CreateJsonContent(LoginVM);

            // Act
            HttpResponseMessage response = await base.Client.PostAsync($"{CommonUri}/entrar", dataRequest);

            // Assert
            Assert.False(response.IsSuccessStatusCode);
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
        }
        public async Task Login_Usuario_Com_Credenciais_Incorretas()
        {
            // Arrange
            LoginUserViewModel LoginVM     = UserViewModelTestsHelper.ObterInstanciaLoginUsuario("*****@*****.**", "Fmfks123&4322");
            HttpContent        dataRequest = ContentHelper.CreateJsonContent(LoginVM);

            // Act
            HttpResponseMessage response = await base.Client.PostAsync($"{CommonUri}/entrar", dataRequest);

            // Assert
            var result = await ContentHelper.ExtractObject <ResponseViewModel>(response.Content);

            Assert.False(response.IsSuccessStatusCode);
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.Single(result.Errors);
            Assert.Equal("Usuário ou senha incorretos! Tente novamente.", result.Errors.SingleOrDefault());
        }
        public async Task Login_Usuario_Com_Sucesso()
        {
            // Arrange
            string email    = "*****@*****.**";
            string password = "******";

            RegisterUserViewModel registroVM = UserViewModelTestsHelper.ObterInstanciaRegistroUsuario(email, password);

            await RegistrarUsuarioParaTestes(registroVM);

            LoginUserViewModel LoginVM     = UserViewModelTestsHelper.ObterInstanciaLoginUsuario(email, password);
            HttpContent        dataRequest = ContentHelper.CreateJsonContent(LoginVM);

            // Act
            HttpResponseMessage response = await base.Client.PostAsync($"{CommonUri}/entrar", dataRequest);

            // Assert
            using var userManager = (UserManager <IdentityUser>)base.Factory.Services.GetService(typeof(UserManager <IdentityUser>));

            Assert.True(response.IsSuccessStatusCode);
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            Assert.Contains(userManager.Users.ToList(), u => u.Email == email);
        }