#!/usr/bin/env python3 """ 測試 LDAP 搜尋功能的獨立腳本 用於偵錯郵件通知對象搜尋問題 """ from ldap_utils import search_ldap_principals, search_ldap_groups from app import app import sys def test_user_search(): """測試使用者搜尋功能""" print("=== 測試使用者搜尋功能 ===") test_terms = ["劉", "liu", "管理", "admin", "工程"] for term in test_terms: print(f"\n搜尋詞: '{term}'") print("-" * 40) try: results = search_ldap_principals(term, limit=10) print(f"找到 {len(results)} 個結果:") for i, result in enumerate(results, 1): print(f"{i}. {result['name']} ({result['email']})") except Exception as e: print(f"搜尋失敗: {e}") import traceback traceback.print_exc() def test_group_search(): """測試群組搜尋功能""" print("\n=== 測試群組搜尋功能 ===") test_terms = ["管理", "工程", "admin", "group"] for term in test_terms: print(f"\n搜尋詞: '{term}'") print("-" * 40) try: results = search_ldap_groups(term, limit=10) print(f"找到 {len(results)} 個群組:") for i, result in enumerate(results, 1): print(f"{i}. {result['name']} (成員數: {result['member_count']})") except Exception as e: print(f"群組搜尋失敗: {e}") import traceback traceback.print_exc() def test_interactive_search(): """互動式搜尋測試""" print("\n=== 互動式搜尋測試 ===") while True: search_term = input("\n請輸入搜尋詞 (或輸入 'quit' 結束): ").strip() if search_term.lower() == 'quit': break if not search_term: continue print(f"\n搜尋 '{search_term}'...") # 搜尋使用者 try: user_results = search_ldap_principals(search_term, limit=10) print(f"\n👤 使用者結果 ({len(user_results)}):") for i, result in enumerate(user_results, 1): print(f" {i}. {result['name']} ({result['email']})") except Exception as e: print(f"使用者搜尋失敗: {e}") # 搜尋群組 try: group_results = search_ldap_groups(search_term, limit=5) print(f"\n👥 群組結果 ({len(group_results)}):") for i, result in enumerate(group_results, 1): print(f" {i}. {result['name']} (成員: {result['member_count']})") except Exception as e: print(f"群組搜尋失敗: {e}") def main(): """主測試函式""" print("LDAP 搜尋功能測試工具") print("=" * 50) with app.app_context(): # 測試預設搜尋詞 test_user_search() test_group_search() # 互動式測試 choice = input("\n是否要進行互動式搜尋測試? (y/N): ").strip().lower() if choice == 'y': test_interactive_search() print("\n測試完成!") if __name__ == "__main__": try: main() except KeyboardInterrupt: print("\n\n測試已中斷") except Exception as e: print(f"\n測試發生錯誤: {e}") import traceback traceback.print_exc()