test_cleaned_api.py 4.98 KB
#!/usr/bin/env python3
"""
测试清理后的API行为
验证用户不再需要传递enable_translation等参数
"""

import sys
import os

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

def test_cleaned_api():
    """测试清理后的API行为"""
    print("🧪 测试清理后的API行为")
    print("=" * 60)

    try:
        from api.models import SearchRequest
        from search.searcher import Searcher
        from config.config_loader import ConfigLoader
        from context.request_context import create_request_context

        # 测试API模型不再包含内部参数
        print("📝 测试API模型...")

        # 创建搜索请求
        search_request = SearchRequest(
            query="消防",
            size=10,
            from_=0,
            filters=None,
            min_score=None
        )

        print(f"✅ SearchRequest创建成功:")
        print(f"  - query: {search_request.query}")
        print(f"  - size: {search_request.size}")
        print(f"  - from_: {search_request.from_}")
        print(f"  - filters: {search_request.filters}")
        print(f"  - min_score: {search_request.min_score}")

        # 验证不再包含内部参数
        print(f"\n🚫 验证内部参数已移除:")
        internal_params = ['enable_translation', 'enable_embedding', 'enable_rerank']
        for param in internal_params:
            if hasattr(search_request, param):
                print(f"  ❌ {param} 仍然存在")
                return False
            else:
                print(f"  ✅ {param} 已移除")

        # 测试搜索器使用配置默认值
        print(f"\n🔧 测试搜索器使用配置默认值...")

        loader = ConfigLoader()
        config = loader.load_customer_config("customer1")

        print(f"✅ 配置默认值:")
        print(f"  - enable_translation: {config.query_config.enable_translation}")
        print(f"  - enable_text_embedding: {config.query_config.enable_text_embedding}")

        # 创建模拟搜索器测试
        class MockESClient:
            def search(self, **kwargs):
                return {
                    "hits": {"hits": [], "total": {"value": 0}, "max_score": 0.0},
                    "took": 15
                }

        es_client = MockESClient()
        searcher = Searcher(config, es_client)

        # 测试搜索器方法签名
        import inspect
        search_signature = inspect.signature(searcher.search)
        search_params = list(search_signature.parameters.keys())

        print(f"\n📋 搜索器方法参数:")
        for param in search_params:
            print(f"  - {param}")

        # 验证不再包含内部参数
        print(f"\n🚫 验证搜索器参数已清理:")
        for param in internal_params:
            if param in search_params:
                print(f"  ❌ {param} 仍然存在")
                return False
            else:
                print(f"  ✅ {param} 已移除")

        # 测试实际的搜索调用
        print(f"\n🧪 测试实际搜索调用...")
        context = create_request_context("cleaned_api_test", "test_user")

        result = searcher.search(
            query="消防",
            size=10,
            from_=0,
            filters=None,
            min_score=None,
            context=context
        )

        print(f"✅ 搜索调用成功!")
        print(f"  - 返回结果类型: {type(result).__name__}")
        print(f"  - 总命中数: {result.total}")

        # 检查上下文中的功能标志
        feature_flags = context.metadata.get('feature_flags', {})
        print(f"\n🚩 实际使用的功能标志:")
        for flag, value in feature_flags.items():
            print(f"  - {flag}: {value}")

        # 验证使用了配置默认值
        expected_translation = config.query_config.enable_translation
        expected_embedding = config.query_config.enable_text_embedding

        actual_translation = feature_flags.get('translation_enabled')
        actual_embedding = feature_flags.get('embedding_enabled')

        print(f"\n📊 功能验证:")
        print(f"  翻译功能: 期望={expected_translation}, 实际={actual_translation} {'✅' if expected_translation == actual_translation else '❌'}")
        print(f"  向量功能: 期望={expected_embedding}, 实际={actual_embedding} {'✅' if expected_embedding == actual_embedding else '❌'}")

        if expected_translation == actual_translation and expected_embedding == actual_embedding:
            print(f"\n🎉 API清理成功!")
            print(f"✅ 用户不再需要传递内部参数")
            print(f"✅ 后端自动使用配置默认值")
            print(f"✅ 功能完全透明")
            return True
        else:
            print(f"\n⚠️  功能验证失败")
            return False

    except Exception as e:
        print(f"❌ 测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    success = test_cleaned_api()
    sys.exit(0 if success else 1)