diff options
Diffstat (limited to '')
| -rw-r--r-- | tests/test_converters.py | 93 | 
1 files changed, 93 insertions, 0 deletions
| diff --git a/tests/test_converters.py b/tests/test_converters.py new file mode 100644 index 000000000..3cf774c80 --- /dev/null +++ b/tests/test_converters.py @@ -0,0 +1,93 @@ +import asyncio +from datetime import datetime +from unittest.mock import MagicMock + +import pytest +from discord.ext.commands import BadArgument + +from bot.converters import ( +    ExpirationDate, +    TagContentConverter, +    TagNameConverter, +    ValidPythonIdentifier, +) + + +    ('value', 'expected'), +    ( +        # sorry aliens +        ('2199-01-01T00:00:00', datetime(2199, 1, 1)), +    ) +) +def test_expiration_date_converter_for_valid(value: str, expected: datetime): +    converter = ExpirationDate() +    assert asyncio.run(converter.convert(None, value)) == expected + + +    ('value', 'expected'), +    ( +        ('hello', 'hello'), +        ('  h ello  ', 'h ello') +    ) +) +def test_tag_content_converter_for_valid(value: str, expected: str): +    assert asyncio.run(TagContentConverter.convert(None, value)) == expected + + +    ('value', 'expected'), +    ( +        ('', "Tag contents should not be empty, or filled with whitespace."), +        ('   ', "Tag contents should not be empty, or filled with whitespace.") +    ) +) +def test_tag_content_converter_for_invalid(value: str, expected: str): +    context = MagicMock() +    context.author = 'bob' + +    with pytest.raises(BadArgument, match=expected): +        asyncio.run(TagContentConverter.convert(context, value)) + + +    ('value', 'expected'), +    ( +        ('tracebacks', 'tracebacks'), +        ('Tracebacks', 'tracebacks'), +        ('  Tracebacks  ', 'tracebacks'), +    ) +) +def test_tag_name_converter_for_valid(value: str, expected: str): +    assert asyncio.run(TagNameConverter.convert(None, value)) == expected + + +    ('value', 'expected'), +    ( +        ('👋', "Don't be ridiculous, you can't use that character!"), +        ('', "Tag names should not be empty, or filled with whitespace."), +        ('  ', "Tag names should not be empty, or filled with whitespace."), +        ('42', "Tag names can't be numbers."), +        # Escape question mark as this is evaluated as regular expression. +        ('x' * 128, r"Are you insane\? That's way too long!"), +    ) +) +def test_tag_name_converter_for_invalid(value: str, expected: str): +    context = MagicMock() +    context.author = 'bob' + +    with pytest.raises(BadArgument, match=expected): +        asyncio.run(TagNameConverter.convert(context, value)) + + [email protected]('value', ('foo', 'lemon')) +def test_valid_python_identifier_for_valid(value: str): +    assert asyncio.run(ValidPythonIdentifier.convert(None, value)) == value + + [email protected]('value', ('nested.stuff', '#####')) +def test_valid_python_identifier_for_invalid(value: str): +    with pytest.raises(BadArgument, match=f'`{value}` is not a valid Python identifier'): +        asyncio.run(ValidPythonIdentifier.convert(None, value)) | 
