sopel/test/test_module.py

211 lines
5.3 KiB
Python
Raw Permalink Normal View History

2017-11-22 19:26:40 -05:00
# coding=utf-8
"""Tests for message formatting"""
from __future__ import unicode_literals, absolute_import, print_function, division
import pytest
from sopel.trigger import PreTrigger, Trigger
from sopel.test_tools import MockSopel, MockSopelWrapper
from sopel.tools import Identifier
from sopel import module
@pytest.fixture
def sopel():
bot = MockSopel('Sopel')
bot.config.core.owner = 'Bar'
return bot
@pytest.fixture
def bot(sopel, pretrigger):
bot = MockSopelWrapper(sopel, pretrigger)
bot.privileges = dict()
bot.privileges[Identifier('#Sopel')] = dict()
bot.privileges[Identifier('#Sopel')][Identifier('Foo')] = module.VOICE
return bot
@pytest.fixture
def pretrigger():
line = ':Foo!foo@example.com PRIVMSG #Sopel :Hello, world'
return PreTrigger(Identifier('Foo'), line)
@pytest.fixture
def pretrigger_pm():
line = ':Foo!foo@example.com PRIVMSG Sopel :Hello, world'
return PreTrigger(Identifier('Foo'), line)
@pytest.fixture
def trigger_owner(bot):
line = ':Bar!bar@example.com PRIVMSG #Sopel :Hello, world'
return Trigger(bot.config, PreTrigger(Identifier('Bar'), line), None)
@pytest.fixture
def trigger(bot, pretrigger):
return Trigger(bot.config, pretrigger, None)
@pytest.fixture
def trigger_pm(bot, pretrigger_pm):
return Trigger(bot.config, pretrigger_pm, None)
def test_unblockable():
@module.unblockable
def mock(bot, trigger, match):
return True
assert mock.unblockable is True
def test_interval():
@module.interval(5)
def mock(bot, trigger, match):
return True
assert mock.interval == [5]
def test_rule():
@module.rule('.*')
def mock(bot, trigger, match):
return True
assert mock.rule == ['.*']
def test_thread():
@module.thread(True)
def mock(bot, trigger, match):
return True
assert mock.thread is True
def test_commands():
@module.commands('sopel')
def mock(bot, trigger, match):
return True
assert mock.commands == ['sopel']
def test_nick_commands():
@module.nickname_commands('sopel')
def mock(bot, trigger, match):
return True
assert mock.rule == ["""
^
$nickname[:,]? # Nickname.
\s+(sopel) # Command as group 1.
(?:\s+ # Whitespace to end command.
( # Rest of the line as group 2.
(?:(\S+))? # Parameters 1-4 as groups 3-6.
(?:\s+(\S+))?
(?:\s+(\S+))?
(?:\s+(\S+))?
.* # Accept anything after the parameters. Leave it up to
# the module to parse the line.
))? # Group 1 must be None, if there are no parameters.
$ # EoL, so there are no partial matches.
"""]
def test_priority():
@module.priority('high')
def mock(bot, trigger, match):
return True
assert mock.priority == 'high'
def test_event():
@module.event('301')
def mock(bot, trigger, match):
return True
assert mock.event == ['301']
def test_intent():
@module.intent('ACTION')
def mock(bot, trigger, match):
return True
assert mock.intents == ['ACTION']
def test_rate():
@module.rate(5)
def mock(bot, trigger, match):
return True
assert mock.rate == 5
def test_require_privmsg(bot, trigger, trigger_pm):
@module.require_privmsg('Try again in a PM')
def mock(bot, trigger, match=None):
return True
assert mock(bot, trigger) is not True
assert mock(bot, trigger_pm) is True
@module.require_privmsg
def mock_(bot, trigger, match=None):
return True
assert mock_(bot, trigger) is not True
assert mock_(bot, trigger_pm) is True
def test_require_chanmsg(bot, trigger, trigger_pm):
@module.require_chanmsg('Try again in a channel')
def mock(bot, trigger, match=None):
return True
assert mock(bot, trigger) is True
assert mock(bot, trigger_pm) is not True
@module.require_chanmsg
def mock_(bot, trigger, match=None):
return True
assert mock(bot, trigger) is True
assert mock(bot, trigger_pm) is not True
def test_require_privilege(bot, trigger):
@module.require_privilege(module.VOICE)
def mock_v(bot, trigger, match=None):
return True
assert mock_v(bot, trigger) is True
@module.require_privilege(module.OP, 'You must be at least opped!')
def mock_o(bot, trigger, match=None):
return True
assert mock_o(bot, trigger) is not True
def test_require_admin(bot, trigger, trigger_owner):
@module.require_admin('You must be an admin')
def mock(bot, trigger, match=None):
return True
assert mock(bot, trigger) is not True
@module.require_admin
def mock_(bot, trigger, match=None):
return True
assert mock_(bot, trigger_owner) is True
def test_require_owner(bot, trigger, trigger_owner):
@module.require_owner('You must be an owner')
def mock(bot, trigger, match=None):
return True
assert mock(bot, trigger) is not True
@module.require_owner
def mock_(bot, trigger, match=None):
return True
assert mock_(bot, trigger_owner) is True
def test_example(bot, trigger):
@module.commands('mock')
@module.example('.mock', 'True')
def mock(bot, trigger, match=None):
return True
assert mock(bot, trigger) is True