import pytest

from warc2zim.main import main


@pytest.mark.parametrize(
    "title, is_valid",
    [
        pytest.param("A title", True, id="a_valid_title"),
        pytest.param("A very very very very long title", False, id="an_invalid_title"),
    ],
)
def test_title_validation(title, is_valid):
    args = ["--name", "test", "--title", title, "--output", "./"]
    if is_valid:
        assert main(args) == 100
    else:
        with pytest.raises(ValueError, match="Title value is too long"):
            main(args)


@pytest.mark.parametrize(
    "description, is_valid",
    [
        pytest.param("A description", True, id="a_valid_description"),
        pytest.param(
            "A " + "".join(["very " for i in range(20)]) + "long description",
            False,
            id="an_invalid_description",
        ),
    ],
)
def test_description_validation(description, is_valid):
    args = ["--name", "test", "--description", description, "--output", "./"]
    if is_valid:
        assert main(args) == 100
    else:
        with pytest.raises(ValueError, match="Description value is too long"):
            main(args)


@pytest.mark.parametrize(
    "long_description, is_valid",
    [
        pytest.param("A long description", True, id="a_valid_long_description"),
        pytest.param(
            "A " + "".join(["very " for i in range(800)]) + "long description",
            False,
            id="an_invalid_long_description",
        ),
    ],
)
def test_long_description_validation(long_description, is_valid):
    args = [
        "--name",
        "test",
        "--long-description",
        long_description,
        "--output",
        "./",
    ]
    if is_valid:
        assert main(args) == 100
    else:
        with pytest.raises(ValueError, match="LongDescription value is too long"):
            main(args)


@pytest.mark.parametrize(
    "tags, is_valid",
    [
        pytest.param(["tag1", "tag2"], True, id="valid_tags"),
        # NOTA: there is no tests for invalid tags, since it is not currently possible
    ],
)
def test_tags_validation(tags, is_valid):
    args = ["--name", "test", "--tags", ";".join(tags), "--output", "./"]
    if is_valid:
        assert main(args) == 100
