141 lines
4.6 KiB
Python
141 lines
4.6 KiB
Python
#!/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)
|