ruff and black
Tests / test_and_lint (push) Successful in 13s

This commit is contained in:
2026-10-02 14:02:39 +02:00
parent 9047d11123
commit dff27fb9d6
+26 -16
View File
@@ -1,40 +1,46 @@
from pathlib import Path
from unittest.mock import patch
import pytest import pytest
from typer.testing import CliRunner from typer.testing import CliRunner
from unittest.mock import patch, MagicMock
from pathlib import Path
from photools3.cli import app from photools3.cli import app
runner = CliRunner() runner = CliRunner()
@pytest.fixture @pytest.fixture
def mock_photo_logic(tmp_path): def mock_photo_logic(tmp_path):
"""Fixture to mock the core logic of keywords command.""" """Fixture to mock the core logic of keywords command."""
with patch("photools3.cli.LlmSessionCaptionsAndKeywords") as mocked_session, \ with (
patch("photools3.cli.Photo") as mocked_photo: patch("photools3.cli.LlmSessionCaptionsAndKeywords") as mocked_session,
patch("photools3.cli.Photo") as mocked_photo,
):
# Configure session mock # Configure session mock
session_instance = mocked_session.return_value session_instance = mocked_session.return_value
session_instance.call.return_value = { session_instance.call.return_value = {
"caption": "A beautiful test image", "caption": "A beautiful test image",
"args": ["test", "mock", "image"] # Wait, the code uses 'tags' "args": ["test", "mock", "image"], # Wait, the code uses 'tags'
} }
# Let me re-check the code in cli.py # Let me re-check the code in cli.py
# result.get("tags", []) # result.get("tags", [])
session_instance.call.return_value = { session_instance.call.return_value = {
"caption": "A beautiful test image", "caption": "A beautiful test image",
"tags": ["test", "mock", "image"] "tags": ["test", "mock", "image"],
} }
# Configure photo mock # Configure photo mock
photo_instance = mocked_photo.return_value photo_instance = mocked_photo.return_value
photo_instance.path = tmp_path / "test_image.jpg" photo_instance.path = tmp_path / "test_image.jpg"
yield { yield {
"session": session_instance, "session": session_instance,
"photo_class": mocked_photo, "photo_class": mocked_photo,
"photo_instance": photo_instance "photo_instance": photo_instance,
} }
@pytest.fixture @pytest.fixture
def dummy_file(tmp_path): def dummy_file(tmp_path):
"""Fixture to create a dummy file for CLI testing.""" """Fixture to create a dummy file for CLI testing."""
@@ -42,39 +48,43 @@ def dummy_file(tmp_path):
dummy_path.write_text("dummy content") dummy_path.write_text("dummy content")
return dummy_path return dummy_path
def test_keywords_command_success(mock_photo_logic, dummy_file): def test_keywords_command_success(mock_photo_logic, dummy_file):
"""Test the 'keywords' command with a valid file path.""" """Test the 'keywords' command with a valid file path."""
# Ensure the mock photo instance points to our dummy file # Ensure the mock photo instance points to our dummy file
mock_photo_logic["photo_class"].return_value.path = dummy_file mock_photo_logic["photo_class"].return_value.path = dummy_file
result = runner.invoke(app, ["keywords", str(dummy_file)]) result = runner.invoke(app, ["keywords", str(dummy_file)])
assert result.exit_code == 0 assert result.exit_code == 0
assert "Processing: " in result.stdout assert "Processing: " in result.stdout
assert "Caption: A beautiful test image" in result.stdout assert "Caption: A beautiful test image" in result.stdout
assert "Tags: test, mock, image" in result.stdout assert "Tags: test, mock, image" in result.stdout
def test_keywords_command_file_not_found(): def test_keywords_command_file_not_found():
"""Test the 'keywords' command with a non-existent file path.""" """Test the 'keywords' command with a non-existent file path."""
non_existent_file = Path("non_existent_file.jpg") non_existent_file = Path("non_existent_file.jpg")
result = runner.invoke(app, ["keywords", str(non_existent_file)]) result = runner.invoke(app, ["keywords", str(non_existent_file)])
assert result.exit_code == 1 assert result.exit_code == 1
assert f"Error: File '{non_existent_file}' does not exist." in result.stderr assert f"Error: File '{non_existent_file}' does not exist." in result.stderr
def test_keywords_command_error_during_processing(mock_photo_logic, dummy_file): def test_keywords_command_error_during_processing(mock_photo_logic, dummy_file):
"""Test the 'keywords' command when an exception occurs during processing.""" """Test the 'keywords' command when an exception occurs during processing."""
# Configure the session mock to raise an exception # Configure the session mock to raise an exception
mock_photo_logic["session"].call.side_effect = Exception("LLM error") mock_photo_logic["session"].call.side_effect = Exception("LLM error")
result = runner.invoke(app, ["keywords", str(dummy_file)]) result = runner.invoke(app, ["keywords", str(dummy_file)])
assert result.exit_code == 1 assert result.exit_code == 1
assert "Error processing image: LLM error" in result.stderr assert "Error processing image: LLM error" in result.stderr
def test_version_command(): def test_version_command():
"""Test the --version option.""" """Test the --version option."""
result = runner.invoke(app, ["--version"]) result = runner.invoke(app, ["--version"])
assert result.exit_code == 0 assert result.exit_code == 0
assert "photools3 version 0.1.0" in result.stdout assert "photools3 version 0.1.0" in result.stdout