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']