""" Regression tests for agent_performance_service.py These tests capture current behavior before extracting shared logic. """ import pytest from unittest.mock import Mock, AsyncMock, patch from datetime import datetime, timezone from uuid import uuid4 from app.services.agent_performance_service import MetaLearningEngine @pytest.mark.unit class TestMetaLearningEngine: """Test MetaLearningEngine class""" def test_initialization(self): """Test MetaLearningEngine initialization""" engine = MetaLearningEngine() assert "model_agnostic_meta_learning" in engine.meta_algorithms assert "reptile" in engine.meta_algorithms assert "meta_sgd" in engine.meta_algorithms assert "prototypical_networks" in engine.meta_algorithms assert "fast_adaptation" in engine.adaptation_strategies assert "gradual_adaptation" in engine.adaptation_strategies assert "transfer_adaptation" in engine.adaptation_strategies assert "multi_task_adaptation" in engine.adaptation_strategies assert len(engine.performance_metrics) == 4 def test_meta_algorithms_callable(self): """Test that meta algorithms are callable methods""" engine = MetaLearningEngine() for algo_name, algo_func in engine.meta_algorithms.items(): assert callable(algo_func), f"{algo_name} is not callable" def test_adaptation_strategies_callable(self): """Test that adaptation strategies are callable methods""" engine = MetaLearningEngine() for strategy_name, strategy_func in engine.adaptation_strategies.items(): assert callable(strategy_func), f"{strategy_name} is not callable" @pytest.mark.asyncio async def test_create_meta_learning_model(self): """Test creating a meta-learning model""" mock_session = Mock() mock_session.add = Mock() mock_session.commit = Mock() mock_session.refresh = Mock() engine = MetaLearningEngine() with patch.object(engine, 'generate_meta_features', return_value={"feature1": "value1"}): with patch.object(engine, 'setup_task_distributions', return_value={"dist1": "value1"}): with patch('asyncio.create_task'): model = await engine.create_meta_learning_model( session=mock_session, model_name="test_model", base_algorithms=["algorithm1"], meta_strategy="fast_adaptation", adaptation_targets=["target1"] ) assert model.model_name == "test_model" assert model.base_algorithms == ["algorithm1"] assert model.status == "training" mock_session.add.assert_called_once() mock_session.commit.assert_called_once() @pytest.mark.asyncio async def test_train_meta_model_not_found(self): """Test training a model that doesn't exist""" mock_session = Mock() mock_session.execute = Mock(return_value=Mock(first=Mock(return_value=None))) engine = MetaLearningEngine() with pytest.raises(ValueError, match="Meta-learning model .* not found"): await engine.train_meta_model(mock_session, "nonexistent_model_id") def test_generate_meta_features(self): """Test meta features generation""" engine = MetaLearningEngine() # This is a placeholder test - the actual implementation would need to be tested # once we understand the full behavior features = engine.generate_meta_features(["target1", "target2"]) assert isinstance(features, dict) def test_setup_task_distributions(self): """Test task distributions setup""" engine = MetaLearningEngine() # This is a placeholder test - the actual implementation would need to be tested # once we understand the full behavior distributions = engine.setup_task_distributions(["target1", "target2"]) assert isinstance(distributions, dict)