Repository: interlegis/sapl

Issue:
Usuário não criado e erro não informado ao tentar criar usuário
<!--- Forneça um resumo geral da _issue_ no título acima -->

## Comportamento Esperado
<!--- Se você está descrevendo um _bug_, conte-nos o que deveria acontecer. -->
<!--- Se você está sugerindo uma mudança/melhoria, conte-nos como deve funcionar. -->
Ao criar um usuário, devem ser mostrado todos os erros encontrados como motivo da não criação do usuário.

## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->
Ao tentar criar um usuário sem nenhum campo Roles marcado, o sistema não cria o usuário, e também não informa nenhum erro ao usuário.


## Passos para Reproduzir (para bugs)
<!--- Forneça um link para um exemplo, ou um conjunto de passos inequívocos -->
<!--- para reproduzir esse bug. Inclua código para reproduzir, se relevante. -->
1. Em Sistema - > Administração de usuários
2. Tentar criar um usuário
3. Preencher os campos obrigatórios, mas não inserir nenhuma Role e salvar

## Imagens do Ocorrido
<!--- Representação visual em vídeo ou imagem do ocorrido -->
<!--- Se está descrevendo um bug poste imagens ou vídeos na repordução do bug citado, caso se aplique -->
![screenshot from 2019-02-26 11-53-41](https://user-images.githubusercontent.com/20192488/53421880-34dcd280-39bd-11e9-8889-ddb6b81279c6.png)




Discussion:

Resolving patch:
diff --git a/sapl/base/forms.py b/sapl/base/forms.py
--- a/sapl/base/forms.py
+++ b/sapl/base/forms.py
@@ -84,7 +84,7 @@ class Meta:
                   'password1', 'password2', 'user_active', 'roles']
 
     def clean(self):
-        super(UsuarioCreateForm, self).clean()
+        super().clean()
 
         if not self.is_valid():
             return self.cleaned_data
@@ -99,7 +99,7 @@ def clean(self):
 
     def __init__(self, *args, **kwargs):
 
-        super(UsuarioCreateForm, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
 
         row0 = to_row([('username', 12)])
 
diff --git a/sapl/base/views.py b/sapl/base/views.py
--- a/sapl/base/views.py
+++ b/sapl/base/views.py
@@ -1329,17 +1329,19 @@ class CreateUsuarioView(PermissionRequiredMixin, CreateView):
     model = get_user_model()
     form_class = UsuarioCreateForm
     success_message = 'Usuário criado com sucesso!'
+    fail_message = 'Usuário não criado!'
     permission_required = ('base.add_appconfig',)
 
     def get_success_url(self):
         return reverse('sapl.base:usuario')
 
     def form_valid(self, form):
-
         data = form.cleaned_data
 
         new_user = get_user_model().objects.create(
-            username=data['username'], email=data['email'])
+            username=data['username'],
+            email=data['email']
+        )
         new_user.first_name = data['firstname']
         new_user.last_name = data['lastname']
         new_user.set_password(data['password1'])
@@ -1354,6 +1356,10 @@ def form_valid(self, form):
         messages.success(self.request, self.success_message)
         return HttpResponseRedirect(self.get_success_url())
 
+    def form_invalid(self, form):
+        messages.error(self.request, self.fail_message)
+        return super().form_invalid(form)
+
 
 class DeleteUsuarioView(PermissionRequiredMixin, DeleteView):
     model = get_user_model()


Test patch: