136 lines
6.0 KiB
Python
136 lines
6.0 KiB
Python
"""Test IRC behavior of the dice plugin."""
|
||
import re
|
||
from unittest import mock
|
||
|
||
from django.test import TestCase
|
||
|
||
import dice.ircplugin
|
||
from ircbot.models import IrcServer
|
||
|
||
|
||
class MarkovTestCase(TestCase):
|
||
"""Test the markov plugin."""
|
||
|
||
fixtures = ['tests/fixtures/irc_server_fixture.json']
|
||
|
||
def setUp(self):
|
||
"""Create common objects."""
|
||
self.mock_bot = mock.MagicMock()
|
||
self.mock_connection = mock.MagicMock()
|
||
|
||
self.mock_connection.get_nickname.return_value = 'test_bot'
|
||
self.mock_connection.server_config = IrcServer.objects.get(pk=1)
|
||
|
||
self.plugin = dice.ircplugin.Dice(self.mock_bot, self.mock_connection, mock.MagicMock())
|
||
|
||
def test_cypher_roll_strings(self):
|
||
"""Simulate incoming Cypher System requests."""
|
||
mock_event = mock.MagicMock()
|
||
mock_event.source = 'test!test@test'
|
||
mock_event.target = '#test'
|
||
mock_event.recursing = False
|
||
|
||
# general task roll (no damage output on a 17)
|
||
mock_event.arguments = ['!cypher T3']
|
||
match = re.search(dice.ircplugin.CYPHER_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=17):
|
||
self.plugin.handle_cypher_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: your check 9succeeded! 14(d20=17 vs. diff. 3)'
|
||
)
|
||
|
||
# general attack roll (incl. damage output on a 17)
|
||
mock_event.arguments = ['!cypher A3']
|
||
match = re.search(dice.ircplugin.CYPHER_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=17):
|
||
self.plugin.handle_cypher_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: your attack 9succeeded, with +1 damage! 14(d20=17 vs. diff. 3)'
|
||
)
|
||
|
||
# general task roll, case insensitive
|
||
mock_event.arguments = ['!cypher t3']
|
||
match = re.search(dice.ircplugin.CYPHER_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=17):
|
||
self.plugin.handle_cypher_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: your check 9succeeded! 14(d20=17 vs. diff. 3)'
|
||
)
|
||
|
||
# unknown target roll
|
||
mock_event.arguments = ['!cypher +1']
|
||
match = re.search(dice.ircplugin.CYPHER_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=17):
|
||
self.plugin.handle_cypher_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: your check beats a difficulty 4 task. 14(d20=17 with +1 levels)'
|
||
)
|
||
|
||
# no mod or known difficulty
|
||
mock_event.arguments = ['!cypher unmodded attempt']
|
||
match = re.search(dice.ircplugin.CYPHER_COMMAND_REGEX, mock_event.arguments[0])
|
||
self.plugin.handle_cypher_roll(self.mock_connection, mock_event, match)
|
||
with mock.patch('random.SystemRandom.randint', return_value=9):
|
||
self.plugin.handle_cypher_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: unmodded attempt beats a difficulty 3 task. 14(d20=9)'
|
||
)
|
||
|
||
def test_reaction_roll_strings(self):
|
||
"""Simulate incoming reaction requests."""
|
||
mock_event = mock.MagicMock()
|
||
mock_event.source = 'test!test@test'
|
||
mock_event.target = '#test'
|
||
mock_event.recursing = False
|
||
|
||
# good and very good are bold green
|
||
mock_event.arguments = ['!reaction']
|
||
match = re.search(dice.ircplugin.REACTION_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=18):
|
||
self.plugin.handle_reaction_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: the current disposition is 9positive 14(18)'
|
||
)
|
||
mock_event.arguments = ['!reaction']
|
||
match = re.search(dice.ircplugin.REACTION_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=20):
|
||
self.plugin.handle_reaction_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: the current disposition is 9VERY positive 14(20)'
|
||
)
|
||
|
||
# decent is green
|
||
mock_event.arguments = ['!reaction']
|
||
match = re.search(dice.ircplugin.REACTION_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=10):
|
||
self.plugin.handle_reaction_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: the current disposition is 9positive, with complications 14(10)'
|
||
)
|
||
|
||
# bad and very bad are bold red
|
||
mock_event.arguments = ['!reaction']
|
||
match = re.search(dice.ircplugin.REACTION_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=4):
|
||
self.plugin.handle_reaction_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: the current disposition is 4negative 14(4)'
|
||
)
|
||
mock_event.arguments = ['!reaction']
|
||
match = re.search(dice.ircplugin.REACTION_COMMAND_REGEX, mock_event.arguments[0])
|
||
with mock.patch('random.SystemRandom.randint', return_value=1):
|
||
self.plugin.handle_reaction_roll(self.mock_connection, mock_event, match)
|
||
self.mock_bot.reply.assert_called_with(
|
||
mock_event,
|
||
'test: the current disposition is 4VERY negative 14(1)'
|
||
)
|