""" API 端点测试 """ def test_root_endpoint(client): """测试根路径""" response = client.get("/") assert response.status_code == 200 data = response.json() assert data["status"] == "running" assert "swagger_docs" in data def test_health_check(client): """测试健康检查端点""" response = client.get("/health") assert response.status_code == 200 data = response.json() assert data["status"] == "healthy" def test_get_token_success(client, sample_token_request): """测试获取 Token - 成功场景""" response = client.post("/account/common/getToken", data=sample_token_request) assert response.status_code == 200 data = response.json() assert data["code"] == "200" assert "token" in data["data"] assert "projectId" in data["data"] def test_get_token_error_40101(client): """测试获取 Token - 错误场景 40101""" request_data = { "projectNo": "test_error_40101", "entityName": "测试企业", "userId": "902001", "userName": "902001", "appId": "remote_app", "appSecretCode": "test_secret_code_12345", "role": "VIEWER", "orgCode": "902000", "departmentCode": "902000", } response = client.post("/account/common/getToken", data=request_data) assert response.status_code == 200 data = response.json() assert data["code"] == "40101" assert data["successResponse"] == False def test_fetch_inner_flow_success(client, sample_inner_flow_request): """测试拉取行内流水 - 成功场景""" response = client.post( "/watson/api/project/getJZFileOrZjrcuFile", data=sample_inner_flow_request ) assert response.status_code == 200 data = response.json() assert data["code"] == "200" assert data["successResponse"] == True assert isinstance(data["data"], list) assert len(data["data"]) == 1 assert isinstance(data["data"][0], int) assert 10000 <= data["data"][0] <= 99999 def test_fetch_inner_flow_error_501014(client): """测试拉取行内流水 - 错误场景 501014""" request_data = { "groupId": 1001, "customerNo": "test_error_501014", "dataChannelCode": "test_code", "requestDateId": 20240101, "dataStartDateId": 20240101, "dataEndDateId": 20240131, "uploadUserId": 902001, } response = client.post( "/watson/api/project/getJZFileOrZjrcuFile", data=request_data ) assert response.status_code == 200 data = response.json() assert data["code"] == "501014" assert data["successResponse"] == False def test_get_upload_status_with_log_id(client): """测试带 logId 参数查询返回非空 logs""" response = client.get("/watson/api/project/bs/upload?groupId=1000&logId=13994") assert response.status_code == 200 data = response.json() # 验证基本响应结构 assert data["code"] == "200" assert data["status"] == "200" assert data["successResponse"] is True # 验证 logs 不为空 assert len(data["data"]["logs"]) == 1 # 验证返回的 logId 正确 log = data["data"]["logs"][0] assert log["logId"] == 13994 # 验证固定成功状态 assert log["status"] == -5 assert log["uploadStatusDesc"] == "data.wait.confirm.newaccount" # 验证 logMeta 格式正确 assert log["logMeta"] == "{\"lostHeader\":[],\"balanceAmount\":\"-1\"}" def test_get_upload_status_without_log_id(client): """测试不带 logId 参数查询返回空 logs 数组""" response = client.get("/watson/api/project/bs/upload?groupId=1000") assert response.status_code == 200 data = response.json() # 验证基本响应结构 assert data["code"] == "200" assert data["status"] == "200" assert data["successResponse"] is True # 验证 logs 为空 assert len(data["data"]["logs"]) == 0 # 验证其他字段存在 assert data["data"]["status"] == "" assert data["data"]["accountId"] == 8954 assert data["data"]["currency"] == "CNY" def test_deterministic_data_generation(client): """测试相同 logId 多次查询返回相同的核心字段值""" # 第一次查询 response1 = client.get("/watson/api/project/bs/upload?groupId=1000&logId=13994") log1 = response1.json()["data"]["logs"][0] # 第二次查询 response2 = client.get("/watson/api/project/bs/upload?groupId=1000&logId=13994") log2 = response2.json()["data"]["logs"][0] # 验证关键字段相同 assert log1["logId"] == log2["logId"] assert log1["bankName"] == log2["bankName"] assert log1["accountNoList"] == log2["accountNoList"] assert log1["enterpriseNameList"] == log2["enterpriseNameList"] assert log1["status"] == log2["status"] assert log1["logMeta"] == log2["logMeta"] assert log1["templateName"] == log2["templateName"] assert log1["trxDateStartId"] == log2["trxDateStartId"] assert log1["trxDateEndId"] == log2["trxDateEndId"] def test_field_completeness(client): """测试返回数据包含完整的 26 个字段""" response = client.get("/watson/api/project/bs/upload?groupId=1000&logId=13994") log = response.json()["data"]["logs"][0] # 验证所有必需字段存在 required_fields = [ "accountNoList", "bankName", "dataTypeInfo", "downloadFileName", "enterpriseNameList", "fileSize", "fileUploadBy", "fileUploadByUserName", "fileUploadTime", "isSplit", "leId", "logId", "logMeta", "logType", "loginLeId", "lostHeader", "realBankName", "rows", "source", "status", "templateName", "totalRecords", "trxDateEndId", "trxDateStartId", "uploadFileName", "uploadStatusDesc" ] for field in required_fields: assert field in log, f"缺少字段: {field}"