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

**Validates: Requirements 4.1, 4.4**

从 task_registry.py 中提取所有 layer="DWS" 的任务代码，
验证 docs/etl_tasks/dws_tasks.md 中包含每个任务代码的说明章节，
并标注其更新策略。
"""
# Feature: etl-task-documentation, Property 3: DWS 任务文档覆盖完整性

from __future__ import annotations

from pathlib import Path

import pytest

from orchestration.task_registry import default_registry

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

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

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


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


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

@pytest.mark.parametrize("task_code", _DWS_TASK_CODES, ids=_DWS_TASK_CODES)
def test_dws_task_code_in_doc(task_code: str, dws_doc_content: str):
    """Property 3: 每个注册的 DWS 任务代码在 dws_tasks.md 中有对应说明。

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