testes para funcção 'listar_ficheiros_unicos()'
This commit is contained in:
@ -1,7 +1,8 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import pytest
|
import pytest
|
||||||
|
import hashlib
|
||||||
|
|
||||||
from modules.scanner import listar_ficheiros
|
from modules.scanner import listar_ficheiros, listar_ficheiros_unicos
|
||||||
|
|
||||||
|
|
||||||
def criar_estrutura_testes(base_dir):
|
def criar_estrutura_testes(base_dir):
|
||||||
@ -105,3 +106,86 @@ def test_listar_ficheiros_nomes_especiais(tmp_path):
|
|||||||
nomes = [Path(f).name for f in ficheiros]
|
nomes = [Path(f).name for f in ficheiros]
|
||||||
|
|
||||||
assert "ficheiro_éxamplo-çãõ.txt" in nomes
|
assert "ficheiro_éxamplo-çãõ.txt" in nomes
|
||||||
|
|
||||||
|
|
||||||
|
def criar_ficheiro(caminho, conteudo="conteudo"):
|
||||||
|
caminho.write_text(conteudo)
|
||||||
|
|
||||||
|
|
||||||
|
def sha256_do_texto(texto: str) -> str:
|
||||||
|
return hashlib.sha256(texto.encode()).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
def test_listar_ficheiros_unicos_sem_duplicados(tmp_path):
|
||||||
|
# criar tres ficheiros diferentes
|
||||||
|
f1 = tmp_path / "a.txt"
|
||||||
|
f2 = tmp_path / "b.txt"
|
||||||
|
f3 = tmp_path / "c.txt"
|
||||||
|
criar_ficheiro(f1, "conteudo1")
|
||||||
|
criar_ficheiro(f2, "conteudo2")
|
||||||
|
criar_ficheiro(f3, "conteudo3")
|
||||||
|
|
||||||
|
resultado = listar_ficheiros_unicos(str(tmp_path))
|
||||||
|
assert isinstance(resultado, dict)
|
||||||
|
assert len(resultado) == 3 # cada ficheiro com assinatura unica
|
||||||
|
caminhos_listados = [c for caminhos in resultado.values()
|
||||||
|
for c in caminhos]
|
||||||
|
assert set(caminhos_listados) == {str(f1), str(f2), str(f3)}
|
||||||
|
|
||||||
|
|
||||||
|
def test_listar_ficheiros_unicos_com_duplicados(tmp_path):
|
||||||
|
# criar dois ficheiros iguais e um diferente
|
||||||
|
f1 = tmp_path / "x.txt"
|
||||||
|
f2 = tmp_path / "y.txt"
|
||||||
|
f3 = tmp_path / "z.txt"
|
||||||
|
criar_ficheiro(f1, "conteudo_duplicado")
|
||||||
|
criar_ficheiro(f2, "conteudo_duplicado")
|
||||||
|
criar_ficheiro(f3, "conteudo_unico")
|
||||||
|
|
||||||
|
resultado = listar_ficheiros_unicos(str(tmp_path))
|
||||||
|
assert isinstance(resultado, dict)
|
||||||
|
assert len(resultado) == 2 # apenas duas assinaturas unicas
|
||||||
|
|
||||||
|
# verificar que os ficheiros duplicados estão no mesmo grupo
|
||||||
|
duplicados = [caminhos for caminhos in resultado.values()
|
||||||
|
if len(caminhos) > 1]
|
||||||
|
assert len(duplicados) == 1
|
||||||
|
assert set(duplicados[0]) == {str(f1), str(f2)}
|
||||||
|
|
||||||
|
|
||||||
|
def test_listar_ficheiros_unicos_respeita_incluir_ocultos(tmp_path):
|
||||||
|
f1 = tmp_path / "normal.txt"
|
||||||
|
f2 = tmp_path / ".oculto.txt"
|
||||||
|
criar_ficheiro(f1, "visivel")
|
||||||
|
criar_ficheiro(f2, "oculto")
|
||||||
|
|
||||||
|
# Testar com ocultos incluídos
|
||||||
|
resultado = listar_ficheiros_unicos(str(tmp_path), incluir_ocultos=True)
|
||||||
|
caminhos_listados = [c for caminhos in resultado.values()
|
||||||
|
for c in caminhos]
|
||||||
|
assert set(caminhos_listados) == {str(f1), str(f2)}
|
||||||
|
|
||||||
|
# Testar com ocultos excluídos
|
||||||
|
resultado_sem_ocultos = listar_ficheiros_unicos(
|
||||||
|
str(tmp_path), incluir_ocultos=False
|
||||||
|
)
|
||||||
|
caminhos_listados_sem = [
|
||||||
|
c for caminhos in resultado_sem_ocultos.values() for c in caminhos
|
||||||
|
]
|
||||||
|
assert str(f2) not in caminhos_listados_sem
|
||||||
|
assert str(f1) in caminhos_listados_sem
|
||||||
|
|
||||||
|
|
||||||
|
def test_listar_ficheiros_unicos_respeita_extensoes(tmp_path):
|
||||||
|
f1 = tmp_path / "a.txt"
|
||||||
|
f2 = tmp_path / "b.jpg"
|
||||||
|
criar_ficheiro(f1)
|
||||||
|
criar_ficheiro(f2)
|
||||||
|
|
||||||
|
# Só listar ficheiros .txt
|
||||||
|
resultado = listar_ficheiros_unicos(str(tmp_path), extensoes=[".txt"])
|
||||||
|
caminhos_listados = [c for caminhos in resultado.values()
|
||||||
|
for c in caminhos]
|
||||||
|
|
||||||
|
assert str(f1) in caminhos_listados
|
||||||
|
assert str(f2) not in caminhos_listados
|
||||||
|
|||||||
Reference in New Issue
Block a user