Files
Hippolyzer/tests/proxy/test_commands.py
2021-07-22 23:59:55 +00:00

73 lines
2.2 KiB
Python

import unittest
from hippolyzer.lib.proxy.commands import handle_command, Parameter
class ExampleCommandHandler:
def __init__(self):
self.bar = None
self.baz = None
@handle_command("foobar", bar=str, baz=int)
async def foo(self, _session, _region, bar, baz):
self.bar = bar
self.baz = baz
@handle_command(
"bazquux",
x=Parameter(sep="/", parser=float),
y=Parameter(sep="/", parser=float),
z=Parameter(parser=float),
)
async def quux(self, _session, _region, x, y, z):
self.bar = (x, y, z)
@handle_command(
y=str,
)
async def own_name(self, _session, _region, y):
pass
@handle_command(
x=Parameter(str, optional=True),
)
async def optional(self, _session, _region, x=42):
self.bar = x
class TestCommandHandlers(unittest.IsolatedAsyncioTestCase):
def setUp(self) -> None:
self.handler = ExampleCommandHandler()
async def test_foo(self):
await self.handler.foo(None, None, "foozy 1")
self.assertEqual(self.handler.bar, "foozy")
self.assertEqual(self.handler.baz, 1)
async def test_quux(self):
# Alternative command name was provided
self.assertEqual(self.handler.quux.command.name, "bazquux")
await self.handler.quux(None, None, "1/2/3")
self.assertEqual(self.handler.bar, (1, 2, 3))
async def test_own_name(self):
self.assertEqual(self.handler.own_name.command.name, "own_name")
async def test_missing_param(self):
with self.assertRaises(KeyError):
await self.handler.foo(None, None, "")
async def test_optional_param(self):
await self.handler.optional(None, None, "foo") # type: ignore
self.assertEqual(self.handler.bar, "foo")
await self.handler.optional(None, None, "") # type: ignore
# Should have picked up the default value
self.assertEqual(self.handler.bar, 42)
async def test_bad_command(self):
with self.assertRaises(ValueError):
class _BadCommandHandler:
@handle_command("foobaz")
def bad_command(self, session, region):
assert False