|
import pytest |
|
from unittest.mock import patch, MagicMock |
|
from found_protocol.pipeline import FoundProtocolPipeline |
|
|
|
@pytest.fixture |
|
def mock_genai_models(): |
|
with patch('google.generativeai.GenerativeModel') as mock_model_class: |
|
mock_vision = MagicMock() |
|
mock_vision.generate_content.return_value.text = "Mock vision description." |
|
|
|
mock_f1 = MagicMock() |
|
mock_f1.generate_content.return_value.text = '{"cli_output": "[MOCK F1] Analysis.", "detected_concepts": [], "narrative_impact": "Mock."}' |
|
|
|
mock_f2 = MagicMock() |
|
mock_f2.generate_content.return_value.text = '{"cli_output": "[MOCK F2] Compilation.", "emotional_state": "mock", "system_action": "Mock."}' |
|
|
|
def mock_side_effect(model_name, **kwargs): |
|
if 'vision' in model_name: return mock_vision |
|
if 'FOUND-1' in kwargs.get('system_instruction', ''): return mock_f1 |
|
if 'FOUND-2' in kwargs.get('system_instruction', ''): return mock_f2 |
|
return MagicMock() |
|
|
|
mock_model_class.side_effect = mock_side_effect |
|
yield mock_model_class |
|
|
|
def test_pipeline_initialization(mock_genai_models): |
|
"""Tests if the pipeline initializes correctly.""" |
|
pipeline = FoundProtocolPipeline(gemini_api_key="TEST_KEY") |
|
assert pipeline is not None |
|
assert "INIT" in pipeline.state.memory_log[0] |
|
|
|
def test_pipeline_run_mocked(tmp_path, mock_genai_models): |
|
"""Tests a full run with mocked API calls.""" |
|
dummy_video = tmp_path / "dummy.mp4" |
|
dummy_video.write_bytes(b'dummy data') |
|
|
|
with patch('cv2.VideoCapture') as mock_cap_class: |
|
mock_cap = MagicMock() |
|
mock_cap.get.return_value = 100 |
|
mock_cap.read.return_value = (True, "fake_frame") |
|
mock_cap_class.return_value = mock_cap |
|
|
|
pipeline = FoundProtocolPipeline(gemini_api_key="TEST_KEY") |
|
result = pipeline.run(str(dummy_video)) |
|
|
|
assert "error" not in result |
|
assert "found1_output" in result |
|
assert isinstance(result['found1_output'], dict) |
|
assert "cli_output" in result['found1_output'] |
|
assert "[MOCK F1]" in result['found1_output']['cli_output'] |
|
|