import initial
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from PIL import Image
|
||||
from unittest.mock import patch
|
||||
from logimage.cli.main import main
|
||||
from logimage.infrastructure.image.pexels_source import PexelsImageSource
|
||||
from logimage.infrastructure.image.unsplash_source import UnsplashImageSource
|
||||
from logimage.infrastructure.image.local_file_source import LocalFileImageSource
|
||||
|
||||
|
||||
def _make_png_file(tmp_path: Path) -> Path:
|
||||
img = Image.new("RGB", (50, 50), color=(200, 100, 50))
|
||||
path = tmp_path / "icon.png"
|
||||
img.save(path, format="PNG")
|
||||
return path
|
||||
|
||||
|
||||
def test_pexels_key_uses_pexels_source(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
monkeypatch.setenv("PEXELS_API_KEY", "pexels-test-key")
|
||||
monkeypatch.delenv("UNSPLASH_ACCESS_KEY", raising=False)
|
||||
|
||||
with patch("logimage.cli.main.GeneratePuzzlesUseCase") as mock_uc, \
|
||||
patch("logimage.cli.main.load_dotenv"), \
|
||||
patch("sys.argv", ["logimage", "--count", "1"]):
|
||||
mock_uc.return_value.execute.return_value = None
|
||||
main()
|
||||
|
||||
assert isinstance(mock_uc.call_args.kwargs["image_source"], PexelsImageSource)
|
||||
|
||||
|
||||
def test_unsplash_key_uses_unsplash_source(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
monkeypatch.delenv("PEXELS_API_KEY", raising=False)
|
||||
monkeypatch.setenv("UNSPLASH_ACCESS_KEY", "unsplash-test-key")
|
||||
|
||||
with patch("logimage.cli.main.GeneratePuzzlesUseCase") as mock_uc, \
|
||||
patch("logimage.cli.main.load_dotenv"), \
|
||||
patch("sys.argv", ["logimage", "--count", "1"]):
|
||||
mock_uc.return_value.execute.return_value = None
|
||||
main()
|
||||
|
||||
assert isinstance(mock_uc.call_args.kwargs["image_source"], UnsplashImageSource)
|
||||
|
||||
|
||||
def test_pexels_takes_priority_over_unsplash(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
monkeypatch.setenv("PEXELS_API_KEY", "pexels-test-key")
|
||||
monkeypatch.setenv("UNSPLASH_ACCESS_KEY", "unsplash-test-key")
|
||||
|
||||
with patch("logimage.cli.main.GeneratePuzzlesUseCase") as mock_uc, \
|
||||
patch("logimage.cli.main.load_dotenv"), \
|
||||
patch("sys.argv", ["logimage", "--count", "1"]):
|
||||
mock_uc.return_value.execute.return_value = None
|
||||
main()
|
||||
|
||||
assert isinstance(mock_uc.call_args.kwargs["image_source"], PexelsImageSource)
|
||||
|
||||
|
||||
def test_local_image_flag_uses_local_source(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
icon = _make_png_file(tmp_path)
|
||||
|
||||
with patch("logimage.cli.main.GeneratePuzzlesUseCase") as mock_uc, \
|
||||
patch("logimage.cli.main.load_dotenv"), \
|
||||
patch("sys.argv", ["logimage", "--local-image", str(icon)]):
|
||||
mock_uc.return_value.execute.return_value = None
|
||||
main()
|
||||
|
||||
assert isinstance(mock_uc.call_args.kwargs["image_source"], LocalFileImageSource)
|
||||
|
||||
|
||||
def test_local_image_takes_priority_over_api_keys(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
icon = _make_png_file(tmp_path)
|
||||
monkeypatch.setenv("PEXELS_API_KEY", "pexels-test-key")
|
||||
monkeypatch.setenv("UNSPLASH_ACCESS_KEY", "unsplash-test-key")
|
||||
|
||||
with patch("logimage.cli.main.GeneratePuzzlesUseCase") as mock_uc, \
|
||||
patch("logimage.cli.main.load_dotenv"), \
|
||||
patch("sys.argv", ["logimage", "--local-image", str(icon)]):
|
||||
mock_uc.return_value.execute.return_value = None
|
||||
main()
|
||||
|
||||
assert isinstance(mock_uc.call_args.kwargs["image_source"], LocalFileImageSource)
|
||||
|
||||
|
||||
def test_no_key_exits_with_error(monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str]) -> None:
|
||||
monkeypatch.delenv("PEXELS_API_KEY", raising=False)
|
||||
monkeypatch.delenv("UNSPLASH_ACCESS_KEY", raising=False)
|
||||
|
||||
with patch("logimage.cli.main.load_dotenv"), \
|
||||
patch("sys.argv", ["logimage", "--count", "1"]):
|
||||
with pytest.raises(SystemExit) as exc_info:
|
||||
main()
|
||||
|
||||
assert exc_info.value.code == 1
|
||||
captured = capsys.readouterr()
|
||||
assert "PEXELS_API_KEY" in captured.err
|
||||
assert "UNSPLASH_ACCESS_KEY" in captured.err
|
||||
Reference in New Issue
Block a user