| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- """
- 企业模块测试用例。
- """
- 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__])
|