Files
meshcore-bot/tests/commands/test_roll_command.py
Stacy Olivas ae57e651ea test: expanded test suite for v0.9.0 modules
Command tests:
- tests/commands/: test_base_command, test_cmd_command, test_dice_command,
  test_hello_command, test_help_command, test_magic8_command,
  test_ping_command, test_roll_command
- tests/test_bridge_bot_responses, test_channel_manager_logic,
  test_checkin_service, test_command_manager, test_command_prefix,
  test_config_merge, test_config_validation, test_db_manager,
  test_plugin_loader, test_profanity_filter, test_security_utils,
  test_service_plugin_loader, test_utils

Integration and unit:
- tests/integration/: test_path_graph_integration, test_path_resolution
- tests/regression/: test_keyword_escapes
- tests/unit/: test_mesh_graph, test_mesh_graph_edges,
  test_mesh_graph_multihop, test_mesh_graph_optimizations,
  test_mesh_graph_scoring, test_mesh_graph_validation,
  test_path_command_graph, test_path_command_graph_selection,
  test_path_command_multibyte

Helpers: tests/conftest.py, tests/helpers.py
2026-03-17 18:07:18 -07:00

81 lines
2.8 KiB
Python

"""Tests for modules.commands.roll_command."""
import re
import pytest
from modules.commands.roll_command import RollCommand
from tests.conftest import mock_message
class TestParseRollNotation:
"""Tests for parse_roll_notation()."""
def test_valid_number(self, command_mock_bot):
cmd = RollCommand(command_mock_bot)
assert cmd.parse_roll_notation("50") == 50
assert cmd.parse_roll_notation("100") == 100
assert cmd.parse_roll_notation("1000") == 1000
def test_out_of_range(self, command_mock_bot):
cmd = RollCommand(command_mock_bot)
assert cmd.parse_roll_notation("0") is None
assert cmd.parse_roll_notation("10001") is None
def test_invalid_input(self, command_mock_bot):
cmd = RollCommand(command_mock_bot)
assert cmd.parse_roll_notation("abc") is None
class TestRollCommandMatches:
"""Tests for matches_keyword()."""
def test_exact_roll_match(self, command_mock_bot):
cmd = RollCommand(command_mock_bot)
assert cmd.matches_keyword(mock_message(content="roll")) is True
def test_roll_with_number_match(self, command_mock_bot):
cmd = RollCommand(command_mock_bot)
assert cmd.matches_keyword(mock_message(content="roll 50")) is True
def test_roll_invalid_no_match(self, command_mock_bot):
cmd = RollCommand(command_mock_bot)
assert cmd.matches_keyword(mock_message(content="roll abc")) is False
class TestRollCommandExecute:
"""Tests for execute()."""
@pytest.mark.asyncio
async def test_roll_default_1_to_100(self, command_mock_bot):
command_mock_bot.config.add_section("Roll_Command")
command_mock_bot.config.set("Roll_Command", "enabled", "true")
cmd = RollCommand(command_mock_bot)
msg = mock_message(content="roll", is_dm=True)
result = await cmd.execute(msg)
assert result is True
call_args = command_mock_bot.command_manager.send_response.call_args
assert call_args is not None
response = call_args[0][1]
# Should be a number between 1 and 100
nums = re.findall(r'\d+', response)
assert len(nums) >= 1
val = int(nums[0])
assert 1 <= val <= 100
@pytest.mark.asyncio
async def test_roll_50(self, command_mock_bot):
command_mock_bot.config.add_section("Roll_Command")
command_mock_bot.config.set("Roll_Command", "enabled", "true")
cmd = RollCommand(command_mock_bot)
msg = mock_message(content="roll 50", is_dm=True)
result = await cmd.execute(msg)
assert result is True
call_args = command_mock_bot.command_manager.send_response.call_args
assert call_args is not None
response = call_args[0][1]
nums = re.findall(r'\d+', response)
assert len(nums) >= 1
val = int(nums[0])
assert 1 <= val <= 50