import click import pytest from roll.cli.roll_param import RollParam from roll.roll import Roll def test_roll_param_passthrough(): roll = Roll() result = RollParam().convert(roll, None, None) assert result == roll @pytest.mark.parametrize("value", ["1d20", "2d20+3", "4d6-3"]) def test_roll_param_valid(value): result = RollParam().convert(value, None, None) assert isinstance(result, Roll) assert result.to_str() == value @pytest.mark.parametrize("value", ["advantage", "disadvantage"]) def test_roll_param_advantage(value): result = RollParam().convert(value, None, None) assert result == value @pytest.mark.parametrize("value", ["d90", "0d", "d-1", "aba", "000", "1d1d1d"]) def test_roll_param_invalid(value): with pytest.raises(click.exceptions.BadParameter) as e: RollParam().convert(value, None, None) assert value in e.value.message @pytest.mark.parametrize("value", ["0d0", "0d20", "1d0", "1d1"]) def test_roll_param_invalid_properties(value): with pytest.raises(click.exceptions.BadParameter) as e: RollParam().convert(value, None, None) assert "sides" in e.value.message or "dice" in e.value.message