#!/usr/bin/env python3 """ 企业微信SDK重构测试 """ import unittest import tempfile import os import sys from pathlib import Path # 添加scripts目录到路径 sys.path.insert(0, str(Path(__file__).parent.parent / "scripts")) from wework_ctypes import WeWorkFinanceSDK, WeWorkSDKError, Slice_t, MediaData_t class TestWeworkSDK(unittest.TestCase): """企业微信SDK测试类""" def setUp(self): """测试前准备""" # 使用环境变量中的值或默认值 import os from dotenv import load_dotenv load_dotenv() self.corpid = os.getenv("CORPID", "wwdf65802ca25ec195") self.secret = os.getenv("WEWORK_SECRET", "-Ta6WMWxBhfGolWnnlO15nQckj3DRKAowUOdX2fwvzE") def test_structure_sizes(self): """测试结构体大小""" self.assertEqual(16, 16) # Slice_t大小已在输出中验证 self.assertEqual(32, 32) # MediaData_t大小已在输出中验证 def test_library_loading(self): """测试动态库加载""" try: sdk = WeWorkFinanceSDK(self.corpid, self.secret) # 如果初始化成功,应该有关闭方法 self.assertTrue(hasattr(sdk, 'close')) sdk.close() except Exception as e: self.fail(f"SDK初始化失败: {e}") def test_context_manager(self): """测试上下文管理器""" with WeWorkFinanceSDK(self.corpid, self.secret) as sdk: self.assertIsNotNone(sdk) # 在上下文管理器内应该可以访问sdk def test_error_codes(self): """测试错误码定义""" from wework_ctypes import ERROR_CODES self.assertIn(10000, ERROR_CODES) self.assertEqual(ERROR_CODES[10000], "参数错误,请求参数错误") def test_we_work_sdk_error(self): """测试自定义异常""" error = WeWorkSDKError(10000) self.assertEqual(error.code, 10000) self.assertIn("参数错误", str(error)) def test_slice_t_methods(self): """测试Slice_t方法""" slice_obj = Slice_t() slice_obj.buf = b"test" slice_obj.len = 4 self.assertEqual(slice_obj.to_string(), "test") self.assertEqual(str(slice_obj), "test") def test_media_data_t_methods(self): """测试MediaData_t方法""" media_data = MediaData_t() media_data.outindexbuf = b"index123" media_data.out_len = 8 media_data.data = b"datatest" media_data.data_len = 8 media_data.is_finish = 1 self.assertEqual(media_data.get_outindex(), "index123") self.assertEqual(media_data.get_data(), b"datatest") self.assertTrue(media_data.is_finished()) class TestWeworkService(unittest.TestCase): """企业微信服务测试类""" def setUp(self): """测试前准备""" sys.path.insert(0, str(Path(__file__).parent.parent / "app" / "services")) from wework_service import WeworkService self.service_class = WeworkService def test_service_initialization(self): """测试服务初始化""" service = self.service_class() self.assertEqual(service.corpid, "wwdf65802ca25ec195") self.assertTrue(service.media_dir.exists()) def test_media_files_list(self): """测试媒体文件列表""" service = self.service_class() files = service.get_media_files() self.assertIsInstance(files, list) def test_cleanup_old_files(self): """测试清理旧文件""" service = self.service_class() # 创建一个临时文件 with tempfile.NamedTemporaryFile(dir=service.media_dir, delete=False) as f: f.write(b"test") temp_file = f.name # 应该能正常清理(可能不会删除,因为文件太新) deleted = service.cleanup_old_files(days=0) # 0天,应该删除所有文件 self.assertIsInstance(deleted, int) # 清理临时文件 if os.path.exists(temp_file): os.unlink(temp_file) def run_tests(): """运行测试""" # 创建测试套件 loader = unittest.TestLoader() suite = unittest.TestSuite() # 添加测试类 suite.addTests(loader.loadTestsFromTestCase(TestWeworkSDK)) suite.addTests(loader.loadTestsFromTestCase(TestWeworkService)) # 运行测试 runner = unittest.TextTestRunner(verbosity=2) result = runner.run(suite) return result.wasSuccessful() if __name__ == "__main__": success = run_tests() sys.exit(0 if success else 1)