---
phase: 6
plan: 1
wave: 1
title: "三平台数据解析函数单元测试（QUAL-02）"
depends_on: []
files_modified:
  - tests/ingest/test_configs_boss.py   # NEW
  - tests/ingest/test_configs_qcwy.py   # NEW
  - tests/ingest/test_configs_zhilian.py # NEW
autonomous: true
requirements:
  - QUAL-02
---

# Phase 6 Plan 01: 三平台解析函数单元测试（QUAL-02）

## Objective

为 `app/services/ingest/configs/` 中的三平台 `_extract_*` 和 `_build_*_push` 函数
新增单元测试，覆盖正常字段和缺字段场景。

去重逻辑测试（dedup.py）已在 Phase 5 完成（6 个测试），本 Plan 仅补充解析函数测试。

## Must Haves

- [ ] `tests/ingest/test_configs_boss.py`：8 个测试，覆盖 `_extract_job_id`、`_extract_company_name`、`_build_boss_push`
- [ ] `tests/ingest/test_configs_qcwy.py`：10 个测试，覆盖 `_extract_job_id`、`_extract_update_dt`、`_extract_company_name`、`_build_qcwy_push`（含 welfare 列表场景）
- [ ] `tests/ingest/test_configs_zhilian.py`：9 个测试，覆盖 `_extract_number`、`_extract_fpt`、`_extract_company_name`、`_build_zhilian_push`
- [ ] `pipenv run python -m pytest tests/ingest/ -v --tb=short` 全部绿色（含原有 dedup 6 个）
- [ ] `pipenv run python -m pytest tests/ -v` 全量通过

---

## Wave 1

### Task 1.1: tests/ingest/test_configs_boss.py

**测试清单：**
1. `test_extract_job_id_from_jobBaseInfoVO` — 正常嵌套字段
2. `test_extract_job_id_missing` — 缺 jobBaseInfoVO → None
3. `test_extract_company_name_from_name` — data["name"] 直接取
4. `test_extract_company_name_from_companyFullInfoVO` — 嵌套字段
5. `test_extract_company_name_missing` → None
6. `test_build_boss_push_full` — 完整字段，验证 source_type="Boss直聘"、url 含 encryptJobId
7. `test_build_boss_push_partial` — 缺字段不 raise，返回合理降级值
8. `test_build_boss_push_none_data` — 空 dict，关键字段为 None

---

### Task 1.2: tests/ingest/test_configs_qcwy.py

**测试清单：**
1. `test_extract_job_id_normal`
2. `test_extract_job_id_missing` → None
3. `test_extract_update_dt_normal`
4. `test_extract_update_dt_missing` → None
5. `test_extract_company_name_from_companyName`
6. `test_extract_company_name_from_company_name_fallback`
7. `test_extract_company_name_missing` → None
8. `test_build_qcwy_push_welfare_list` — welfare 为对象列表，提取 chineseTitle
9. `test_build_qcwy_push_welfare_string` — welfare 为字符串
10. `test_build_qcwy_push_partial` — 缺字段 → 合理降级，source_type="前程无忧"

---

### Task 1.3: tests/ingest/test_configs_zhilian.py

**测试清单：**
1. `test_extract_number_normal`
2. `test_extract_number_missing` → None
3. `test_extract_fpt_normal`
4. `test_extract_fpt_missing` → None
5. `test_extract_company_name_from_companyName`
6. `test_extract_company_name_from_name_fallback`
7. `test_extract_company_name_missing` → None
8. `test_build_zhilian_push_skill_labels` — skillLabel 列表，提取 value
9. `test_build_zhilian_push_partial` — 缺字段降级，source_type="智联招聘"

---

## Verification

```bash
# 运行新测试
pipenv run python -m pytest tests/ingest/ -v --tb=short

# 全量回归
pipenv run python -m pytest tests/ -v --tb=short
```

**预期：** 所有 27-30 个测试通过，全量 ≥ 130 个测试全绿
