import pytest

from reflex.components.chakra.media.icon import ICON_LIST, Icon
from reflex.utils import format


def test_no_tag_errors():
    """Test that an icon without a tag raises an error."""
    with pytest.raises(AttributeError):
        Icon.create()


def test_children_errors():
    """Test that an icon with children raises an error."""
    with pytest.raises(AttributeError):
        Icon.create("child", tag="search")


@pytest.mark.parametrize(
    "tag",
    ICON_LIST,
)
def test_valid_icon(tag: str):
    """Test that a valid icon does not raise an error.

    Args:
        tag: The icon tag.
    """
    icon = Icon.create(tag=tag)
    assert icon.tag == format.to_title_case(tag) + "Icon"


@pytest.mark.parametrize("tag", ["", " ", "invalid", 123])
def test_invalid_icon(tag):
    """Test that an invalid icon raises an error.

    Args:
        tag: The icon tag.
    """
    with pytest.raises(ValueError):
        Icon.create(tag=tag)


@pytest.mark.parametrize(
    "tag",
    ["Check", "Close", "eDit"],
)
def test_tag_with_capital(tag: str):
    """Test that an icon that tag with capital does not raise an error.

    Args:
        tag: The icon tag.
    """
    icon = Icon.create(tag=tag)
    assert icon.tag == format.to_title_case(tag) + "Icon"
