# -*- coding: utf-8 -*-
"""DWD 任务文档覆盖完整性验证。

**Validates: Requirements 3.1**

从 task_registry.py 中提取所有 layer="DWD" 的任务代码，
验证 docs/etl_tasks/dwd_tasks.md 中包含每个任务代码的说明章节。
"""
# Feature: etl-task-documentation, Property 2: DWD 任务文档覆盖完整性

from __future__ import annotations

from pathlib import Path

import pytest

from orchestration.task_registry import default_registry

# ── 测试数据准备 ──────────────────────────────────────────────

_PROJECT_ROOT = Path(__file__).resolve().parents[2]
_DWD_DOC_PATH = _PROJECT_ROOT / "docs" / "etl_tasks" / "dwd_tasks.md"

# 从注册表动态获取所有 DWD 层任务代码
_DWD_TASK_CODES: list[str] = default_registry.get_tasks_by_layer("DWD")


@pytest.fixture(scope="module")
def dwd_doc_content() -> str:
    """读取 dwd_tasks.md 全文，供所有测试用例共享。"""
    assert _DWD_DOC_PATH.exists(), f"文档文件不存在: {_DWD_DOC_PATH}"
    return _DWD_DOC_PATH.read_text(encoding="utf-8")


# ── 参数化验证：每个 DWD 任务代码必须出现在文档中 ─────────────

@pytest.mark.parametrize("task_code", _DWD_TASK_CODES, ids=_DWD_TASK_CODES)
def test_dwd_task_code_in_doc(task_code: str, dwd_doc_content: str):
    """Property 2: 每个注册的 DWD 任务代码在 dwd_tasks.md 中有对应说明。

    **Validates: Requirements 3.1**
    """
    assert task_code in dwd_doc_content, (
        f"DWD 任务 '{task_code}' 已在 task_registry 中注册，"
        f"但未在 dwd_tasks.md 中找到对应说明章节"
    )
