Skip to content

Commit

Permalink
feat(#56): Adição de testes unitários para diário
Browse files Browse the repository at this point in the history
Foi implementado testes unitários para verificar o processamento de diários, extração de fornecedores e valores monetários. Esses testes asseguram que os dados estão sendo processados corretamente e que os fornecedores e valores estão no formato esperado.
  • Loading branch information
Ana-Luiza-SC committed Jan 13, 2025
1 parent 20ba4b7 commit 95a4ee6
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 13 deletions.
Empty file added server/apps/__init__.py
Empty file.
18 changes: 18 additions & 0 deletions server/apps/diarios/migrations/0004_fornecedor_nome_fantasia.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.13 on 2025-01-13 14:51

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('diarios', '0003_fornecedor'),
]

operations = [
migrations.AddField(
model_name='fornecedor',
name='nome_fantasia',
field=models.CharField(blank=True, max_length=255, null=True),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 4.1.13 on 2025-01-13 15:56

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('diarios', '0004_fornecedor_nome_fantasia'),
]

operations = [
migrations.RemoveField(
model_name='fornecedor',
name='nome_fantasia',
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 4.1.13 on 2025-01-13 18:17

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('diarios', '0005_remove_fornecedor_nome_fantasia'),
]

operations = [
migrations.RemoveField(
model_name='fornecedor',
name='ocorrencias',
),
]
1 change: 0 additions & 1 deletion server/apps/diarios/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,4 @@ def get_valores_salvos(cls):
class Fornecedor(models.Model):
nome = models.CharField(max_length=255)
cnpj = models.CharField(max_length=18)
ocorrencias = models.IntegerField()
diario = models.ForeignKey(Diario, related_name='fornecedores', on_delete=models.CASCADE)
5 changes: 1 addition & 4 deletions server/apps/diarios/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def extrair_fornecedores(texto):
padrao_fornecedores = re.compile(r'(?:Fornecedor|Empresa|Contratado):?\s*([^\n]+)', re.IGNORECASE)
padrao_cnpj = re.compile(r'\b\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}\b', re.IGNORECASE)

fornecedores = defaultdict(lambda: {'nome': '', 'cnpj': '', 'ocorrencias': 0})
fornecedores = defaultdict(lambda: {'nome': '', 'cnpj': ''})
linhas = texto.split('\n')

for i, linha in enumerate(linhas):
Expand All @@ -78,7 +78,6 @@ def extrair_fornecedores(texto):
cnpj = "/"
fornecedores[cnpj]['nome'] = nome
fornecedores[cnpj]['cnpj'] = cnpj
fornecedores[cnpj]['ocorrencias'] += 1

return fornecedores

Expand Down Expand Up @@ -110,7 +109,6 @@ def processar_diarios(diarios):
Fornecedor.objects.create(
nome=dados['nome'],
cnpj=dados['cnpj'],
ocorrencias=dados['ocorrencias'],
diario=diario_obj
)

Expand Down Expand Up @@ -166,7 +164,6 @@ def salvar_resultados_no_banco(resultados):
fornecedores_a_inserir.append(Fornecedor(
nome=fornecedor["nome"],
cnpj=fornecedor["cnpj"],
ocorrencias=fornecedor["ocorrencias"],
diario=diario_obj
))

Expand Down
59 changes: 51 additions & 8 deletions server/apps/diarios/tests.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,51 @@
from django.test import TestCase
from .models import Diario # Certifique-se de que o caminho para models está correto

class DiarioTestCase(TestCase):
def test_diarios_salvos(self):
diarios = Diario.objects.all() # Recupera todos os registros
for diario in diarios:
print(diario.date, diario.url, diario.valor_final)
import unittest
from unittest.mock import patch, Mock
from .services import processar_diarios, extrair_fornecedores, extrair_valores

class TestDiarioServices(unittest.TestCase):
@patch("apps.diarios.services.requests.get")
def test_processar_diarios(self, mock_get):
"""Testa o processamento de diários sem fazer requisições reais."""
# Mock da resposta do requests.get
mock_response = Mock()
mock_response.status_code = 200
mock_response.iter_content = lambda chunk_size: [b"Mocked content"]
mock_get.return_value = mock_response

diarios_mock = [{
"date": "2024-01-01",
"url": "https://mock-url.com/diario.pdf",
"txt_url": "https://mock-url.com/diario.txt",
"edition": "Extraordinária",
"is_extra_edition": True,
"excerpts": "",
}]

resultados = processar_diarios(diarios_mock)

# Testa se ao menos um diário foi processado
self.assertGreater(len(resultados), 0)

def test_extrair_fornecedores(self):
"""Testa a extração básica de fornecedores."""
texto_mock = """
Fornecedor: Empresa A
CNPJ: 00.000.000/0000-00
"""

fornecedores = extrair_fornecedores(texto_mock)

# Testa se ao menos um fornecedor foi extraído
self.assertIn("00.000.000/0000-00", fornecedores)
self.assertEqual(fornecedores["00.000.000/0000-00"]["nome"], "Empresa A")

def test_extrair_valores(self):
"""Testa a extração básica de valores monetários."""
texto_mock = "Valor total: R$ 1.000,00"
valores = extrair_valores(texto_mock)

# Testa se ao menos um valor foi extraído
self.assertIn("R$ 1.000,00", valores)

if __name__ == "__main__":
unittest.main()

0 comments on commit 95a4ee6

Please sign in to comment.