from dataclasses import dataclass, field, fields

import pytest

from docs.generate_cli_docs import format_default_value


@dataclass
class _DefaultValueConfig:
    required: int
    optional_list: list[str] = field(default_factory=list)
    optional_dict: dict[str, str] = field(default_factory=dict)


@pytest.mark.parametrize(
    ("field_name", "expected"),
    [
        ("required", "**Required**"),
        ("optional_list", "`[]`"),
        ("optional_dict", "`{}`"),
    ],
)
def test_format_default_value_distinguishes_factories_from_required_fields(
    field_name: str, expected: str
):
    """Dataclass factories should render their value instead of Required."""
    field_by_name = {
        field_obj.name: field_obj for field_obj in fields(_DefaultValueConfig)
    }

    assert format_default_value(field_by_name[field_name]) == expected