pyircbot/tests/modules/test_calc.py
2017-12-03 20:58:20 -08:00

82 lines
2.8 KiB
Python

import pytest
from contextlib import closing
from tests.lib import * # NOQA - fixtures
@pytest.fixture
def calcbot(fakebot):
"""
Provide a bot loaded with the Calc module. Clear the database.
"""
fakebot.botconfig["module_configs"]["Calc"] = {
"allowDelete": True,
"delaySubmit": 0,
"delayCalc": 0,
"delayCalcSpecific": 0,
"delayMatch": 0}
fakebot.loadmodule("SQLite")
tables = ["calc_addedby", "calc_channels", "calc_definitions", "calc_words"]
with closing(fakebot.moduleInstances["SQLite"].opendb("calc.db")) as db:
for t in tables:
db.query("DROP TABLE IF EXISTS `{}`;".format(t))
fakebot.loadmodule("Calc")
for t in tables:
assert fakebot.moduleInstances["Calc"].sql.tableExists("calc_addedby")
return fakebot
def test_calc_empty(calcbot):
calcbot.feed_line("calc")
calcbot.act_PRIVMSG.assert_called_once_with('#test', 'This channel has no calcs, chatter :(')
calcbot.act_PRIVMSG.reset_mock()
def test_calc_adds(calcbot):
_add_fact(calcbot, "foo", "bar")
_add_fact(calcbot, "foo2", "bar2")
calcbot.feed_line(".quote foo2")
calcbot.act_PRIVMSG.assert_called_once_with('#test', 'foo2 \x03= bar2 \x0314[added by: chatter]')
calcbot.act_PRIVMSG.reset_mock()
def _add_fact(calcbot, fact, value):
calcbot.feed_line("calc {} = {}".format(fact, value))
calcbot.act_PRIVMSG.assert_called_once_with('#test', 'Thanks for the info, chatter.')
calcbot.act_PRIVMSG.reset_mock()
def test_match(calcbot):
_add_fact(calcbot, "xxx", "bar")
_add_fact(calcbot, "yyy", "bar2")
calcbot.feed_line(".match x")
calcbot.act_PRIVMSG.assert_called_once_with('#test', 'chatter: 1 match (xxx\x03)')
def test_delete(calcbot):
_add_fact(calcbot, "xxx", "bar")
_add_fact(calcbot, "yyy", "bar2")
calcbot.feed_line(".calc xxx =")
calcbot.act_PRIVMSG.assert_called_once_with('#test', 'Calc deleted, chatter.')
calcbot.act_PRIVMSG.reset_mock()
calcbot.feed_line(".calc xxx")
calcbot.act_PRIVMSG.assert_called_once_with('#test', "Sorry chatter, I don't know what 'xxx' is.")
def test_unicode(calcbot):
_add_fact(calcbot, "👌👌👌", "uncode keys")
_add_fact(calcbot, "uncode values", "👌👌👌")
calcbot.feed_line(".calc 👌👌👌")
calcbot.act_PRIVMSG.assert_called_once_with('#test', '👌👌👌 \x03= uncode keys \x0314[added by: chatter]')
calcbot.act_PRIVMSG.reset_mock()
calcbot.feed_line(".match 👌")
calcbot.act_PRIVMSG.assert_called_once_with('#test', "chatter: 1 match (👌👌👌\x03)")
def test_delete_disable(calcbot):
calcbot.botconfig["module_configs"]["Calc"]["allowDelete"] = False
_add_fact(calcbot, "xxx", "bar")
_add_fact(calcbot, "yyy", "bar2")
calcbot.feed_line("calc xxx =")
calcbot.act_PRIVMSG.assert_not_called()