Repository: interlegis/sapl

Issue:
O sapl "permite cadastrar um documento acessório" sem anexar o arquivo
<!--- Forneça um resumo geral da _issue_ no título acima -->
O sapl "permite cadastrar um documento acessório" sem anexar o arquivo
## 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. -->
Não permitir um envio de um formulário sem o arquivo
## 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. -->
Permite o envio do formulário sem arquivo
## Possível Solução
<!--- Não é obrigatório, mas sugira uma possível correção/razão para o bug -->
<!--- ou ideias de como implementar a adição/mudança. -->

## 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.
2.
3.
4.

## Contexto
<!--- Como esse problema o afeta? O que você está tentando realizar? -->
<!--- Fornecer o contexto nos ajuda a encontrar uma solução que seja mais útil no mundo real -->

## Imagens do Ocorrido
<!--- Representação visual em vídeo ou imagem do ocorrido -->
<!--- Se está descrevendo um bug poste imagens ou vídeos na reprodução do bug citado, caso se aplique -->
![ANEXOSEMARQUIVO](https://user-images.githubusercontent.com/2423695/109825042-2f539c00-7c18-11eb-9cf9-7ed0dc61ad83.png)

## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_):
* Nome e versão do navegador:
* Nome e versão do Sistema Operacional (desktop ou mobile):
* Link para o seu projeto (Caso de fork deste projeto):



Discussion:

Resolving patch:
diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py
--- a/sapl/comissoes/forms.py
+++ b/sapl/comissoes/forms.py
@@ -514,10 +514,16 @@ def clean(self):
         if not self.is_valid():
             return self.cleaned_data
 
-        arquivo = self.cleaned_data.get('arquivo', False)
+        arquivo = self.cleaned_data.get('arquivo')
 
         if arquivo:
             validar_arquivo(arquivo, "Texto Integral")
+        else:
+            ## TODO: definir arquivo no form e preservar o nome do campo
+            ## que gerou a mensagem de erro.
+            ## arquivo = forms.FileField(required=True, label="Texto Integral")
+            nome_arquivo = self.fields['arquivo'].label
+            raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}')
 
         return self.cleaned_data
 
@@ -540,9 +546,15 @@ def clean(self):
         if not self.is_valid():
             return self.cleaned_data
 
-        arquivo = self.cleaned_data.get('arquivo', False)
+        arquivo = self.cleaned_data.get('arquivo')
 
         if arquivo:
             validar_arquivo(arquivo, "Texto Integral")
+        else:
+            ## TODO: definir arquivo no form e preservar o nome do campo
+            ## que gerou a mensagem de erro.
+            ## arquivo = forms.FileField(required=True, label="Texto Integral")
+            nome_arquivo = self.fields['arquivo'].label
+            raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}')
 
         return self.cleaned_data
diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py
--- a/sapl/materia/forms.py
+++ b/sapl/materia/forms.py
@@ -343,10 +343,16 @@ def clean(self):
         if not self.is_valid():
             return self.cleaned_data
 
-        arquivo = self.cleaned_data.get('arquivo', False)
+        arquivo = self.cleaned_data.get('arquivo')
 
         if arquivo:
             validar_arquivo(arquivo, "Texto Integral")
+        else:
+            ## TODO: definir arquivo no form e preservar o nome do campo
+            ## que gerou a mensagem de erro.
+            ## arquivo = forms.FileField(required=True, label="Texto Integral")
+            nome_arquivo = self.fields['arquivo'].label
+            raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}')
 
         return self.cleaned_data
 
diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py
--- a/sapl/protocoloadm/forms.py
+++ b/sapl/protocoloadm/forms.py
@@ -641,10 +641,16 @@ def clean(self):
         if not self.is_valid():
             return self.cleaned_data
 
-        arquivo = self.cleaned_data.get('arquivo', False)
+        arquivo = self.cleaned_data.get('arquivo')
 
         if arquivo:
             validar_arquivo(arquivo, "Arquivo")
+        else:
+            ## TODO: definir arquivo no form e preservar o nome do campo
+            ## que gerou a mensagem de erro.
+            ## arquivo = forms.FileField(required=True, label="Texto Integral")
+            nome_arquivo = self.fields['arquivo'].label
+            raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}')
 
         return self.cleaned_data
 
@@ -1175,10 +1181,17 @@ def clean(self):
                                             ' documento vinculado'
                                             % (numero_protocolo, ano_protocolo)))
 
-        texto_integral = self.cleaned_data.get('texto_integral', False)
+        texto_integral = self.cleaned_data.get('texto_integral')
 
         if texto_integral:
             validar_arquivo(texto_integral, "Texto Integral")
+        else:
+            ## TODO: definir arquivo no form e preservar o nome do campo
+            ## que gerou a mensagem de erro.
+            ## texto_integral = forms.FileField(required=True, label="Texto Integral")
+            nome_arquivo = self.fields['texto_integral'].label
+            raise ValidationError(f'Favor anexar arquivo em {nome_arquivo}')
+
 
         return self.cleaned_data
 


Test patch:
diff --git a/sapl/materia/tests/test_materia.py b/sapl/materia/tests/test_materia.py
--- a/sapl/materia/tests/test_materia.py
+++ b/sapl/materia/tests/test_materia.py
@@ -324,6 +324,10 @@ def test_documento_acessorio_submit(admin_client):
     tipo = baker.make(TipoDocumento,
                       descricao='Teste')
 
+    arquivo = SimpleUploadedFile("file.pdf",
+                                 b'conteudo do arquivo',
+                                 content_type="application/pdf")
+
     # Testa POST
     response = admin_client.post(reverse(
         'sapl.materia:documentoacessorio_create',
@@ -332,6 +336,7 @@ def test_documento_acessorio_submit(admin_client):
          'nome': 'teste_nome',
          'data_materia': '2016-03-21',
          'autor': autor,
+         'arquivo': arquivo,
          'ementa': 'teste_ementa',
          'data': '2016-03-21',
          'salvar': 'salvar'},