"""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)' )