-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #91 from unb-mds/66-melhorar-cobertura
Melhorar cobertura dos testes unitários
- Loading branch information
Showing
3 changed files
with
225 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,72 @@ | ||
import pytest | ||
import json | ||
import os | ||
import platform | ||
from unittest import mock | ||
from Dados.info_empresa import carregar_dados_json | ||
|
||
def test_carregar_dados_json(tmp_path): | ||
# Cria um conteúdo JSON de teste | ||
|
||
def test_carregar_dados_json_valido(tmp_path): | ||
dados_teste = [ | ||
{"Código": "123", "Empresas Contratadas": {"Empresa Contratada -1": "Empresa A", "CNPJ -1": "00.000.000/0001-00"}} | ||
] | ||
|
||
#Cria um arquivo JSON temporário usando pytest | ||
caminho_arquivo_json = tmp_path / "contratos_teste.json" | ||
with caminho_arquivo_json.open("w", encoding="utf-8") as file: | ||
json.dump(dados_teste, file) | ||
|
||
#Executa a função e verifica se os dados carregados são os esperados | ||
dados_carregados = carregar_dados_json(caminho_arquivo_json) | ||
assert dados_carregados == dados_teste | ||
|
||
# Testa se uma exceção é levantada ao tentar carregar um arquivo inexistente | ||
# with pytest.raises(FileNotFoundError): | ||
# carregar_dados_json("caminho_inexistente.json") | ||
def test_carregar_dados_json_arquivo_inexistente(): | ||
with pytest.raises(FileNotFoundError): | ||
carregar_dados_json("caminho_inexistente.json") | ||
|
||
def test_carregar_dados_json_malformado(tmp_path): | ||
caminho_arquivo_json = tmp_path / "contratos_malformado.json" | ||
with caminho_arquivo_json.open("w", encoding="utf-8") as file: | ||
file.write("{'Código': '123', 'Empresas Contratadas': 'Empresa A'}") | ||
|
||
with pytest.raises(json.JSONDecodeError): | ||
carregar_dados_json(caminho_arquivo_json) | ||
|
||
def test_carregar_dados_json_vazio(tmp_path): | ||
caminho_arquivo_json = tmp_path / "contratos_vazio.json" | ||
caminho_arquivo_json.touch() # Cria um arquivo vazio | ||
|
||
with pytest.raises(json.JSONDecodeError): | ||
carregar_dados_json(caminho_arquivo_json) | ||
|
||
def test_carregar_dados_json_estrutura_incorreta(tmp_path): | ||
dados_teste = {"Código": "123"} # Estrutura inesperada (falta chave "Empresas Contratadas") | ||
caminho_arquivo_json = tmp_path / "contratos_incorreto.json" | ||
with caminho_arquivo_json.open("w", encoding="utf-8") as file: | ||
json.dump(dados_teste, file) | ||
|
||
dados_carregados = carregar_dados_json(caminho_arquivo_json) | ||
assert dados_carregados == dados_teste # Pode mudar dependendo do que a função deve fazer | ||
|
||
def test_carregar_dados_json_permissao_negada(tmp_path): | ||
dados_teste = [{"Código": "123"}] | ||
caminho_arquivo_json = tmp_path / "contratos_permissao.json" | ||
with caminho_arquivo_json.open("w", encoding="utf-8") as file: | ||
json.dump(dados_teste, file) | ||
|
||
# Simula o PermissionError usando mock na função open | ||
with mock.patch("builtins.open", side_effect=PermissionError): | ||
with pytest.raises(PermissionError): | ||
carregar_dados_json(caminho_arquivo_json) | ||
|
||
def test_carregar_dados_json_none(): | ||
with pytest.raises(TypeError): | ||
carregar_dados_json(None) | ||
|
||
def test_carregar_dados_json_codificacao_diferente(tmp_path): | ||
dados_teste = [ | ||
{"Código": "123", "Empresas Contratadas": {"Empresa Contratada -1": "Empresa A", "CNPJ -1": "00.000.000/0001-00"}} | ||
] | ||
caminho_arquivo_json = tmp_path / "contratos_utf16.json" | ||
with caminho_arquivo_json.open("w", encoding="utf-16") as file: | ||
json.dump(dados_teste, file) | ||
|
||
with pytest.raises(UnicodeDecodeError): | ||
carregar_dados_json(caminho_arquivo_json) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,44 +1,96 @@ | ||
import pytest | ||
from Dados.info_empresa import processar_contratos | ||
|
||
def test_processar_contratos(): | ||
# Dados fictícios para simular a entrada | ||
def test_processar_contratos_dados_incompletos(): | ||
# Testa com dados incompletos, onde o CNPJ está faltando | ||
dados_teste = [ | ||
{ | ||
{ | ||
"Código": "123456", | ||
"Empresas Contratadas": { | ||
"Empresa Contratada -1": "Empresa Teste A", | ||
"CNPJ -1": "12.345.678/0001-00", | ||
# "CNPJ -1" está faltando | ||
"Valor Recebido -1": "10000.00", | ||
"Descrição -1": "Serviços prestados", | ||
"Empresa Contratada -2": "Empresa Teste B", | ||
"CNPJ -2": "98.765.432/0001-99", | ||
"Valor Recebido -2": "20000.00", | ||
"Descrição -2": "Fornecimento de produtos" | ||
"Descrição -1": "Serviços prestados" | ||
} | ||
} | ||
] | ||
# Verifica se um KeyError é levantado quando o CNPJ está faltando | ||
with pytest.raises(KeyError, match="CNPJ -1"): | ||
processar_contratos(dados_teste) | ||
|
||
|
||
def test_processar_contratos_formato_incorreto(): | ||
# Testa com dados em formato incorreto para o Valor Recebido | ||
dados_teste = [ | ||
{ | ||
"Código": "123456", | ||
"Empresas Contratadas": { | ||
"Empresa Contratada -1": "Empresa Teste A", | ||
"CNPJ -1": "12.345.678/0001-00", | ||
"Valor Recebido -1": "dez mil", # Formato incorreto | ||
"Descrição -1": "Serviços prestados" | ||
} | ||
} | ||
] | ||
|
||
# Tenta processar os contratos e verifica se o valor recebido está em formato incorreto | ||
resultado_obtido = processar_contratos(dados_teste) | ||
|
||
# Resultado esperado após processar os contratos | ||
resultado_esperado = [ | ||
# Verifica se ocorre um ValueError quando o valor recebido não pode ser convertido para float | ||
for item in resultado_obtido: | ||
with pytest.raises(ValueError, match="could not convert string to float: 'dez mil'"): | ||
float(item["Valor Recebido"]) | ||
|
||
def test_processar_contratos_valor_recebido_faltando(): | ||
# Testa com dados onde o Valor Recebido está faltando | ||
dados_teste = [ | ||
{ | ||
"Código": "123456", | ||
"Empresa Contratada": "Empresa Teste A", | ||
"CNPJ": "12.345.678/0001-00", | ||
"Valor Recebido": "10000.00", | ||
"Descrição": "Serviços prestados" | ||
}, | ||
"Empresas Contratadas": { | ||
"Empresa Contratada -1": "Empresa Teste A", | ||
"CNPJ -1": "12.345.678/0001-00", | ||
# "Valor Recebido -1" está faltando | ||
"Descrição -1": "Serviços prestados" | ||
} | ||
} | ||
] | ||
# Verifica se um KeyError é levantado quando o Valor Recebido está faltando | ||
with pytest.raises(KeyError, match="Valor Recebido -1"): | ||
processar_contratos(dados_teste) | ||
|
||
def test_processar_contratos_descricao_faltando(): | ||
# Testa com dados onde a Descrição está faltando | ||
dados_teste = [ | ||
{ | ||
"Código": "123456", | ||
"Empresa Contratada": "Empresa Teste B", | ||
"CNPJ": "98.765.432/0001-99", | ||
"Valor Recebido": "20000.00", | ||
"Descrição": "Fornecimento de produtos" | ||
"Empresas Contratadas": { | ||
"Empresa Contratada -1": "Empresa Teste A", | ||
"CNPJ -1": "12.345.678/0001-00", | ||
"Valor Recebido -1": "10000.00" | ||
# "Descrição -1" está faltando | ||
} | ||
} | ||
] | ||
|
||
# Executa a função | ||
# Verifica se um KeyError é levantado quando a Descrição está faltando | ||
with pytest.raises(KeyError, match="Descrição -1"): | ||
processar_contratos(dados_teste) | ||
|
||
def test_processar_contratos_valores_numericos(): | ||
# Testa com dados onde os valores são numericamente corretos | ||
dados_teste = [ | ||
{ | ||
"Código": "123456", | ||
"Empresas Contratadas": { | ||
"Empresa Contratada -1": "Empresa Teste A", | ||
"CNPJ -1": "12.345.678/0001-00", | ||
"Valor Recebido -1": "10000.00", | ||
"Descrição -1": "Serviços prestados" | ||
} | ||
} | ||
] | ||
# Processa os contratos e verifica se os valores numéricos estão corretos | ||
resultado_obtido = processar_contratos(dados_teste) | ||
|
||
# Verifica se o resultado obtido é igual ao esperado | ||
assert resultado_obtido == resultado_esperado | ||
# Converte os valores recebidos para float e verifica se não ocorre erro | ||
for item in resultado_obtido: | ||
assert float(item["Valor Recebido"]) == 10000.00 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters