""" 企业模块测试用例。 """ import pytest from fastapi.testclient import TestClient from app.core.dependencies import get_current_user, db_getter, redis_getter @pytest.fixture def app_with_auth(): """创建带认证覆盖的测试应用""" from unittest.mock import MagicMock from main import create_app from app.core.database import async_db_session from app.api.v1.module_system.auth.schema import AuthSchema from app.api.v1.module_system.user.model import UserModel app = create_app() async def override_get_current_user( request, db, redis, token, ): """覆盖 get_current_user,返回模拟的超级管理员用户""" mock_user = MagicMock(spec=UserModel) mock_user.id = 1 mock_user.username = "test_user" mock_user.is_superuser = True mock_user.roles = [] mock_user.dept = None mock_user.positions = [] auth = AuthSchema(db=db, check_data_scope=False) auth.user = mock_user return auth async def override_db_getter(): """覆盖数据库会话,使用真实的异步会话""" async with async_db_session() as session: yield session async def override_redis_getter(request): """覆盖 Redis getter""" from app.core.database import async_redis_connect redis = await async_redis_connect() yield redis await redis.aclose() app.dependency_overrides[get_current_user] = override_get_current_user app.dependency_overrides[db_getter] = override_db_getter app.dependency_overrides[redis_getter] = override_redis_getter yield app app.dependency_overrides.clear() @pytest.fixture def auth_client(app_with_auth): """创建带认证的测试客户端""" with TestClient(app_with_auth) as client: yield client def test_create_enterprise_success(auth_client: TestClient) -> None: """ 测试创建企业成功场景。 参数: - auth_client (TestClient): 带认证的测试客户端。 """ data = { "name": "测试企业", "short_name": "测试", "identity_type": "ALIPAY_USER_ID", "identity": "2088123456789012", "register_mode": "NORMAL", "sign_fund_way": "BALANCE", } response = auth_client.post("/payment/enterprise", json=data) assert response.status_code == 200 body = response.json() assert body["success"] is True assert body["code"] == 0 assert body["msg"] == "创建企业成功" assert body["data"] is not None assert body["data"]["name"] == "测试企业" assert body["data"]["out_biz_no"] is not None assert body["data"]["status"] == "ENTERPRISE_CREATE" def test_create_enterprise_with_optional_fields(auth_client: TestClient) -> None: """ 测试创建企业时传入可选字段。 参数: - auth_client (TestClient): 带认证的测试客户端。 """ data = { "name": "测试企业完整", "short_name": "完整测试", "identity_type": "ALIPAY_LOGON_ID", "identity": "test@example.com", "register_mode": "NORMAL", "sign_fund_way": "CREDIT", "base_info": { "industry": "互联网", "enterprise_code": "91110000XXXXXXXX", "enterprise_name": "测试企业全称", }, } response = auth_client.post("/payment/enterprise", json=data) assert response.status_code == 200 body = response.json() assert body["success"] is True assert body["data"]["name"] == "测试企业完整" def test_create_enterprise_invalid_identity(auth_client: TestClient) -> None: """ 测试创建企业时 identity 和 identity_open_id 都为空的情况。 参数: - auth_client (TestClient): 带认证的测试客户端。 """ data = { "name": "测试企业", "identity_type": "ALIPAY_USER_ID", "register_mode": "NORMAL", "sign_fund_way": "BALANCE", } response = auth_client.post("/payment/enterprise", json=data) assert response.status_code == 422 def test_create_enterprise_duplicate_biz_no(auth_client: TestClient) -> None: """ 测试使用相同的 out_biz_no 创建企业(幂等性)。 参数: - auth_client (TestClient): 带认证的测试客户端。 """ data = { "name": "测试企业A", "short_name": "测试A", "identity_type": "ALIPAY_USER_ID", "identity": "2088123456789012", "register_mode": "NORMAL", "sign_fund_way": "BALANCE", } response1 = auth_client.post("/payment/enterprise", json=data) assert response1.status_code == 200 data2 = { "name": "测试企业B", "short_name": "测试B", "identity_type": "ALIPAY_USER_ID", "identity": "2088123456789013", "register_mode": "NORMAL", "sign_fund_way": "BALANCE", } response2 = auth_client.post("/payment/enterprise", json=data2) assert response2.status_code == 200 if __name__ == "__main__": pytest.main(["-v", __file__])