diff options
| author | 2019-09-18 00:31:39 +1000 | |
|---|---|---|
| committer | 2019-09-18 00:31:39 +1000 | |
| commit | 6036e1a67901c504dd7c62e2a50500c022a0df25 (patch) | |
| tree | 8ef97d393f6635094e1fdb1e5415851ca285d7e4 /tests/test_converters.py | |
| parent | Remove duplicate coverage.xml gitignore (diff) | |
| parent | Add tests for `bot.converters`. (#418) (diff) | |
Merge branch 'master' into add-pytest-cov
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))  |