diff --git a/tests/test_forensics.py b/tests/test_forensics.py index 2281675..b105088 100644 --- a/tests/test_forensics.py +++ b/tests/test_forensics.py @@ -6,7 +6,7 @@ import sys from click.testing import CliRunner from ctf.utils import load_config, active_categories from ctf.forensics import get_metadata -from ctf.cli_forensics import forensics_group, inspect +from ctf.cli_forensics import forensics_group, metadata # Define the persistent test environment path TEST_ENV = Path("tests/env") @@ -230,9 +230,9 @@ def test_inspect_extended_attributes(): # --- CLI Validation Tests --- -def test_forensics_inspect_cli_success(): +def test_forensics_metadata_cli_success(): """ - Verifies that 'forensics inspect' successfully runs via the CLI and prints + Verifies that 'forensics metadata' successfully runs via the CLI and prints the metadata in a formatted table. """ runner = CliRunner() @@ -240,7 +240,7 @@ def test_forensics_inspect_cli_success(): with open(test_file, "wb") as f: f.write(b"\x89PNG\r\n\x1a\n") - result = runner.invoke(forensics_group, ["inspect", str(test_file)]) + result = runner.invoke(forensics_group, ["metadata", str(test_file)]) assert result.exit_code == 0 assert "Metadata: test_file.png" in result.output assert "Size" in result.output @@ -248,25 +248,9 @@ def test_forensics_inspect_cli_success(): assert "Detected Type" in result.output assert "PNG Image" in result.output -def test_root_inspect_cli_success(): +def test_nested_metadata_cli_success(): """ - Verifies that 'ctf inspect' successfully runs at the root level and prints - the metadata in a formatted table. - """ - from ctf.main import cli - runner = CliRunner() - test_file = TEST_ENV / "test_file_root.png" - with open(test_file, "wb") as f: - f.write(b"\x89PNG\r\n\x1a\n") - - result = runner.invoke(cli, ["inspect", str(test_file)]) - assert result.exit_code == 0 - assert "Metadata: test_file_root.png" in result.output - assert "PNG Image" in result.output - -def test_nested_inspect_cli_success(): - """ - Verifies that 'ctf forensics inspect' successfully runs via the root CLI. + Verifies that 'ctf forensics metadata' successfully runs via the root CLI. """ from ctf.main import cli runner = CliRunner() @@ -274,17 +258,17 @@ def test_nested_inspect_cli_success(): with open(test_file, "wb") as f: f.write(b"\x89PNG\r\n\x1a\n") - result = runner.invoke(cli, ["forensics", "inspect", str(test_file)]) + result = runner.invoke(cli, ["forensics", "metadata", str(test_file)]) assert result.exit_code == 0 assert "Metadata: test_file_nested.png" in result.output assert "PNG Image" in result.output -def test_forensics_inspect_cli_missing_file(): +def test_forensics_metadata_cli_missing_file(): """ Verifies that the CLI fails gracefully when a non-existent file path is specified. """ runner = CliRunner() - result = runner.invoke(forensics_group, ["inspect", "non_existent_file.png"]) + result = runner.invoke(forensics_group, ["metadata", "non_existent_file.png"]) assert result.exit_code != 0 assert "does not exist" in result.output @@ -340,18 +324,18 @@ def test_exif_cli_options(): test_file = TEST_ENV / "mock_exif_image.png" # Verify mutual exclusion error - result_err = runner.invoke(cli, ["inspect", "-i", "-e", str(test_file)]) + result_err = runner.invoke(cli, ["forensics", "metadata", "-i", "-e", str(test_file)]) assert result_err.exit_code != 0 assert "Cannot specify more than one" in result_err.output # Verify --inode hides EXIF data table - result_inode = runner.invoke(cli, ["inspect", "-i", str(test_file)]) + result_inode = runner.invoke(cli, ["forensics", "metadata", "-i", str(test_file)]) assert result_inode.exit_code == 0 assert "Metadata: mock_exif_image.png" in result_inode.output assert "EXIF Metadata" not in result_inode.output # Verify --exif hides POSIX table but displays EXIF data table - result_exif = runner.invoke(cli, ["inspect", "-e", str(test_file)]) + result_exif = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)]) assert result_exif.exit_code == 0 assert "Metadata: mock_exif_image.png" not in result_exif.output assert "EXIF Metadata" in result_exif.output @@ -391,7 +375,7 @@ def test_exif_cli_options_warning(): with open(test_file, "wb") as f: f.write(b"\x89PNG\r\n\x1a\n") - result = runner.invoke(cli, ["inspect", "-e", str(test_file)]) + result = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)]) assert result.exit_code == 0 assert "No EXIF or comment metadata found" in result.output @@ -410,7 +394,7 @@ def test_exif_cli_comment_only(): with open(test_file, "wb") as f: f.write(mock_jpeg) - result = runner.invoke(cli, ["inspect", "-e", str(test_file)]) + result = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)]) assert result.exit_code == 0 assert "Comment" in result.output assert "flag{comment_only}" in result.output @@ -455,7 +439,7 @@ def test_adobe_xmp_cli(): runner = CliRunner() test_file = TEST_ENV / "mock_xmp.jpg" - result = runner.invoke(cli, ["inspect", "-e", str(test_file)]) + result = runner.invoke(cli, ["forensics", "metadata", "-e", str(test_file)]) assert result.exit_code == 0 assert "EXIF Metadata" in result.output assert "cc:license" in result.output @@ -510,19 +494,19 @@ def test_jpeg_iptc_parsing(): def test_cli_physical_option(): """ - Verifies the ctf inspect CLI supports -p/--physical and mutual exclusion rules. + Verifies the ctf forensics metadata CLI supports -p/--physical and mutual exclusion rules. """ from ctf.main import cli runner = CliRunner() test_file = TEST_ENV / "mock_physical.jpg" # Mutual exclusion check - result_err = runner.invoke(cli, ["inspect", "-p", "-e", str(test_file)]) + result_err = runner.invoke(cli, ["forensics", "metadata", "-p", "-e", str(test_file)]) assert result_err.exit_code != 0 assert "Cannot specify more than one" in result_err.output # Physical view check - result_phys = runner.invoke(cli, ["inspect", "-p", str(test_file)]) + result_phys = runner.invoke(cli, ["forensics", "metadata", "-p", str(test_file)]) assert result_phys.exit_code == 0 assert "Physical Metadata" in result_phys.output assert "Image Size" in result_phys.output @@ -610,9 +594,9 @@ def test_adobe_xmp_formatting(): assert meta.exif_data.get("exif:EmptyAttr") == "exif:Value" assert "rdf:Description" not in meta.exif_data -def test_inspect_decoded_hints_cli(): +def test_metadata_decoded_hints_cli(): """ - Verifies that inspect command successfully decodes and prints hex/base64 encoded metadata hints. + Verifies that metadata command successfully decodes and prints hex/base64 encoded metadata hints. """ from ctf.main import cli runner = CliRunner() @@ -627,7 +611,7 @@ def test_inspect_decoded_hints_cli(): with open(test_file, "wb") as f: f.write(mock_jpeg) - result = runner.invoke(cli, ["inspect", str(test_file)]) + result = runner.invoke(cli, ["forensics", "metadata", str(test_file)]) assert result.exit_code == 0 assert "Decoded Metadata Hints" in result.output assert "Comment" in result.output