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 Registrar_Usuario_Com_Propriedades_Invalidas(string email, string password)
        {
            // Arrange
            RegisterUserViewModel registroVM  = UserViewModelTestsHelper.ObterInstanciaRegistroUsuario(email, password);
            HttpContent           dataRequest = ContentHelper.CreateJsonContent(registroVM);

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

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

            Assert.False(response.IsSuccessStatusCode);
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.Empty(userManager.Users.ToList());
        }
        public async Task Registrar_Usuario_Com_Sucesso()
        {
            // Arrange
            RegisterUserViewModel registroVM  = UserViewModelTestsHelper.ObterInstanciaRegistroUsuario("*****@*****.**", "Dale%LoL5424633");
            HttpContent           dataRequest = ContentHelper.CreateJsonContent(registroVM);

            // Act
            HttpResponseMessage response = await base.Client.PostAsync($"{CommonUri}/registrar", 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.Single(userManager.Users.ToList());
            Assert.Contains(userManager.Users.ToList(), u => u.Email == "*****@*****.**");
        }
        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());
        }