=== API Data Sync Service Test (env: test) === 1. 信封校验... ✓ 不支持的 PushType → code 400 ✓ Country 非 GB → code 400 ✓ bizParam 缺失 → code 400 ✓ bizParam 缺 BusinessSerialNumber → code 400 ✓ PushType/Country 大小写不敏感可进入后续校验(Data 缺失)→ code 400 2. 字段校验失败聚合... ✓ 字段缺失 → code 400 ✓ 错误聚合(≥ 10 项,; 分隔) ✓ bizParam 原样回传 ✓ 公司国家为英国 → code 400 且含中文错误(字段括号标注) ✓ 旧格式(中文国家名 + 旧全名字段)→ code 400 ✓ fileName 超长 → code 400 且含文件字段错误 ✓ fileUrl 非 http/https → code 400 ✓ fileName 未命中关键词 → code 400 且报 UploadFile 未命中 ✓ HEAD 探测文件不存在 → 400 且报文件不存在或无法访问 ✓ 支持文件超过2个(同一 UploadFile 字段多条)→ code 400 且报支持文件超过2个 ✓ 条目缺 fileUrl → code 400 且报 UploadFile 缺少 fileUrl ✓ 旧字段名 UploadFile1 → 400 且提示缺少上传文件字段(UploadFile) ✓ 旧字段名 UploadFile3 → 400 且提示缺少上传文件字段(UploadFile) 3. 合法负载 → INSERT uk_vat_register... ✓ code 200 ✓ 200 data 统一为 null(不返回 files/record_id/流水号) ✓ 目标库已落单(按 source_record_id 直查) ✓ 行存在 ✓ test 环境固定邮箱 registrationvat19413@usaeu.com(不新建) ✓ company_name_pinyin = NameEng ✓ vat_effective_date 拆分正确 ✓ 姓名两字段直接落库:名 Zhang / 姓 San ✓ 生日期拆分正确 ✓ office_country 转英文 China ✓ legal_person_country 转英文 China ✓ customer_phone 格式化去 +/空格/- ✓ submission_month = VAT 生效日期 +2 个月英文月名 ✓ DataSource = api ✓ biz_param 原样落库(含扩展字段) ✓ source_record_id = API:{BusinessId} ✓ push_type = 101 ✓ registration_status = 0 ✓ need_eori 按 NeedRequestEORI=false(JSON 布尔)→ 0 ✓ is_uk_company = 0(中国公司) ✓ upload_file_path1 = 文件 URL ✓ upload_file_path2 = 文件 URL ✓ upload_file_path3 = 文件 URL ✓ upload_file_type1 = 文件名 ✓ customer_email_password 写入 ✓ business_code / code=bizParam.BusinessSerialNumber / reg_number / annual_gmv 写入 3.5 单支持文件(UploadFile 仅 1 条支持文件)→ INSERT 且 upload_file_path3 为空... ✓ code 200 insert ✓ 200 data 统一为 null ✓ 目标库已落单(API:9876503 直查) ✓ path1 = 法人证件 URL(关键词分类 passport) ✓ path2 = 支持文件 URL(关键词分类 bank statement) ✓ path3 为空(只有一个支持文件,path3 不强制) 4. 重复提交(registration_status=0 待注册)→ 409... ✓ code 409 ✓ msg 提示待注册不允许重复提交(中文) ✓ 409 data 统一为 null ✓ 409 后行未被改写(status 仍 0、邮箱不变) 5. registration_status=3(注册失败)→ 200 UPDATE 允许更新资料... ✓ code 200 ✓ 200 data 统一为 null ✓ UPDATE 未新插行(API:{BusinessId} 仍 1 行) ✓ status 重置为 0 ✓ source_record_id 保持 API:{BusinessId}(更新不改身份) ✓ customer_email 未被动用(仍复用原邮箱) 6. registration_status=4(重试达上限)→ 200 UPDATE... ✓ code 200 ✓ 200 data 统一为 null 7. registration_status=2(注册成功)→ 409 不允许更新... ✓ code 409 ✓ msg 提示已注册完成不允许更新(中文) ✓ 409 data 统一为 null ✓ 409 后行 status 未被改写 8. 同 BusinessId 换流水号 → 等值查重命中... ✓ code 200(status=3 允许更新) ✓ 200 data 统一为 null ✓ 换流水号未新插行(等值命中原记录,仍 1 行) ✓ source_record_id 保持 API:{BusinessId}(更新不改身份) 9. 缺省 BusinessId → 按 BusinessSerialNumber 降级查重... ✓ 无 BusinessId 首次提交 → code 200 insert ✓ 200 data 统一为 null ✓ 目标库已落单(API:{流水号} 直查) ✓ source_record_id = API:{BusinessSerialNumber} ✓ status=0 重发(降级流水号命中)→ 409 ✓ status=3 → 200 update ✓ 200 data 统一为 null ✓ 复用本行邮箱(落库行未变更) ======================================== 通过: 78 失败: 0 ======================================== === All tests completed successfully! === [Cleanup] Deleted test rows with source_record_id: API:123456, API:9876503, API:TSTN20261003222710