282 lines
7.9 KiB
Python
282 lines
7.9 KiB
Python
"""
|
|
End-to-end tests for the verify command.
|
|
|
|
Tests the complete CLI workflow for the verify command, including
|
|
comparing original and processed files and verifying output format.
|
|
"""
|
|
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
from typer.testing import CliRunner
|
|
|
|
from src.main import app
|
|
|
|
runner = CliRunner()
|
|
|
|
|
|
@pytest.fixture
|
|
def output_dir(tmp_path):
|
|
"""Create a temporary output directory for processed files."""
|
|
output = tmp_path / "output"
|
|
output.mkdir()
|
|
yield output
|
|
if output.exists():
|
|
shutil.rmtree(output)
|
|
|
|
|
|
# ============== Image Tests ==============
|
|
|
|
|
|
def test_verify_command_jpeg_clean_status(output_dir):
|
|
"""Test verify command shows CLEAN status for properly scrubbed JPEG."""
|
|
from tests.conftest import get_jpg_test_file
|
|
|
|
JPG_TEST_FILE = get_jpg_test_file()
|
|
|
|
# First scrub the file
|
|
scrub_result = runner.invoke(
|
|
app,
|
|
["scrub",
|
|
JPG_TEST_FILE,
|
|
"--output",
|
|
str(output_dir)]
|
|
)
|
|
assert scrub_result.exit_code == 0
|
|
|
|
# Get the processed file path
|
|
processed_file = output_dir / f"processed_{Path(JPG_TEST_FILE).name}"
|
|
assert processed_file.exists()
|
|
|
|
# Now verify
|
|
result = runner.invoke(app, ["verify", JPG_TEST_FILE, str(processed_file)])
|
|
|
|
assert result.exit_code == 0, f"Failed with: {result.stdout}"
|
|
assert "Comparing" in result.stdout
|
|
assert "CLEAN" in result.stdout or "Removed" in result.stdout
|
|
|
|
|
|
# this test can be ran if a png with metadata is found and added to the assests folder.
|
|
# def test_verify_command_png_clean_status(output_dir):
|
|
# """Test verify command shows CLEAN status for properly scrubbed PNG."""
|
|
# from tests.conftest import get_png_test_file
|
|
|
|
# # PNG_TEST_FILE = get_png_test_file()
|
|
|
|
# # First scrub the file
|
|
# scrub_result = runner.invoke(
|
|
# app, ["scrub", PNG_TEST_FILE, "--output", str(output_dir)]
|
|
# )
|
|
|
|
# # Get the processed file path
|
|
# processed_file = output_dir / f"processed_{Path(PNG_TEST_FILE).name}"
|
|
|
|
# # Skip if scrub failed (PNG might have no metadata)
|
|
# if scrub_result.exit_code != 0 or not processed_file.exists():
|
|
# pytest.skip("PNG file had no metadata to scrub")
|
|
|
|
# # Now verify
|
|
# result = runner.invoke(app, ["verify", PNG_TEST_FILE, str(processed_file)])
|
|
|
|
# assert result.exit_code == 0, f"Failed with: {result.stdout}"
|
|
# assert "Comparing" in result.stdout
|
|
|
|
|
|
# ============== PDF Tests ==============
|
|
|
|
|
|
def test_verify_command_pdf_clean_status(output_dir):
|
|
"""Test verify command shows CLEAN status for properly scrubbed PDF."""
|
|
from tests.conftest import get_pdf_test_file
|
|
|
|
PDF_TEST_FILE = get_pdf_test_file()
|
|
|
|
# First scrub the file
|
|
scrub_result = runner.invoke(
|
|
app,
|
|
["scrub",
|
|
PDF_TEST_FILE,
|
|
"--output",
|
|
str(output_dir)]
|
|
)
|
|
assert scrub_result.exit_code == 0
|
|
|
|
# Get the processed file path
|
|
processed_file = output_dir / f"processed_{Path(PDF_TEST_FILE).name}"
|
|
assert processed_file.exists()
|
|
|
|
# Now verify
|
|
result = runner.invoke(app, ["verify", PDF_TEST_FILE, str(processed_file)])
|
|
|
|
assert result.exit_code == 0, f"Failed with: {result.stdout}"
|
|
assert "Comparing" in result.stdout
|
|
|
|
|
|
# ============== Excel Tests ==============
|
|
|
|
|
|
def test_verify_command_xlsx_clean_status(output_dir):
|
|
"""Test verify command shows CLEAN status for properly scrubbed Excel."""
|
|
from tests.conftest import get_xlsx_test_file
|
|
|
|
XLSX_TEST_FILE = get_xlsx_test_file()
|
|
|
|
# First scrub the file
|
|
scrub_result = runner.invoke(
|
|
app,
|
|
["scrub",
|
|
XLSX_TEST_FILE,
|
|
"--output",
|
|
str(output_dir)]
|
|
)
|
|
assert scrub_result.exit_code == 0
|
|
|
|
# Get the processed file path
|
|
processed_file = output_dir / f"processed_{Path(XLSX_TEST_FILE).name}"
|
|
assert processed_file.exists()
|
|
|
|
# Now verify
|
|
result = runner.invoke(app, ["verify", XLSX_TEST_FILE, str(processed_file)])
|
|
|
|
assert result.exit_code == 0, f"Failed with: {result.stdout}"
|
|
assert "Comparing" in result.stdout
|
|
|
|
|
|
# ============== PowerPoint Tests ==============
|
|
|
|
|
|
def test_verify_command_pptx_clean_status(output_dir):
|
|
"""Test verify command shows CLEAN status for properly scrubbed PowerPoint."""
|
|
from tests.conftest import get_pptx_test_file
|
|
|
|
PPTX_TEST_FILE = get_pptx_test_file()
|
|
|
|
# First scrub the file
|
|
scrub_result = runner.invoke(
|
|
app,
|
|
["scrub",
|
|
PPTX_TEST_FILE,
|
|
"--output",
|
|
str(output_dir)]
|
|
)
|
|
assert scrub_result.exit_code == 0
|
|
|
|
# Get the processed file path
|
|
processed_file = output_dir / f"processed_{Path(PPTX_TEST_FILE).name}"
|
|
assert processed_file.exists()
|
|
|
|
# Now verify
|
|
result = runner.invoke(app, ["verify", PPTX_TEST_FILE, str(processed_file)])
|
|
|
|
assert result.exit_code == 0, f"Failed with: {result.stdout}"
|
|
assert "Comparing" in result.stdout
|
|
|
|
|
|
# ============== Word Document Tests ==============
|
|
|
|
|
|
def test_verify_command_docx_clean_status(output_dir):
|
|
"""Test verify command shows CLEAN status for properly scrubbed Word doc."""
|
|
from tests.conftest import get_docx_test_file
|
|
|
|
DOCX_TEST_FILE = get_docx_test_file()
|
|
|
|
# First scrub the file
|
|
scrub_result = runner.invoke(
|
|
app,
|
|
["scrub",
|
|
DOCX_TEST_FILE,
|
|
"--output",
|
|
str(output_dir)]
|
|
)
|
|
assert scrub_result.exit_code == 0
|
|
|
|
# Get the processed file path
|
|
processed_file = output_dir / f"processed_{Path(DOCX_TEST_FILE).name}"
|
|
assert processed_file.exists()
|
|
|
|
# Now verify
|
|
result = runner.invoke(app, ["verify", DOCX_TEST_FILE, str(processed_file)])
|
|
|
|
assert result.exit_code == 0, f"Failed with: {result.stdout}"
|
|
assert "Comparing" in result.stdout
|
|
|
|
|
|
# ============== Error Tests ==============
|
|
|
|
|
|
def test_verify_command_original_file_not_found():
|
|
"""Test verify command handles missing original file."""
|
|
result = runner.invoke(
|
|
app,
|
|
["verify",
|
|
"nonexistent_file.jpg",
|
|
"also_nonexistent.jpg"]
|
|
)
|
|
|
|
assert result.exit_code != 0
|
|
|
|
|
|
def test_verify_command_processed_file_not_found():
|
|
"""Test verify command handles missing processed file."""
|
|
from tests.conftest import get_jpg_test_file
|
|
|
|
JPG_TEST_FILE = get_jpg_test_file()
|
|
|
|
result = runner.invoke(app, ["verify", JPG_TEST_FILE, "nonexistent_processed.jpg"])
|
|
|
|
assert result.exit_code != 0
|
|
|
|
|
|
# ============== Output Format Tests ==============
|
|
|
|
|
|
def test_verify_command_shows_removed_count(output_dir):
|
|
"""Test that verify command shows removed count in output."""
|
|
from tests.conftest import get_jpg_test_file
|
|
|
|
JPG_TEST_FILE = get_jpg_test_file()
|
|
|
|
# Scrub the file
|
|
runner.invoke(app, ["scrub", JPG_TEST_FILE, "--output", str(output_dir)])
|
|
processed_file = output_dir / f"processed_{Path(JPG_TEST_FILE).name}"
|
|
|
|
# Verify
|
|
result = runner.invoke(app, ["verify", JPG_TEST_FILE, str(processed_file)])
|
|
|
|
assert "Removed:" in result.stdout
|
|
|
|
|
|
def test_verify_command_shows_preserved_count(output_dir):
|
|
"""Test that verify command shows preserved count in output."""
|
|
from tests.conftest import get_jpg_test_file
|
|
|
|
JPG_TEST_FILE = get_jpg_test_file()
|
|
|
|
# Scrub the file
|
|
runner.invoke(app, ["scrub", JPG_TEST_FILE, "--output", str(output_dir)])
|
|
processed_file = output_dir / f"processed_{Path(JPG_TEST_FILE).name}"
|
|
|
|
# Verify
|
|
result = runner.invoke(app, ["verify", JPG_TEST_FILE, str(processed_file)])
|
|
|
|
assert "Preserved:" in result.stdout
|
|
|
|
|
|
def test_verify_command_shows_comparison_header(output_dir):
|
|
"""Test that verify command shows comparison header."""
|
|
from tests.conftest import get_jpg_test_file
|
|
|
|
JPG_TEST_FILE = get_jpg_test_file()
|
|
|
|
# Scrub the file
|
|
runner.invoke(app, ["scrub", JPG_TEST_FILE, "--output", str(output_dir)])
|
|
processed_file = output_dir / f"processed_{Path(JPG_TEST_FILE).name}"
|
|
|
|
# Verify
|
|
result = runner.invoke(app, ["verify", JPG_TEST_FILE, str(processed_file)])
|
|
|
|
assert "Comparing:" in result.stdout
|
|
assert Path(JPG_TEST_FILE).name in result.stdout
|